带有Module.noParse的Webpack 2.2.0并不需要转换'要求'外部

时间:2017-02-01 06:08:55

标签: webpack webpack-2

我从Webpack 1.x转移到2.x并遇到麻烦。我希望Webpack能够忽略所有供应商的库,因为我是通过gulp准备它们的。

webpack.config.jsmodule.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并且可以正常工作。

1 个答案:

答案 0 :(得分:1)

Webpack 2 比其前任更严格。它告诉你,你可能会错误配置它。

    如果您尝试在包含require和其他模块调用的库中使用
  • noParse,则会抛出externals

  • 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

的网址的情况下向您的网页添加脚本