如何在 Angular 5 server.ts 中获取 --env 变量的值?



目前我有三个环境,我正在尝试在我的server.ts中获取--env=prod值,在这种情况下,prod我在我的
角度应用程序中获得了正确的环境对象,但在实现 ssr 所必需的server.ts文件中获取它时出现问题,我
正在使用属性--env=prod--env=dev设置环境,并在我server.ts中导入,例如import { environment } from'./src/environments/environment';

这就是我在.angular-cli.json中的环境对象在 Angular 和服务器平台上的样子

"environments": {
"dev": "environments/environment.ts",
"prod": "environments/environment.prod.ts",
"test": "environments/environment.test.ts"
}

而且我确实在提到的路径中有所有文件

令我惊讶的是,人们很难理解这个问题。用粗体全大写大写大喊同样的事情是愚蠢的。

简化:

environment.ts = { magicKey: "default" }
environment.prod.ts = { magicKey: "46df465d4f64fd654f6fe4d64f" }

使用"--configuration=prod"构建后--------

在应用程序组件中:

import { environment } from "environments/environment";
console.log(environment.magicKey); // == "46df465d4f64fd654f6fe4d64f"

在 server.ts 中:

import { environment } from "environments/environment";

注意:这会产生生成错误"无法解析 server.ts 中的'环境/环境'"。 其他线程建议使用正确的相对路径,但现在似乎我们只得到默认文件,即"fileReplacements"没有被尊重/使用:

import { environment } from "./src/environments/environment";
console.log(environment.magicKey); // == "default"

据我所知...它应该有效。我还验证了angular.json中的"服务器"也存在"fileReplacements"...不过不行。它似乎不想替换文件。

我认为这是因为 server.ts 不会发生"替换"。它在应用程序的"外部",因此没有发生花哨的逻辑?或者也许导入(不同)正在覆盖它?

我的解决方法是简单地导入server.ts中的所有环境,并根据我在每台计算机上设置的环境(process.env)变量选择正确的环境。

如果有人有一些见解,那么我相信我不是唯一一个感兴趣的人。

试试这个

import { environment } from '../../../environments/environment';
// use path to your environments file.
private apiEndPoint: string;
constructor() {
this.apiEndPoint = environment.apiUrl;
}

Angular 在构建时处理环境变量。

当你写的时候

import { environment } from 'environment';

Angular 采用您在运行构建命令时决定的环境。

这意味着即使您导入了开发环境(默认环境),如果您编写

ng build --prod

您的生产环境将被占用。

顺便说一下,如果环境文件中没有完全相同的值,则会出现编译错误。因此,您不妨将变量从一个环境复制并粘贴到另一个环境。

更新angular-cli到最新版本(如果还没有

)保留environments/environment.ts,不要将其用于dev,而是创建一个environment.dev.ts

添加一个environmentSource,如果您没有。

"environmentSource": "environments/environment.ts",
"environments": {
"dev": "environments/environment.dev.ts",
"prod": "environments/environment.prod.ts",
"test": "environments/environment.test.ts"
}

最新更新