【问题标题】:All components being bundled捆绑的所有组件
【发布时间】:2018-10-31 15:25:54
【问题描述】:

我刚刚升级到 webpack 4 和 babel 7,并注意到我的包的大小大大增加了。

使用包分析器,我可以看到 antd,它的依赖项大约是我的 1.7mb 包的 1MB。

在开发模式下捆绑时,我可以看到所有的 antd 组件都被包含在内,即使我的应用当前只导入了一个按钮

import { Button } from 'antd';
....

我怎样才能只加载我需要的东西?这是我的相关配置

//webpack.config
{
  devtool: false,
  mode: 'production',
  entry: [
    '@babel/polyfill',
    'antd/dist/antd.css',
    './js/router',
    './css/test.less',
  ],
  output: {
    path: path.resolve(__dirname, './plugins/js'),
    filename: 'app.js',
  },
  plugins: [
    new webpack.ContextReplacementPlugin(/moment[\/\\]locale$/, /en/)
  ],
  module: {
    rules: [
      {
        test: /\.css$/,
        use: [ 'style-loader', 'css-loader' ]
....

还有:

//babelrc
{
  "presets": [
      ['@babel/preset-env', { 
        modules: false, 
        useBuiltIns: 'entry', 
        targets: { 
          chrome:"58", ie: "11" 
        } 
      }],
      '@babel/preset-react',
  ],
  "plugins": [
      '@babel/plugin-proposal-class-properties',
      '@babel/plugin-transform-modules-commonjs',
      ["import", { "libraryName": "antd", "style": "css" }]
  ]
}

【问题讨论】:

  • 您是否启用了按需导入? ant.design/docs/react/getting-started#Import-on-Demand
  • @A.com 我已经配置好了。它在我的 babelrc 中。我还尝试将其更改为该页面中的示例:["import", { "libraryName": "antd", "libraryDirectory": "lib"}, "ant"], 但没有更改。我也没有收到关于使用完整库的控制台消息警告。

标签: babeljs antd webpack-4


【解决方案1】:

在开发模式下,默认情况下,sideEffects:true 选项会禁用摇树。在生产中测试,看看这是否有效。要在开发中启用: - 使用进口出口 - @babel/preset-env 设置为 modules: false。 - 在 pkg.json 中添加 sideEffects:false。或者,该数组接受相关文件的相对、绝对和全局模式。

参考:https://webpack.js.org/guides/tree-shaking/#conclusion

【讨论】:

  • 我将 sideEffects:true 添加到我的 package.json 并重新构建,但没有明显变化。我在生产模式下运行它,所有库模块仍在最终包中。
  • 你能测试给定的模块吗?我不认为这种行为是全面的。因此,如果您要导入 lodash 并遵循上述规则,您会发现 lodash 包变小了吗?
  • 所以我安装了lodash并导入为import _ from 'lodash'import { get } from 'lodash'。两者的捆绑包大小相同,似乎没有任何区别。
猜你喜欢
  • 2010-10-15
  • 1970-01-01
  • 2015-03-12
  • 1970-01-01
  • 1970-01-01
  • 2017-09-19
  • 1970-01-01
  • 2017-12-18
  • 1970-01-01
相关资源
最近更新 更多