当我尝试使用 cosmicjs 为我的 Angular 6 应用程序提供服务时,出现以下错误:
Uncaught ReferenceError: process is not defined
at Object../node_modules/cosmicjs/dist/index.js (index.js:6)
at __webpack_require__ (bootstrap:81)
at Object../src/app/app.component.ts (main.js:94)
at __webpack_require__ (bootstrap:81)
at Object../src/app/app.module.ts (app.component.ts:9)
at __webpack_require__ (bootstrap:81)
at Object../src/main.ts (environment.ts:18)
at __webpack_require__ (bootstrap:81)
at Object.0 (main.ts:12)
at __webpack_require__ (bootstrap:81)
我的最新理论与 process.env 属性未定义有关。
我正在关注本教程这里
本教程似乎使用旧版本的 Angular,它使用 .angular-cli.json 而不是新的 angular.json,我认为这是尝试指定环境变量的问题的一部分。
在
polyfill.ts
中,添加以下行:
(window as any).process = {
env: { DEBUG: undefined },
};
参考:https://github.com/algolia/algoliasearch-client-javascript/issues/691
或
npm i -S process
,然后将其添加到 polyfill.ts
:
import * as process from 'process';
window['process'] = process;
为了解决该问题,我将以下行添加到“polyfills.ts”文件中,
(window as any).global = window;
global.Buffer = global.Buffer || require('buffer').Buffer;
global.process = require('process');
这与 Angular 6 不兼容。他们删除了浏览器中对进程和全局变量的支持(垫片)。
在关闭之前添加以下内容到您的index.html 将消除错误。
<script>
var global = global || window;
var Buffer = Buffer || [];
var process = process || {
env: { DEBUG: undefined },
version: []
};
</script>
只要您不满意在
polyfills.ts
中放入一些随机逻辑并寻找一种方法来实际访问 Angular 应用程序中的 process.env
,请找到以下解决方案。
将
"builder": "@angular-devkit/build-angular:dev-server"
中的 "builder": "@angular-builders/custom-webpack:dev-server"
更改为 angular.json
。
我在 Angular 14 应用程序中“突然”遇到了同样的问题。
原来是我自己引入的:我忘记在服务类中删除对
inspect
(来自 Nodes util
包)的调用。删除对 inspect
的呼叫对我来说很有效。
我在调试 Jasmine 单元测试时添加了对
inspect
的调用。在 Jasmine 中运行单元测试会执行 Node 中的代码。这就是它在那种环境中起作用的原因。
在
inspect
中有一条线
if ( process.env.DEBUG )
由于
process
未在浏览器中全局定义,因此当作为 Angular 应用程序运行时,此行的执行会失败。
此类错误不仅限于
util.inspect
,而是在浏览器中运行并内部访问的 Node 的任何核心模块中都会发生 process.env
。
由于核心模块的内部实现可能因 Node 版本而异,因此使用 Node 中的核心模块会给您的应用程序带来风险,即在进行部署构建的计算机上更新 Node 可能会破坏您的应用程序。
“路径”是我想到的另一个候选者。
如果您需要通过服务部署 Angular 6:
polyfills.ts:
(window as any).global = window;
global.Buffer = global.Buffer || require('buffer').Buffer;
(window as any).process = {
env: { DEBUG: undefined },
version: '', // to avoid undefined.slice error
};
<script>
if (global === undefined || process === undefined) {
var global = window;
window['process'] = {
env: { DEBUG: undefined },
};
}
</script>