Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么webpack 4包含用于单个命名导入的整个文件?_Javascript_Webpack_Webpack 4_Tree Shaking - Fatal编程技术网

Javascript 为什么webpack 4包含用于单个命名导入的整个文件?

Javascript 为什么webpack 4包含用于单个命名导入的整个文件?,javascript,webpack,webpack-4,tree-shaking,Javascript,Webpack,Webpack 4,Tree Shaking,给定以下两个文件: //a.js 导出常数X=/*#uuuu纯uuu*/“X”; 常数a=函数(){ 返回“大约一个!”; }; a、 foo=函数(){ 返回“foo”; }; 导出默认值a; 及 //main.js 从“/a”导入{X}; 从“/b”导入{Y}”; 控制台日志(X,Y); 我补充说 “副作用”:false至package.json optimization.usedExports:true到webpack.config.js 但是运行webpack-p仍然包括捆绑包中

给定以下两个文件:

//a.js
导出常数X=/*#uuuu纯uuu*/“X”;
常数a=函数(){
返回“大约一个!”;
};
a、 foo=函数(){
返回“foo”;
};
导出默认值a;

//main.js
从“/a”导入{X};
从“/b”导入{Y}”;
控制台日志(X,Y);
我补充说

  • “副作用”:false
    package.json
  • optimization.usedExports:true
    webpack.config.js
但是运行
webpack-p
仍然包括捆绑包中的整个
a.js
文件。汇总仅包括来自
a.js的
X
()

删除
a.foo
定义“修复”了问题,但不是演示存储库之外的解决方案。 我已经多次阅读文档页面,在网页问题跟踪器上阅读了[无数关于树摇晃的问题,我仍然无法理解以下内容:

  • 为什么没有使用
    X
    上的
    /*#uu_u纯_*/
    标记
  • 有没有办法将webpack配置为只包含
    a.js
    中的X

您还可以签出以查看完整的网页包配置和相应的next.js/react问题(请参阅pages/index.jsx),这导致我出现了这个特定问题。

我的猜测:
导出默认值影响树抖动。
见:

在网页上的问题跟踪器提供了一个答案后,请尝试在引发问题后不删除默认值

似乎一个简短的压缩过程不足以压缩这段代码

默认的通过次数是1,但一旦提高到3,
a.js
就不再完全内联。这就是如何以更长的构建时间为代价实现的

const TerserWebpackPlugin = require("terser-webpack-plugin");

/** @type {import("webpack").Configuration} */
module.exports = {
    optimization: {
        minimizer: [
            new TerserWebpackPlugin({
                terserOptions: {
                    compress: {
                        passes: 3
                    }
                }
            })
        ]
    }
}

正如我的问题中提到的,如果我删除了
a.foo=
定义,默认导出是正确的树震动。此外,无论是否使用
a.foo
定义,导出都正确标记为
/*未使用的和谐默认导出*/
文章很有趣,我将查看它建议的插件文章中描述的问题无法检测到树震动故障,这可以解释a.js的完整内联