webpack
从动态导入中删除未使用的语言
如果一个语言环境是动态导入的,那么来自 date-fns 的所有语言环境都由 webpack 加载到一个包中(~160kb)或拆分为多个块。 这会延长构建过程并增加占用的空间量。 但是,可以使用 webpack 使用 ContextReplacementPlugin 来精简语言。
假设我们有一个支持语言环境的点:
config.js
:
javascript
// `see date-fns/src/locale` for available locales
export const supportedLocales = ['en-US', 'de', 'pl', 'it']
我们还可以有一个格式化日期的函数:
javascript
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),
})
}
为了排除未使用的语言,我们可以使用 webpack ContextReplacementPlugin。
webpack.config.js
:
javascript
import webpack from 'webpack'
import { supportedLocales } from './config.js'
export default const config = {
plugins: [
new webpack.ContextReplacementPlugin(
/^date-fns[/\\]locale$/,
new RegExp(`\\.[/\\\\](${supportedLocales.join('|')})[/\\\\]index\\.js$`)
)
]
}
这会产生一个 ~23kb 的语言包。