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
			| 
								 
											3 years ago
										 
									 | 
							
								# 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/
							 |