编辑:- 正如预测的那样,GitHub问题
Angular CLI 15.1 发布后,将提供生成原理图,用于为项目中所有现有的构建配置添加环境文件。 用法示例:
ng g environments
手动创建:
如果您想重新创建环境,请按照以下步骤操作:
创建
environments
目录
创建您的自定义环境
environment.ts
environment.prod.ts
environment.staging.ts
等等更新您的
angular.json
或project.json
以执行fileReplacements
,其中路径是从项目根目录到replace
和with
的环境文件:
"configurations": {
"production": {
...
"fileReplacements": [
{
"replace": "apps/some-app/src/environments/environment.ts",
"with": "apps/some-app/src/environments/environment.prod.ts"
}
],
},
"development": {
...
}
},
"defaultConfiguration": "production"
},
我还没有全部测试过,但似乎有一个新命令:
ng generate environments
这是一个 Youtube 视频,描述了需要完成的步骤。 之后似乎还有很多配置步骤。但我打算尝试一下。
因为看起来规范的环境设置目前不存在并且|或者可能变得非标准,所以我想我应该分享一个用于任何非 Angular 项目(包括后端/节点)以及现在 Angular v15.0.0 的替代模式效果非常好。
它利用标准的
.env
(和.env.{type}
)文件,只需一点设置,看起来像这样......
{app-name}
|-environment
|-env.ts
|-path.ts
|-index.ts
|-.env
|-.env.mock
|-.env.dev
|-.env.staging
|-tsconfig.json
|-package.json
package.json
{
"scripts": {
"SET TYPE=mock& start-command", # "SET ..." for Windows setup.
"SET TYPE=dev& start-command",
"SET TYPE=qa& start-command"
},
"dependencies": {
"dotenv": "n.n.n"
}
}
tsconfig.json
{
"compilerOptions": {
"baseUrl": "./",
"paths": {
"@env": [ "environment/index.ts" ]
},
},
}
environment/index.ts
export { env } from './env';
environment/path.ts
module.exports = {
'': '.env',
'undefined': '.env',
'prod': '.env',
'mock': '.env.mock',
'dev': '.env.dev',
'qa': '.env.staging',
}[ process.env.TYPE ]; // npm script "SET TYPE={type}& start-command"
environment/env.ts
require('dotenv').config({ path: require('./path') });
export const env = new (class Environment {
TYPE: string = '';
NODE_ENV: string = '';
PORT: number = -1;
constructor(env: Environment = <Environment>{}) {
const { TYPE, NODE_ENV, PORT } = { ...this, ...env };
this.TYPE = TYPE;
this.NODE_ENV = NODE_ENV;
this.PORT = PORT*1;
return this;
}
})({ ...process.env });
src/example.ts
import { env } from '@env';
const { TYPE, NODE_ENV, PORT } = env;
let http = HTTP;
if (TYPE === 'mock') http = mockHTTP;
export { http };
“Angular 是使用 Angular CLI 构建的,它是一个节点应用程序,但在构建过程中您无法直接从应用程序内访问 process.env,因为它没有作为节点应用程序进行处理。” -- 在 Angular 5 环境中使用 process.env
如果能找到一个优雅的解决方法那就太好了。
Angular 15 版本之后,默认情况下不会创建环境文件夹。您必须手动创建它们。 使用 Angular 提供的这一最佳功能来快速创建新环境。好处是它也会更新创建的environment.ts文件的角度json文件
ng generate environments
他们将拥有这个样板:
export const environment = {
production: true
};
我从不建议手动创建它们,但仍然要手动创建环境,请按照以下步骤操作:
创建环境目录,然后创建自定义环境,如下所示
然后你必须更新 angular.json 文件以在构建时替换环境。
"production": {
"fileReplacements": [
{
"replace": "src/environments/environment.ts",
"with": "src/environments/environment.prod.ts"
},
]
},
"dev": {
"fileReplacements": [
{
"replace": "src/environments/environment.ts",
"with": "src/environments/environment.dev.ts"
},
]
},
据我所知,在新的 Angular 版本中,使用 ng new 命令生成新项目时默认不会创建环境文件夹。但是,您可以按照以下步骤轻松地自行设置单独的开发和生产环境:
通过键入以下命令在 Angular 项目的根目录中手动创建 Environments 文件夹:
mkdir src/environments
在环境文件夹中,创建两个 TypeScript 文件: 通过键入以下命令来获取environment.prod.ts和environment.ts:
touch src/environments/environment.prod.ts
touch src/environments/environment.ts
打开environment.prod.ts 文件并定义特定于您的项目的生产环境变量。请考虑以下示例:
export const environment = {
production: true,
apiUrl: 'https://portfolio.com/api',
// Other production environment variables if you have
};
打开environment.ts文件,定义开发环境变量如下:
export const environment = {
production: false,
apiUrl: 'http://localhost:4200/api',
// Other production environment variables if you have
};
现在,您可以在 Angular 代码中使用环境变量。例如,您可以在组件中导入环境文件并访问变量,如下所示:
import { environment } from '../environments/environment';
// Usage example
if (!environment.production) {
console.log('Development Mode');
};
通过上述步骤,您已经在 Angular 项目中设置了单独的开发和生产环境。现在您可以根据项目的需求修改相应文件中的环境变量。
environments
文件夹。
如果您的工作流程仍然需要该文件夹,您可以使用
npm install -g @angular/[email protected]
降级,然后使用 ng new
创建一个新项目。
Angular v14 不再默认创建环境文件夹,如果需要,只需运行
ng g environments