在 nx project.json 中使用环境变量

Nor*_*tko 10 angular nx-workspace

我使用nx作为我的 monorepo 管理工具,其中包含 typescript api 和 Angular 前端。
现在我正在尝试让我的项目在github codespaces内运行。

当我尝试为它们提供服务时,除了角度应用程序之外,一切都工作正常。
我得到和错误Invalid Host/Origin header。可以使用该--public-host标志来解决此问题。

这就是我现在如何使用 codespaces 环境变量CODESPACE_NAME和 nx cli 来服务我的 Angular 应用程序:

npx nx serve application --publicHost=${CODESPACE_NAME}-4080.githubpreview.dev:443
Run Code Online (Sandbox Code Playgroud)

我现在的问题是,是否可以在内部配置一个新目标project.json来为我的应用程序提供服务,例如npx nx run application:codespaces

我已经尝试创建一个新目标,但它无法解析环境变量:

...
 "codespaces": {
  "executor": "@angular-devkit/build-angular:dev-server",
  "configurations": {
    "production": {
      "browserTarget": "console:build:production"
    },
    "development": {
      "browserTarget": "console:build:development"
    }
  },
  "defaultConfiguration": "development",
  "options": {
    "publicHost": "${CODESPACE_NAME}-4080.githubpreview.dev:443",
    "port": 4080
  }
},
...
Run Code Online (Sandbox Code Playgroud)

Nom*_*man 1

正如@Jonathan所暗示的,许多默认执行器不会对选项字符串进行预处理。您可以创建自己的自定义执行程序,在其中使用环境变量值处理选项并自定义应用程序执行。

例子:

import { ExecutorContext } from '@nrwl/devkit';
import { RunCommandExecutorSchema } from './schema';

export default async function runExecutor(
    options: RunCommandExecutorSchema,
    context: ExecutorContext
) {
    console.log('Executor ran for RunCommand', options);

    // process env vars within options
    options = JSON.parse(
        JSON.stringify(options)
            .replace(/\$(\w+)/g, (_, key) => process.env[key] || '')
            .replace(/'/g, '"')
    ) as RunCommandExecutorSchema;

    console.log('Executor ran for RunCommand', options);

    // run @angular-devkit/build-angular:dev-server with this context now
    
    return {
        success: true
    };
}
Run Code Online (Sandbox Code Playgroud)

顺便说一句,如果您使用自定义运行命令,那么您将可以访问 .env 文件中声明的所有环境变量,如此处文档中所述

例子:

"echo": {
    "executor": "nx:run-commands",
    "options": {
        "command": "echo $SOME_ENV_VAR",
    }
},
Run Code Online (Sandbox Code Playgroud)