当您在没有转换(如 Babel)和缩小(如 UglifyJS)的情况下捆绑应用程序时,您会得到:未使用的和谐导出。
现在 Webpack 2+ 只标记未使用的代码并且不会将其导出到模块中。它提取所有内容并为缩小库留下未使用的代码。
为此,您可以将UglifyJS与 babel 一起使用。UglifyJS 还不支持 Javascript ES2015+ 的新语言特性。您将需要 Babel 将代码转换为 ES5,然后使用 UglifyJS 清理未使用的代码。
你将需要 .babelrc 文件:
我们必须告诉预设(在我们的例子中是babel-preset-env)跳过模块转译。
{
"presets": [
["env", {
"loose": true,
"modules": false
}]
]
}
和相应的 webpack 配置:
module: {
rules: [
{ test: /\.js$/, loader: 'babel-loader' }
]
},
plugins: [
new webpack.LoaderOptionsPlugin({
minimize: true,
debug: false
}),
new webpack.optimize.UglifyJsPlugin({
compress: {
warnings: true
},
output: {
comments: false
},
sourceMap: false
})
]
或者
Babili是一个更好的选择,因为 Babili 会在编译之前删除未使用的代码。在降级到 ES5 之前发现未使用的类要容易得多。Tree-shaking 也适用于类声明,而不仅仅是函数。
你会需要:
npm install babili babili-webpack-plugin --save-dev
在您的 webpack 配置中使用以下插件,如下所示:
plugins: [
new BabiliPlugin()
]
还有一种使用 babili 作为预设的优化方式。您可以参考他们的网站以将其用作 babel-loader 的预设。