React + Webpack捆绑 - 如果排除了node_modules,则#f; require未定义'在浏览器中

时间:2016-06-11 06:21:39

标签: reactjs webpack bundle

我正在学习React,我试图将它与Webpack一起使用,但我遇到了以下问题:

如果我使用此webpack配置,节点模块不会被排除,捆绑过程需要20秒,捆绑包的大小超过2MB(参见下面的CLI输出):

  ...
  target: 'node', // important in order not to bundle built-in modules like path, fs, etc.
  externals: [nodeExternals()]
  ...

CLI output 1

... enter image description here

但是,如果我将以下两行添加到我的配置并使用nodeExternals,则捆绑包会变小并且运行得很快,尽管它不起作用,因为在浏览器中我收到错误' Uncaught ReferenceError:require未定义'

...
exclude: /(node_modules|bower_components)/,
...

  ...
  { test: /\.js?$/,
    include: [
      path.resolve(__dirname, './src'),
    ],
    loader: 'babel-loader?cacheDirectory',
  },
  ...

enter image description here

我在这里缺少什么?我想浏览器会抛出这个错误,因为在我排除node_modules之后,在客户端不再存在反应,但是我认为不应该捆绑node_modules。 请在这里找到我的小项目的回购问题: https://github.com/sznrbrt/messageboard-react

SOLUTION:

两种不同的方法是使用/ node_modules / 的正则​​表达式为加载器传递排除或包含选项

class Foo{

}

class Bar{
public:

     using meth = Foo* (*)(int a, std::string b);
}

1 个答案:

答案 0 :(得分:7)

答案是在exclude: /node_modules/内添加module.loaders字段。

添加目标:'node'表示将此代码打包在node.js环境中运行,其中包含节点特定的全局变量,如require。这就是它无法在浏览器中运行的原因。