angular - 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
我已经为不同的租户设置了不同的配置文件。我需要将此租户名称从命令行参数转换为代码并基于它应用配置。有没有办法完成这种集成?任何建议都将受到欢迎。谢谢
解决方案
这可以通过使用自定义 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"
推荐阅读
- r - 无法在 SQLite 的列中保存多个值
- c++ - 实现自定义异步任务类型并等待
- reactjs - 如何自定义 Highcharts.js 中的条形宽度和条形间距
- javascript - WebAudio API:如何在 AudioWorkletProcessor 中访问时间/采样率?
- chart.js - 无法在图表 js 注释插件中旋转标签
- javascript - 节点js中的击键输入键发送
- c# - 错误:“System.InvalidOperationException:无法找到所需的服务。”如何解决?
- mongodb - 如何在 websphere 中为 mongodb 创建数据源
- html - 媒体查询在电子邮件模板中不起作用
- c# - 如何在 Xamarin Form Android Visual Studio 2019 中设计六边形