我从Webpack 1.x
转移到2.x
并遇到麻烦。我希望Webpack能够忽略所有供应商的库,因为我是通过gulp准备它们的。
在webpack.config.js
我module.noParse
喜欢:
noParse: /react|react-dom|redux|react-redux|lodash/
我有externals
部分:
externals: {
'react': 'React',
'react-dom': 'ReactDOM',
'redux': 'Redux',
'react-redux': 'ReactRedux',
'lodash': '_',
}
因此,在Webpack 1.x
中它完美无缺,但版本2.2.0
给出了:
var _react = require('react');
Uncaught ReferenceError: require is not defined`
如果我删除了noParse
规则,webpack将在包中包含供应商,所有内容都将包含var react = webpack_require
并且可以正常工作。
答案 0 :(得分:1)
Webpack 2 比其前任更严格。它告诉你,你可能会错误配置它。
require
和其他模块调用的库中使用 expose-loader
告诉捆绑包不要进入外部包,而是用全局变量替换它们的导入。
因此,您只需要externals
。
我建议完全删除gulp
任务,并将您的react
/ lodash
捆绑包移到Webpack供应商块中。使用{{3}}导出全局窗口变量上的模块。
以下配置应该这样做:
module.exports = {
entry: {
"vendor": [
"expose-loader?React!react",
"expose-loader?ReactDOM!react-dom",
"expose-loader?Redux!redux",
"expose-loader?ReactRedux!react-redux",
"expose-loader?_!lodash"
],
"app": "./app/index.js"
},
externals: {
'react': 'React',
'react-dom': 'ReactDOM',
'redux': 'Redux',
'react-redux': 'ReactRedux',
'lodash': '_',
},
"plugins": [
new webpack.optimize.CommonsChunkPlugin({ name: "vendor", minChunks: Infinity }))
],
/* other options... */
}
确保您npm i -D expose-loader
并在src
属性设置为vendor.js