目前我有三个环境,我正在尝试在我的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"
}