webpack 运行后出现 “global” 未定义

5

我有一个非常简单的包装模块,围绕着由脚本运行环境设置的全局对象。这个包装器模块只是执行以下操作:

module.exports = global.foobar;

之前我使用browserify时一切正常,当在浏览器中使用时,globalwindow相同。

然而,我现在正在切换到webpack,在运行webpack之后,global的含义已经改变了。在浏览器中,它不再是window的别名,而是undefined,我会收到cannot read property foobar of undefined的错误提示。

至于我的包装模块,我可以通过其他方式来解决这个问题,但我有其他依赖项,而且在更深层次上使用了buffer包。该程序包也使用了global (请参见此处),并且在我运行webpack之后也会崩溃:

Uncaught TypeError: Cannot read property 'TYPED_ARRAY_SUPPORT' of undefined

有没有办法让webpack像browserify一样处理global,使global成为window的别名?
3个回答

7

我最终找到了问题所在。我有两个Webpack构建:第一个构建我的库,第二个构建演示程序。问题在于两个配置文件都有:

{
  node: {
    global: true
  }
}

如果第一个构建库的人使用了global: false,而第二个构建库的人使用了global: true,那么它就能正常运行。


您可以将第二个 global:true 删除,因为默认值为true。 - Raathigesh
1
它对我有效。在启用了Chrome控制台中的“异常暂停”选项后,我发现“global”是未定义的。这个解决方案帮助我解决了这个问题。 - Max Peng

1
在web.config.js文件中添加以下插件。
 plugins: [
    new webpack.optimize.OccurenceOrderPlugin(),
    {
      'apply': function(compiler) {
        compiler.parser.plugin('expression global', function() {
          this.state.module.addVariable('global', "(function() { return this; }()) || Function('return this')()");
          return true;
        });
      }
    }
  ]

0

定义webpackConfig并添加

plugins: [new webpack.DefinePlugin({
    global: {}
})],

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接