升级到angular-6.x会出现“Uncaught ReferenceError:global is not defined”

时间:2018-05-15 17:48:40

标签: javascript angular angular-cli angular6

我将我的项目从angular-5.x升级到angular-6.x并且它开始发出以下错误,甚至创建虚拟全局变量也不起作用,如Angular 6 Auth0 - global not defined

错误如下:

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)    

并一直持续。

8 个答案:

答案 0 :(得分:52)

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

(window as any).global = window;

angular-cli issue thred

中提到了解决方案

答案 1 :(得分:47)

在首页中添加以下代码,例如的index.html

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

e.g。如下:

<!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>

以上将适用于混合应用程序(在节点环境中)以及浏览器

  
      
  • var global = global || window; //对于未捕获的ReferenceError:未定义全局

  •   
  • var Buffer = Buffer || []; //对于Uncaught ReferenceError:未定义缓冲区

  •   
  • var process = process || { env: { DEBUG: undefined } } //未捕获的ReferenceError:未定义过程

  •   
  • var process = process || { env: { DEBUG: undefined }, version: [] }; //未捕获的TypeError:无法读取属性&#39; slice&#39;未定义的

  •   

答案 2 :(得分:7)

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

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

将其更新为import { HttpClient } from '@angular/common/http';

这解决了我的问题。

答案 3 :(得分:0)

如果您的目标是webpack(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

答案 4 :(得分:0)

将此行添加到pollyfills.ts中解决了我的问题(就像@kemalbirinci说here一样,这是一种解决方法)

(window as any).global = window;

答案 5 :(得分:0)

就我而言,Package.JSON文件中缺少socket.io条目。请检查并将其安装到软件包中。

答案 6 :(得分:0)

请谨慎使用将内联脚本添加到index.html的最佳答案。它将解决眼前的问题。但是,如果您使用SignalR,则会生成此错误:

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

但是,仅自行定义全局将起作用,并且不会破坏Signal R。

答案 7 :(得分:0)

我不知道这是否能帮助任何人理解他们的问题,我只是想我会通知任何阅读此内容的人,如果他们在用户端遇到全局未定义错误,请检查您的浏览器和/或设备设置以获取请求的页面您的位置。我刚刚进入了 chrome 浏览器站点设置,并将位置选项从首先询问变为阻止。我访问的下一个页面,数据表的主要内容显示了此错误消息,当我切换回位置以在 chrome 站点设置中首先询问并刷新它加载的页面时没有错误。