首页 > 解决方案 > Angular CLI:在现有命令中添加自定义参数

问题描述

我正在Angular 9中开发一个多租户系统,我们为每个租户提供不同的环境。所以我需要为不同租户的不同环境生成构建。例如:

ng build --prod --tenant=T1
ng build --configuraton=uat --tenant=T1
ng build --prod --tenant=T2
ng build --configuraton=uat --tenant=T2

我已经为不同的租户设置了不同的配置文件。我需要将此租户名称从命令行参数转换为代码并基于它应用配置。有没有办法完成这种集成?任何建议都将受到欢迎。谢谢

标签: angularangular-cli

解决方案


这可以通过使用自定义 webpack 构建器并调用 ng 作为子进程并将环境变量传递给子进程来完成。

这是一个分步指南,解释了如何完成此操作:

import * as yargs from 'yargs';
import { spawn } from 'child_process';
import { DEFAULT_APP_ENV } from './app-env';

const parseNgArgs = () => process.argv.filter((arg, index) => index > 1 && Object.keys(DEFAULT_APP_ENV).every(key => !arg.includes(key)));

const ngArgs = parseNgArgs();

const argv = { ...DEFAULT_APP_ENV, ...yargs.argv};

const childProcess = spawn('yarn', ['build', ...ngArgs], {
  stdio: 'inherit',
  env: { ...process.env, APP_ENV: JSON.stringify(argv) },
  shell: true,
});

使用它,您可以传入任何这样的命令行环境变量,并在运行时在 Angular 中访问它们

yarn build --tenant=T1 --logErrors --no-runtimeChecks --loggerHost="http://localhost:6000"

推荐阅读