升级到 angle-6.x 会出现“ Uncatch ReferenceError: global is not Definition”

我将我的项目从 angle-5.x 升级到 angle-6.x,它开始出现以下错误,甚至虚拟全局变量的创建也不能像这里给出的 角6 Auth0-全局未定义那样工作

错误如下:

Uncaught ReferenceError: global is not defined
at Object../node_modules/has-binary2/index.js (index.js:10)
at __webpack_require__ (bootstrap:81)
at Object../node_modules/socket.io-parser/index.js (index.js:8)
at __webpack_require__ (bootstrap:81)
at Object../node_modules/socket.io-client/lib/index.js (index.js:7)
at __webpack_require__ (bootstrap:81)
at Object../src/app/app4pc/apiConnection/services/ApiConnectionServer.ts (auth.interceptor.ts:8)
at __webpack_require__ (bootstrap:81)
at Object../src/app/app4pc/apiConnection/toServer.module.ts (ApiConnectionServer.ts:11)
at __webpack_require__ (bootstrap:81)

在解决这个问题之后,我得到了以下错误:

Uncaught ReferenceError: process is not defined
at Object../node_modules/process-nextick-args/index.js (index.js:3)
at __webpack_require__ (bootstrap:81)
at Object../node_modules/readable-stream/lib/_stream_readable.js (_stream_readable.js:26)
at __webpack_require__ (bootstrap:81)
at Object../node_modules/readable-stream/readable-browser.js (readable-browser.js:1)
at __webpack_require__ (bootstrap:81)
at Object../node_modules/simple-peer/index.js (index.js:7)
at __webpack_require__ (bootstrap:81)
at Object../src/app/util/services/call.services.ts (notification.service.ts:12)
at __webpack_require__ (bootstrap:81)

一直持续下去。

63189 次浏览

在起始页添加以下代码,例如 index.html

var global = global || window;
var Buffer = Buffer || [];
var process = process || {
env: { DEBUG: undefined },
version: []
};

例如:

<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Client</title>
<base href="/">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="icon" type="image/x-icon" href="favicon.ico">
<script>
var global = global || window;
var Buffer = Buffer || [];
var process = process || {
env: { DEBUG: undefined },
version: []
};
</script>
</head>
<body>
<app-root>
<div class="loader"></div>
</app-root>
</body>
</html>

以上将工作在混合应用程序(在节点环境) ,以及在浏览器

  • 对于“未捕获的参考错误: 没有定义 global”:

    var global = global || window;
    
  • for "Uncaught ReferenceError: Buffer is not defined":

    var Buffer = Buffer || [];
    
  • for "Uncaught ReferenceError: process is not defined":

    var process = process || {
    env: { DEBUG: undefined }
    }
    
  • for "Uncaught TypeError: Cannot read property 'slice' of undefined":

    var process = process || {
    env: { DEBUG: undefined },
    version: []
    };
    

将此行添加到 polyfills.ts应该可以解决节点全局错误

(window as any).global = window;

该解决方案在此 角斜面发射三线中提到

在这种情况下,如果你的 目标节点在网络包(target: 'node') ,因为你想修复 "Can't resolve 'fs'。然后您会得到如下错误 Fix: "Uncaught ReferenceError: global is not defined"按照如下 node: { global: true, fs: 'empty' }进行操作。如果你得到错误 "Uncaught ReferenceError: exports is not defined".简单地加上 libraryTarget: 'umd'。完整的 webpack 配置代码如下。

const webpackConfig = {
node: { global: true, fs: 'empty' }, // Fix: "Uncaught ReferenceError: global is not defined", and "Can't resolve 'fs'".
output: {
libraryTarget: 'umd' // Fix: "Uncaught ReferenceError: exports is not defined".
}
};


module.exports = webpackConfig; // Export all custom Webpack configs.

这里提出了许多解决方案: https://github.com/angular/angular-cli/issues/8160

我使用了 HttpClient并意外地选择了默认导入,即 'selenium-webdriver/http'

如果 app.module.ts 具有 import { HttpClient } from 'selenium-webdriver/http';

更新到 import { HttpClient } from '@angular/common/http';

解决了我的问题。

将这一行添加到 pollyfills.ts中解决了我的问题(只是一个变通方法,如@kemalbirinci 所说的 给你)

(window as any).global = window;

在我的示例中,Package.JSON文件中缺少 socket.io 条目。请检查它并将其安装到包中。

请小心使用将内联脚本添加到 index.html 的顶部答案。它将解决当前的问题。但是,如果您正在使用 SignalR,这将生成以下错误:

错误: 解析握手响应时出错: TypeError: 不能调用“ instanceof”的右侧 @ microsoft/signalr/dist/esm/HubConnection.js. HubConnection.processHandshakeResponse

然而,仅仅定义自己的全局将工作,而不会破坏信号 R。

我不知道这是否能帮助任何人理解他们的问题,我只是想告诉那些读到这篇文章的人,如果他们在用户端发现了全局未定义错误,他们可以检查你的浏览器和/或设备设置,看看是否有页面询问你的位置。我刚刚进入了 Chrome 浏览器的网站设置,并把位置选项从询问第一到阻塞。在我访问的下一个页面,一个数据表的主要内容显示了这个错误消息,很快我切换位置回问第一在铬网站设置和刷新页面,它加载没有错误。

在转移到 Angular v6之后,在 polyfill s.ts 中添加以下代码行对我来说很有用。

(window as any).global = window;
global.Buffer = global.Buffer || require('buffer').Buffer;
global.process = require('process');

答案采自 给你