Webpack树摇在软件包之间不起作用

时间:2019-03-24 04:36:45

标签: javascript webpack bundler

晚上好!

我已经尝试了几天,以使不同程序包之间的树摇晃起来。

在继续之前,我已经创建了一个最低再现,我将在整个帖子中进行解释:https://github.com/Apidcloud/tree-shaking-webpack

我还打开了有关Webpack存储库的一个问题:https://github.com/webpack/webpack/issues/8951

为简单起见,该示例仅使用webpack。 未使用Babel

上面的示例有两个软件包,每个软件包都有各自的捆绑包:

  • core-导出2个函数,cubeunusedFn
  • consumer-从cube导入core并导出自己的功能consumerFn

核心软件包

core package

请注意,square函数不会导出到index.js文件中。知道至少在core内树木摇晃确实有效,这是一种方法,因为它不包含在最终捆绑包中(这是正确的)。

消费套餐

enter image description here

如您所见,仅从cube导入core。然后,它消耗consumerFn导出自己的函数(cube)。

问题

问题在于consumer捆绑包中包含core捆绑包中的所有内容。也就是说,在不应该包含unusedFn的情况下会产生更大的捆绑包。

最终,目标是在具有多个软件包的monorepo中执行相同的操作。如果每个软件包都将其他软件包捆绑在一起,那么拥有它们毫无意义。目标是仅捆绑每个软件包所需的内容。

使用optimizationBailout,我看到 ModuleConcatenation 插件发出了一些警告消息。我还使用了--verbose标志: enter image description here

这是我的webpack.config.js

const path = require('path');

module.exports = {
  mode: 'production',
  entry: {
    core: './src/index.js',
    consumer: './consumer/index.js'
  },
  output: {
    filename: '[name].js',
    path: path.resolve(__dirname, 'dist'),
    // for simplicity sake I removed the UMD specifics here.
    // the problem is the same, with or without it.
  },
  optimization: {
    usedExports: true,
    sideEffects: true
  },
  stats: {
    // Examine all modules
    maxModules: Infinity,
    // Display bailout reasons
    optimizationBailout: true
  }
};

我在"sideEffects": false中也有package.json

我也经历过webpack的guide,但是我不确定缺少什么。

相关问题:

0 个答案:

没有答案