我向项目添加了一个新的npm软件包,并在我的一个模块中要求它。
现在我从webpack收到此消息,
build modulesNote: The code generator has deoptimised the styling of "D:/path/to/project/node_modules/ramda/dist/ramda.js" as it exceeds the max of "100KB".
这是什么意思?我需要采取一些行动吗?
我向项目添加了一个新的npm软件包,并在我的一个模块中要求它。
现在我从webpack收到此消息,
build modulesNote: The code generator has deoptimised the styling of "D:/path/to/project/node_modules/ramda/dist/ramda.js" as it exceeds the max of "100KB".
这是什么意思?我需要采取一些行动吗?
Answers:
这与compact
Babel编译器的选项有关,该命令的命令是“不包括多余的空格字符和行终止符。当设置为'auto'时,compact在输入大小> 100KB时设置为true。” 默认情况下,其值为“ auto”,因此这可能是您收到警告消息的原因。请参阅Babel文档。
您可以使用查询参数从Webpack更改此选项。例如:
loaders: [
{ test: /\.js$/, loader: 'babel', query: {compact: false} }
]
?compact=false
而不是query
参数。例如:{test: /\.js$/, loaders: ['ng-annotate', 'babel?compact=false']}
false
。对于像我的这样的情况,输出格式很重要,这很有用。像大多数事情一样,这取决于。:)
这似乎是Babel错误。我猜您正在使用babel-loader,并且没有从加载程序测试中排除外部库。据我所知,该消息无害,但您仍应执行以下操作:
loaders: [
{ test: /\.js$/, exclude: /node_modules/, loader: 'babel' }
]
看一看。是吗
exclude: /node_modules/
。
exclude
。
以下三个选项之一都摆脱了该消息(但由于不同的原因和我认为具有不同的副作用):
node_modules
目录或显式排除include
应用程序所在的目录(可能不包含超过100KB的文件)compact
为true
(实际上是“ auto”以外的任何值)compact
为false
(参见上文)可以通过排除node_modules
目录或显式包括应用程序所在的目录来实现上述列表中的#1 。
例如webpack.config.js
:
let path = require('path');
....
module: {
loaders: [
...
loader: 'babel',
exclude: path.resolve(__dirname, 'node_modules/')
...或使用include: path.resolve(__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
在react / redux / webpack / babel构建中,通过删除脚本标签类型text / babel修复了此错误
出现错误:
<script type="text/babel" src="/js/bundle.js"></script>
没有错误:
<script src="/js/bundle.js"></script>
这可能不是原始OP问题的情况,但是:如果超出默认的最大大小,则可能是您遇到其他一些问题的症状。就我而言,我很担心,但最终它变成了致命错误:MarkCompactCollector:半空间复制,回退了旧gen分配失败-JavaScript堆内存不足。原因是我动态导入了当前模块,所以最终导致了无限循环...
require('../../../' + a + '/' + b)
)。删除它可以解决问题(并且它将永远不会返回)。