外部替换浏览器中的全局变量(webpack)

时间:2017-07-22 12:42:19

标签: javascript webpack external

我使用externals选项将xmlhttprequest模块指定为外部模块。这在版本2.2.1中运行良好。我指定外部如下:

  externals: {
    "xmlhttprequest": "XMLHttpRequest"
  }

.js文件中,我有以下代码:

if (typeof window === 'undefined') {
  // Seems like we are using Node.js
  var XMLHttpRequest = require('xmlhttprequest').XMLHttpRequest;
}

完美无缺。

我决定切换到最新版本(3.3.0),现在我的项目在浏览器上使用时出错:XMLHttpRequest is not a constructor。因此,出于某种原因,它似乎会覆盖全局XMLHttpRequest变量。

这很奇怪,因为如果我在控制台中调用new XMLHttpRequest(),它可以正常工作。

使用Node.js时,全局变量XMLHttpRequest应由外部模块替换。在浏览器中,全局变量应保持不受影响

当我删除该行

var XMLHttpRequest = require('xmlhttprequest').XMLHttpRequest;

它在浏览器中再次正常工作。当我重命名变量时。但是,当我将外部更改为类似的东西时(并保持上​​面的行不受影响):

xmlhttprequest: 'abcd'

它仍然失败。

查看我的存储库here。如果您将变量名称NodeXMLHttprequest替换为XMLHttpRequest,然后使用webpack进行编译,那么它将不再适用于浏览器。

0 个答案:

没有答案