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/
 |