我在我的项目中添加了一个新的npm包,并在我的一个模块中要求它。

现在我从webpack得到这个消息,

注意:代码生成器已经取消了“D:/path/to/project/node_modules/ramda/dist/ramda.js”的样式,因为它超过了“100KB”的最大值。

这是什么意思?我需要采取一些行动吗?


当前回答

在webpack 4的多个模块规则中,你只需要在你的.js规则中这样做:

{
     test: /\.(js)$/,
     loader: 'babel-loader',
     options: {
          presets: ['es2015'],    // or whatever
          plugins: [require('babel-plugin-transform-class-properties')], // or whatever
          compact: true    // or false during development
     }
},

其他回答

在react/redux/webpack/babel build中,通过删除脚本标签类型text/babel修复了此错误

有错误:

<script type="text/babel" src="/js/bundle.js"></script>

没有错误:

<script src="/js/bundle.js"></script>

有关更多解释,请阅读Babel选项-紧凑,它是Babel编译器的选项,命令不包括多余的空格字符和行结束符。以前它的阈值是100KB,但现在是500KB。

我建议您在开发环境中禁用此选项,使用.babelrc文件中的代码。

{
    "env": {
      "development" : {
        "compact": false
      }
    }
}

对于生产环境,Babel使用默认的自动配置。

这是我的通天塔结构:

module.exports = {
  presets: [['@babel/preset-env'], ['@babel/preset-react']],
  plugins: [
    [
      '@babel/plugin-transform-runtime',
      {
        corejs: 3,
      },
    ],
    // react hmr
    ['react-refresh/babel'],
  ],
};

我还遇到了这个问题,因为这些代码:

    [
      '@babel/plugin-transform-runtime',
      {
        corejs: 3,
      },
    ],

最后我用加法解决了这个问题

exclude: /node_modules/ 

in

      {
        test: /\.jsx?$/,
        exclude: /node_modules/,
        use: ['babel-loader'],
      },

以下三个选项中的任何一个都可以摆脱信息(但我认为原因和副作用不同):

排除node_modules目录或显式包含应用程序所在的目录(假定不包含超过100KB的文件) 将Babel选项压缩为true(实际上是除"auto"之外的任何值) 将Babel选项压缩为false(见上文)

上面列表中的#1可以通过排除node_modules目录或显式包括应用程序驻留的目录来实现。

例如,在webpack.config.js中:

let path = require('path');
....
module: {
     loaders: [
          ...
          loader: 'babel',
          exclude: path.resolve(__dirname, 'node_modules/')

... 或者使用include: path。解析(__dirname, 'app/')(同样在webpack.config.js中)。

上面列表中的#2和#3可以通过这个答案中建议的方法来完成,或者(我的偏好)通过编辑.babelrc文件来完成。例如:

$ cat .babelrc 
{
    "presets": ["es2015", "react"],
    "compact" : true
}

使用以下设置进行测试:

$ npm ls --depth 0 | grep babel
├── babel-core@6.7.4
├── babel-loader@6.2.4
├── babel-preset-es2015@6.6.0
├── babel-preset-react@6.5.0

这与Babel编译器的压缩选项有关,该选项命令“不包括多余的空格字符和行结束符”。当设置为“auto”时,在输入大小为>100KB时,compact设置为true。”默认情况下,它的值是“auto”,所以这可能是您收到警告消息的原因。参见Babel文档。

您可以使用查询参数从Webpack更改此选项。例如:

loaders: [
    { test: /\.js$/, loader: 'babel', query: {compact: false} }
]