fab*_*sta 16 webpack webpack-3
Webpack3附带ModuleConcatenation插件,当与--display-optimization-bailout标志一起使用时,将为您提供救助的原因.
救助信息并不容易理解,而且很难理解为什么它们发生在特定模块上.
这是我webpack在项目的一个非常简化版本上的命令输出:
> webpack --bail --display-optimization-bailout
Hash: 4a9a55dc2883e82a017e
Version: webpack 3.4.1
Child client:
Hash: 4a9a55dc2883e82a017e
Time: 594ms
Asset Size Chunks Chunk Names
a.d3ade61d21d5cb8dd426.bundle.js 712 bytes 0 [emitted] a
a.d3ade61d21d5cb8dd426.bundle.js.map 6.57 kB 0 [emitted] a
manifest.json 102 bytes [emitted]
index.html 299 kB [emitted] [big]
[0] multi ./src/client/bootstrap/ErrorTrap.js 28 bytes {0} [built]
ModuleConcatenation bailout: Module is not an ECMAScript module
[1] ./src/client/bootstrap/ErrorTrap.js 199 bytes {0} [built]
ModuleConcatenation bailout: Module is not an ECMAScript module
Run Code Online (Sandbox Code Playgroud)
我./src/client/bootstrap/ErrorTrap.js尽可能地简化了内容,我仍然得到了ModuleConcatenation bailout: Module is not an ECMAScript module.这是它的内容:
class ErrorTrap {
}
export default ErrorTrap;
Run Code Online (Sandbox Code Playgroud)
我查看了解这个救助消息,其中一个原因是当模块没有导入或导出时,如https://github.com/webpack/webpack/blob/93ac8e9c3699bf704068eaccaceec57b3dd45a14/lib/dependencies/所示. HarmonyDetectionParserPlugin.js#L12-L14,但我不知道为什么它不考虑这个模块的ECMAScript模块.
.babelrc
{
"presets": [
"es2015"
]
}
Run Code Online (Sandbox Code Playgroud)
webpack.config.js表示:
{ target: 'web',
devtool: 'source-map',
entry: { a: [ './src/client/bootstrap/ErrorTrap.js' ] },
output:
{ path: '/project/build/client/assets',
filename: '[name].[chunkhash].bundle.js',
chunkFilename: '[name].[chunkhash].chunk.js',
publicPath: '/assets/' },
module: { rules: [ [Object], [Object], [Object], [Object], [Object] ] },
resolve: { alias: { 'lodash.defaults': 'lodash' } },
plugins:
[ ModuleConcatenationPlugin { options: {} },
CommonsChunkPlugin {
chunkNames: [Object],
filenameTemplate: undefined,
minChunks: Infinity,
selectedChunks: undefined,
children: undefined,
async: undefined,
minSize: undefined,
ident: '/project/node_modules/webpack/lib/optimize/CommonsChunkPlugin.js0' },
ManifestPlugin { opts: [Object] },
ChunkManifestPlugin {
manifestFilename: 'chunk-manifest.json',
manifestVariable: 'webpackManifest',
inlineManifest: false },
OccurrenceOrderPlugin { preferEntry: undefined },
DefinePlugin { definitions: [Object] },
VisualizerPlugin { opts: [Object] },
ExtractTextPlugin { filename: '[name].[contenthash].css', id: 1, options: {} },
UglifyJsPlugin { options: [Object] },
LoaderOptionsPlugin { options: [Object] } ],
name: 'client' }
Run Code Online (Sandbox Code Playgroud)
Mic*_*ngo 19
您正在使用Babel来转换JavaScript文件,默认情况下,es2015预设会将ES模块(import/ export)转换为CommonJS(Node使用的方式require).Webpack接收CommonJS模块,但ModuleConcatenationPlugin依赖于ES模块.您可以将Babel配置为不使用该modules选项转换模块.
{
"presets": [
["es2015", { "modules": false }]
]
}
Run Code Online (Sandbox Code Playgroud)
Webpack 2+支持开箱即用的ES模块,最好将它们留给webpack,因为它支持Tree Shaking等功能.
对于那些使用现代的人@babel/preset-env:
{
"presets": [
["@babel/preset-env",{
"targets": {
...
},
"modules": false
}],
"@babel/preset-react"
],
"plugins": [...
}
Run Code Online (Sandbox Code Playgroud)
但是不好的事情(但不是关键)在那之后我不能像以前一样在我的 webpack 配置文件中使用 ES 模块,所以在webpack.config.babel.js:
import webpack from 'webpack';
Run Code Online (Sandbox Code Playgroud)
应改为:
const webpack = require('webpack');
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9022 次 |
| 最近记录: |