gpt4 book ai didi

webpack - 带有死代码消除的 Webpack 树抖动是否适用于 node_modules?

转载 作者:行者123 更新时间:2023-12-01 01:47:46 25 4
gpt4 key购买 nike

考虑到这个 Webpack 3.8.1配置。

// common
module.exports = {
context: path.resolve(__dirname, './src'),
entry: [
'whatwg-fetch',
'./index'
],
output: {
path: path.resolve(__dirname, 'build/assets'),
publicPath: '/assets/',
filename: 'main.js'
},
plugins: [
new CleanWebpackPlugin(['build']),
],
module: {
rules: [{
test: /\.js$/,
exclude: /node_modules/,
use: {
loader: 'babel-loader',
}
}, {
test: /\.(scss|css)$/,
use: [{
loader: 'style-loader'
}, {
loader: 'css-loader'
}, {
loader: 'sass-loader'
}],
}, {
test: /\.(png|jpg|gif|woff2|woff)$/,
use: [
{
loader: 'url-loader',
options: {
limit: 8192
}
}
]
}]
}
};

//prod
module.exports = merge(common, {
plugins: [
new webpack.DefinePlugin({
'process.env.NODE_ENV': JSON.stringify('production')
}),
new UglifyJSPlugin()
],
devtool: 'none'
});

这个 Babel 6.26.0配置
{
"presets": [
[
"env",
{
"modules": false,
"targets": {
"browsers": [
">1%"
]
}
}
], [
"react"
]
],
"plugins": [
"transform-class-properties",
"transform-export-extensions",
"transform-object-rest-spread",
"react-hot-loader/babel"
]
}

我期待树木摇晃以及 UglifyJS 的死代码消除应该以一种使我能够从 index.es.js 编写命名导入的方式工作模块,例如 Material-UI-Icons未使用的将从捆绑包中删除。
import {Menu} from 'material-ui-icons';

这个库确实将 package.json 中定义的 ES6 模块重新导出为 "module": "index.es.js" .

然而,在导入单个图标后,我的包大小增加了 0.5MB。当我将其更改为
import Menu from 'material-ui-icons/Menu;

仅导入此图标,捆绑包大小再次减小。

我的配置是否有问题,或者我是否误解了摇树的工作原理并且不适用于这种情况?

最佳答案

所以经过一些额外的挖掘,我找到了原因/临时解决方案/解决方案。基本上,因为 ES Modules可能有副作用,Webpack也不是 UglifyJS可以安全地(根据规范)移除 index.es.js 中常见的未使用的再导出或类似的"module"入口点。

目前,有一些方法可以解决它。您可以手动只导入必要的模块,也可以使用 babel-plugin-direct-import .

好消息是 Webpack 4添加 support for pure modules通过side-effects旗帜。当库作者将其标记为纯时,摇树和缩小将按预期工作。我也推荐阅读this nice summary关于 NodeJS 中的 ESM 规范支持。

现在我建议使用 this wonderfull visualizer 手动处理你的包。并决定如何自行处理每个大型依赖项。

关于webpack - 带有死代码消除的 Webpack 树抖动是否适用于 node_modules?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47349386/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com