You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							49 lines
						
					
					
						
							1.4 KiB
						
					
					
				
			
		
		
	
	
							49 lines
						
					
					
						
							1.4 KiB
						
					
					
				# webpack
 | 
						|
 | 
						|
## Removing unused languages from dynamic import
 | 
						|
 | 
						|
If a locale is imported dynamically, then all locales from date-fns are loaded by webpack into a bundle (~160kb) or split across the chunks. This prolongs the build process and increases the amount of space taken. However, it is possible to use webpack to trim down languages using [ContextReplacementPlugin].
 | 
						|
 | 
						|
Let's assume that we have a single point in which supported locales are present:
 | 
						|
 | 
						|
`config.js`:
 | 
						|
 | 
						|
```js
 | 
						|
// `see date-fns/src/locale` for available locales
 | 
						|
export const supportedLocales = ['en-US', 'de', 'pl', 'it']
 | 
						|
```
 | 
						|
 | 
						|
We could also have a function that formats the date:
 | 
						|
 | 
						|
```js
 | 
						|
const getLocale = (locale) => import(`date-fns/locale/${locale}/index.js`) // or require() if using CommonJS
 | 
						|
 | 
						|
const formatDate = (date, formatStyle, locale) => {
 | 
						|
  return format(date, formatStyle, {
 | 
						|
    locale: getLocale(locale),
 | 
						|
  })
 | 
						|
}
 | 
						|
```
 | 
						|
 | 
						|
In order to exclude unused languages we can use webpacks [ContextReplacementPlugin].
 | 
						|
 | 
						|
`webpack.config.js`:
 | 
						|
 | 
						|
```js
 | 
						|
import webpack from 'webpack'
 | 
						|
import { supportedLocales } from './config.js'
 | 
						|
 | 
						|
export default const config = {
 | 
						|
  plugins: [
 | 
						|
    new webpack.ContextReplacementPlugin(
 | 
						|
      /date\-fns[\/\\]/,
 | 
						|
      new RegExp(`[/\\\\\](${supportedLocales.join('|')})[/\\\\\]index\.js$`)
 | 
						|
    )
 | 
						|
  ]
 | 
						|
}
 | 
						|
```
 | 
						|
 | 
						|
This results in a language bundle of ~23kb .
 | 
						|
 | 
						|
[contextreplacementplugin]: https://webpack.js.org/plugins/context-replacement-plugin/
 |