Обновление до angular -6.x дает "Uncaught ReferenceError: global не определен"
Я обновил свой проект от angular -5.x до angular -6.x, и он начал давать следующую ошибку, и даже создание фиктивной глобальной переменной не работает, как указано здесь Angular 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)
И продолжайте и продолжайте.
Ответы
Ответ 1
Добавьте следующий код на стартовой странице, например, 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>
Выше будет работать как с гибридным приложением (в среде Node), так и с браузером.
-
для "Uncaught ReferenceError: глобальный не определен":
var global = global || window;
-
для "Uncaught ReferenceError: Буфер не определен":
var Buffer = Buffer || [];
-
для "Uncaught ReferenceError: процесс не определен":
var process = process || {
env: { DEBUG: undefined }
}
-
для "Uncaught TypeError: Невозможно прочитать свойство 'slice' из неопределенного":
var process = process || {
env: { DEBUG: undefined },
version: []
};
Ответ 2
Добавление этой строки в polyfills.ts
должно разрешить глобальную ошибку узла
(window as any).global = window;
Решение было упомянуто в этой угловой проблеме
Ответ 3
В случае, если ваша цель - это узел в веб-пакете (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'
. Полный код конфигурации веб-пакета приведен ниже.
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
Я использую HttpClient
и случайно выбрал импорт по умолчанию, который был 'selenium-webdriver/http'
Если ваш app.module.ts имеет import { HttpClient } from 'selenium-webdriver/http';
Обновите его до import { HttpClient } from '@angular/common/http';
Это исправило мою проблему.