为什么 Webpack 神器中会重复多次依赖?
Why is dependency repeated many times in Webpack artifact?
我有一个多入口点 webpack 构建,我正在为生产优化工件大小。 webpack-bundle-analyzer
产生了如下图片:
很明显,AtlasKit 依赖项占工件总大小的很大一部分。具体来说,我看到 styled-components.es.js
重复了很多次。更重要的是,这种相同的依赖性也存在于 vendor.js
中,它本身在所有其他包之间共享。
谁能解释为什么 styled-components.es.js
到处重复,为什么它不能通过 vendor.js
中的单一依赖项共享?有什么我可以做的来删除重复项并且只依赖于 vendor.js
中的单个 styled-components.es.js
依赖项吗?
我觉得有点奇怪,AtlasKit 依赖项有一个嵌套的 node_modules
文件夹包含在包中。为什么 dist
不够?也许这就是 styled-components.es.js
无法通过 vendor.js
共享的部分原因?
我试图通过 webpack 的 IgnorePlugin(类似于 moment.js
语言环境)手动排除依赖项,但到目前为止没有成功。
如有任何见解,我们将不胜感激。谢谢!
听起来您想将来自多个块的依赖项合并到一个公共块中:为此,我建议您查看 webpack.CommonsChunkPlugin
。
特别感兴趣的是 minChunks
属性 您可以传递给插件:
minChunks: number|Infinity|function(module, count) -> boolean,
// The minimum number of chunks which need to contain a module before it's moved into the commons chunk.
// The number must be greater than or equal 2 and lower than or equal to the number of chunks.
// Passing Infinity
just creates the commons chunk, but moves no modules into it.
// By providing a function
you can add custom logic. (Defaults to the number of chunks)
我建议尝试将此插件添加到您的 Webpack 配置中:
new webpack.optimize.CommonsChunkPlugin({
children: true,
async: true,
minChunks: 3
})
此用法在 "Extra async commons chunk" 中有进一步描述。
如果您有兴趣查看块之间共享的代码量,请考虑也尝试 samccone/bundle-buddy
Webpack。
如果您已经在使用 CommonsChunkPlugin
,我需要查看您的 Webpack 配置以提供更多信息。
虽然我不知道究竟是什么解决了这个问题,但我只是注意到最新版本的 Atlaskit 现在可以使用 tree-shaking。我现在在一个大 vendor.js.
中获得了从 Atlaskit 共享的所有内容的最小工件
我有一个多入口点 webpack 构建,我正在为生产优化工件大小。 webpack-bundle-analyzer
产生了如下图片:
很明显,AtlasKit 依赖项占工件总大小的很大一部分。具体来说,我看到 styled-components.es.js
重复了很多次。更重要的是,这种相同的依赖性也存在于 vendor.js
中,它本身在所有其他包之间共享。
谁能解释为什么 styled-components.es.js
到处重复,为什么它不能通过 vendor.js
中的单一依赖项共享?有什么我可以做的来删除重复项并且只依赖于 vendor.js
中的单个 styled-components.es.js
依赖项吗?
我觉得有点奇怪,AtlasKit 依赖项有一个嵌套的 node_modules
文件夹包含在包中。为什么 dist
不够?也许这就是 styled-components.es.js
无法通过 vendor.js
共享的部分原因?
我试图通过 webpack 的 IgnorePlugin(类似于 moment.js
语言环境)手动排除依赖项,但到目前为止没有成功。
如有任何见解,我们将不胜感激。谢谢!
听起来您想将来自多个块的依赖项合并到一个公共块中:为此,我建议您查看 webpack.CommonsChunkPlugin
。
特别感兴趣的是 minChunks
属性 您可以传递给插件:
minChunks: number|Infinity|function(module, count) -> boolean, // The minimum number of chunks which need to contain a module before it's moved into the commons chunk. // The number must be greater than or equal 2 and lower than or equal to the number of chunks. // Passing
Infinity
just creates the commons chunk, but moves no modules into it. // By providing afunction
you can add custom logic. (Defaults to the number of chunks)
我建议尝试将此插件添加到您的 Webpack 配置中:
new webpack.optimize.CommonsChunkPlugin({
children: true,
async: true,
minChunks: 3
})
此用法在 "Extra async commons chunk" 中有进一步描述。
如果您有兴趣查看块之间共享的代码量,请考虑也尝试 samccone/bundle-buddy
Webpack。
如果您已经在使用 CommonsChunkPlugin
,我需要查看您的 Webpack 配置以提供更多信息。
虽然我不知道究竟是什么解决了这个问题,但我只是注意到最新版本的 Atlaskit 现在可以使用 tree-shaking。我现在在一个大 vendor.js.
中获得了从 Atlaskit 共享的所有内容的最小工件