Javascript 外部替换浏览器中的全局变量(网页包)

Javascript 外部替换浏览器中的全局变量(网页包),javascript,webpack,external,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('xml

我使用
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不是构造函数。因此,出于某种原因,它似乎覆盖了全局
XMLHttpRequest
变量

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

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


当我拆下线路时

var XMLHttpRequest = require('xmlhttprequest').XMLHttpRequest;
它在浏览器中再次正常工作。当我重命名变量时也是如此。但当我将外部更改为类似这样的内容时(并保持上述行不受影响):

它仍然失败


查看我的存储库。如果您将变量名
NodeXMLHttprequest
替换为
XMLHttpRequest
,然后用webpack编译它,浏览器将无法再使用它。

您是否尝试过通过捆绑包进行调试,以查看到底发生了什么以及原因?@zerkms我不知道从何处开始。我刚换了版本,它就停止工作了。我浏览了变更日志,但我看不到任何地方提到的
externals
。我检查了在切换到较新版本时捆绑包中发生的变化,它似乎只改变了一些数字:
(这个,函数(
)变成了
(这个,函数(
)变成了
(这个,函数(
,这一行被删除了
\uuuuuuuuuuuuuwebpack\urequire.I=函数(值){return value;};
module.exports=\uuuu WEBPACK\u EXTERNAL\u module\u 0\uuuuu;
已被删除…我无法了解发生了什么…这真的没有效率。你不应该对它们进行比较。编写尽可能小的代码来重现问题(你已经完成了,这实际上是两行代码)。然后从中创建一个捆绑包。然后阅读生成的捆绑包中的20或30行,并找到您的问题。如果需要,请使用调试器,逐行检查每一行,直到找到中断运行时的代码。这就是您调试代码的方式。您是否尝试过通过捆绑包进行调试,以查看到底发生了什么以及原因?@zerkms I不会这样做知道从哪里开始。我刚刚切换了版本,但它停止了工作。我查看了更改日志,但我看不到任何地方提到的
外部文件
。打开一个捆绑包文件并阅读它?@zerkms我有。我检查了在切换到新版本时捆绑包中发生的更改,它似乎只改变了周围的一些数字:
(这个,函数(uu网页包u外部u模块u 0 uu){
变成了
(这个,函数(u网页包u外部u模块u 1){
,这一行被删除了
u网页包u require uu.i=函数(值){返回值;}
module.exports=\uu网页包\u外部模块\uu 0\uuuu;
被删除…我不知道发生了什么…这真的没有效率。你不应该对它们进行比较。编写尽可能小的代码来重现问题(你已经完成了,这实际上是两行代码)。然后从中创建一个捆绑包。然后阅读生成的捆绑包中的20或30行,并找到您的问题。如果需要,请使用调试器逐行检查每一行,直到找到中断运行时的代码。这就是调试代码的方式。
xmlhttprequest: 'abcd'