如何根据环境变量在 compilerOptions 下设置不同的路径

How to set different paths under compilerOptions, depending on env variable

在我的 angular 应用程序中,我需要根据应用程序 运行 (dev/prod) 的环境有条件地加载模块。在开发环境中,它应该指向我本地项目的 libs 文件夹,对于生产环境,它应该指向 node_modules 文件夹中的外部包。

我已经尝试过使用三元运算符如下:

import { ModuleA as ModuleAExternal } from '@external/moduleA';
import { ModuleA } from '@moduleA';

@NgModule({
  declarations: [],
  imports: [
    ...
    environment.production ?   ModuleAExternal : ModuleA
  ]
})

这行得通,但是在构建项目时我不想被迫导入本地和外部包。

所以我希望相同的

import { ModuleA } from '@moduleA';

将根据环境指向本地库或外部 npm 包。由于@moduleA路径在compilerOptions下的tsconfig.json文件中设置为paths,有没有办法在那里进行这种分离?

您应该为 developmentproduction 环境设置不同的环境文件,您可以从那里定义模块 A。所以假设它们是 environment.tsenvironment.prod.ts(对于产品)

environment.ts你一个添加

import { ModuleA } from '@moduleA';

export const environment = {
  ...
  ModuleA: ModuleA,
  ...

并在 environment.prod.ts

import { ModuleA } from '@external/moduleA';

export const environment = {
  ...
  ModuleA: ModuleA,
  ...

所以你可以把它们写成

@NgModule({
  declarations: [],
  imports: [
    ...
    environment.ModuleA
  ]
})

希望对您有所帮助