Angular CLI:在现有命令中添加自定义参数
Angular CLI: add custom arguments in existing command
我正在 Angular9 开发多租户系统,我们为每个租户提供不同的环境。所以我需要为不同租户的不同环境生成构建。
例如:
ng build --prod --tenant=T1
ng build --configuraton=uat --tenant=T1
ng build --prod --tenant=T2
ng build --configuraton=uat --tenant=T2
我已经为不同的租户设置了不同的配置文件。我需要将此租户名称从命令行参数中提取到代码中,并基于它应用配置。有什么办法可以完成这种整合吗?
欢迎任何建议。
谢谢
我认为 angular-cli 无法立即使用此功能。
您需要编写 npm script
或 shell script
来完成此任务。
因此,如果您想在 angular 应用程序中访问这些租户名称。
您可以在 index.html
的脚本标记内放置一个占位符全局变量
像 -
...
<script>
window['tenantId'] = 'TENANT_ID'
</script>
...
然后在你的package.json
中写一个npm script
...
'replace-tenant-id': 'node replace-tenant-id.js --tenant=T1 && ng build --prod'
...
其中 replace-tenant-id.js
将包含替换 'TENANT_ID'
的逻辑
const fs = require('fs')
fs.readFile(index.html, 'utf8', function (err,data) {
let formatted = data.replace(/TENANT_ID/g, process.argv[2]);
fs.writeFile(index.html, formatted, 'utf8', function (err) {
if (err) return console.log(err);
});
});
P.S。 - 如果有任何拼写错误或语法错误,请调试,因为我没有尝试过 运行 这段代码。以类似的方式,您也可以容纳配置标志。
这可以通过使用自定义 webpack 构建器并调用 ng serve 作为子进程并将环境变量传递给子进程来完成。
Here is a step by step guide 说明了如何完成此操作:
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,
});
使用它,您可以像这样传入任何 command-line 环境变量,并在运行时在您的 Angular
中访问它们
yarn build --tenant=T1 --logErrors --no-runtimeChecks --loggerHost="http://localhost:6000"
我正在 Angular9 开发多租户系统,我们为每个租户提供不同的环境。所以我需要为不同租户的不同环境生成构建。 例如:
ng build --prod --tenant=T1
ng build --configuraton=uat --tenant=T1
ng build --prod --tenant=T2
ng build --configuraton=uat --tenant=T2
我已经为不同的租户设置了不同的配置文件。我需要将此租户名称从命令行参数中提取到代码中,并基于它应用配置。有什么办法可以完成这种整合吗? 欢迎任何建议。 谢谢
我认为 angular-cli 无法立即使用此功能。
您需要编写 npm script
或 shell script
来完成此任务。
因此,如果您想在 angular 应用程序中访问这些租户名称。
您可以在 index.html
的脚本标记内放置一个占位符全局变量
像 -
...
<script>
window['tenantId'] = 'TENANT_ID'
</script>
...
然后在你的package.json
npm script
...
'replace-tenant-id': 'node replace-tenant-id.js --tenant=T1 && ng build --prod'
...
其中 replace-tenant-id.js
将包含替换 'TENANT_ID'
const fs = require('fs')
fs.readFile(index.html, 'utf8', function (err,data) {
let formatted = data.replace(/TENANT_ID/g, process.argv[2]);
fs.writeFile(index.html, formatted, 'utf8', function (err) {
if (err) return console.log(err);
});
});
P.S。 - 如果有任何拼写错误或语法错误,请调试,因为我没有尝试过 运行 这段代码。以类似的方式,您也可以容纳配置标志。
这可以通过使用自定义 webpack 构建器并调用 ng serve 作为子进程并将环境变量传递给子进程来完成。
Here is a step by step guide 说明了如何完成此操作:
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,
});
使用它,您可以像这样传入任何 command-line 环境变量,并在运行时在您的 Angular
中访问它们yarn build --tenant=T1 --logErrors --no-runtimeChecks --loggerHost="http://localhost:6000"