摇树不适用于webpack 4和语义UI反应

时间:2018-07-04 13:39:38

标签: javascript reactjs webpack semantic-ui

我仅从语义用户界面反应中导入一个组件

import { Button as SemanticButton} from 'semantic-ui-react';

但是运行webpack -p后,我在捆绑软件中看到了来自语义UI的所有组件,其大小超过300KB(没有语义UI时约为30KB)。 我安装了所有最新版本:webpack@4.14.0;语义ui-react@0.81.3

这是我的webpack.config.js

module.exports = {
  entry: './src/index.js',
  resolve: {
    modules: [
      path.resolve('./'),
      'node_modules',
    ],
    extensions: ['*', '.js', '.jsx', '.css', '.less'],
  },
  output: {
    filename: 'main.js',
    path: path.resolve(__dirname, 'dist'),
  },
  module: {
    rules: [
      {
        test: /\.(js|jsx)$/,
        exclude: /node_modules/,
        use: {
          loader: 'babel-loader',
        },
      },
    ],
  },
  externals: {
    react: {
      root: 'React',
      commonjs: 'react',
      commonjs2: 'react',
      amd: 'React',
    },
    'react-dom': {
      root: 'ReactDOM',
      commonjs: 'react-dom',
      commonjs2: 'react-dom',
      amd: 'ReactDOM',
    },
    'prop-types': {
      root: 'PropTypes',
      commonjs: 'prop-types',
      commonjs2: 'prop-types',
      amd: 'PropTypes',
    },
  },
};

我做错什么了吗?如何通过语义UI反应使摇树工作?我不想在捆绑包中看到未使用的组件。

1 个答案:

答案 0 :(得分:0)

该问题的解决方案变得非常简单。您只需要正确配置Babel。

  

在babel-preset-env配置中仅指定"modules": false即可使Babel表现出我们想要的行为,这使webpack可以分析您的依赖关系树并摆脱那些未使用的依赖关系。此外,此过程不会引起兼容性问题,因为webpack最终会将您的代码转换为广泛兼容的格式。

所以.babelrc看起来像这样:

{
  "presets": [
    ["env", {
      "modules": false
    }]
  ]
}

Source