【问题标题】:'environment.ts' is not under 'rootDir' Angular Library build error“environment.ts”不在“rootDir”角度库构建错误下
【发布时间】:2020-05-08 12:06:19
【问题描述】:

我正在尝试从 Angular 9 库中读取环境变量,但在构建库时出错

这里是实现

从 'projects/falcon-core/src/lib/view-models/environment-view-model' 导入 { EnvironmentViewModel };

class EnvironmentImpl implements EnvironmentViewModel {
  production = false;
  openID = {
    authority: "https://dev-816623.okta.com/oauth2/XXXXXXXXXXXXX",
    client_id: "XXXXXXXXXXXXX",
    redirect_uri: "https://localhost:4200/auth-callback",
    post_logout_redirect_uri: "https://localhost:4200",
    response_type: "code",
    scope : "openid profile email"
  }
}

export const environment = new EnvironmentImpl();

查看模型

export abstract class EnvironmentViewModel {
    abstract readonly production: boolean;
    abstract readonly openID: IOpenIdViewModel;
}

export declare interface IOpenIdViewModel {
    authority?: string;
    client_id?: string;
    redirect_uri?: string;
    response_type?: string;
    scope?: string;
    silent_redirect_uri?: string;
    post_logout_redirect_uri?: string;
    filterProtocolClaims?: boolean
    loadUserInfo?: boolean
    automaticSilentRenew?: boolean;
    monitorSession?: boolean;
    accessTokenExpiringNotificationTime?: number;
    checkSessionInterval?: number;
    silentRequestTimeout?: number;
}

在模块中

import { environment } from 'src/environments/environment';
 providers: [
    { provide: EnvironmentViewModel, useValue: environment }
  ]

tsconfig.lib.json

   {
  "extends": "../../tsconfig.json",
  "compilerOptions": {
    "outDir": "../../out-tsc/lib",
    "target": "es2015",
    "declaration": true,
    "inlineSources": true,
    "types": [],
    "lib": [
      "dom",
      "es2018"
    ]
  },
  "angularCompilerOptions": {
    "skipTemplateCodegen": true,
    "strictMetadataEmit": true,
    "enableResourceInlining": true
  },
  "includes": ["../../src/environments/environment.ts"],
  "exclude": [
    "src/test.ts",
    "**/*.spec.ts"
  ]
}

tsconfig.json

{
  "compileOnSave": false,
  "compilerOptions": {
    "baseUrl": "./",
    "outDir": "./dist/out-tsc",
    "sourceMap": true,
    "declaration": false,
    "downlevelIteration": true,
    "experimentalDecorators": true,
    "module": "esnext",
    "moduleResolution": "node",
    "importHelpers": true,
    "target": "es2015",
    "lib": [
      "es2018",
      "dom"
    ],
    "paths": {
      "@falcon/core": [
        "dist/@falcon-ng/core"
      ]
    }
  },
  "angularCompilerOptions": {
    "fullTemplateTypeCheck": true,
    "strictInjectionParameters": true
  }
}

不断收到错误

ERROR: projects/falcon-core/src/lib/falcon-core.module.ts:28:29 - error TS6059: File '/Users/macbook/Projects/project-falcon/src/environments/environment.ts' is not under 'rootDir' '/Users/macbook/Projects/project-falcon/projects/falcon-core/src'. 'rootDir' is expected to contain all source files.

28 import { environment } from 'src/environments/environment';

参考https://github.com/nrwl/nx/issues/208

【问题讨论】:

  • 请分享您的 tsconfig.json 文件,问题就在那里。
  • @satanTime 你的意思是库一 tsconfig.lib.json 吗?
  • 是的,通常你应该有几个 - 一个在 root 中,1 或 2 个在 src 中用于应用程序和规范。
  • 更新了 tsconfig.lib.json 文件
  • 你还需要分享"extends": "../../tsconfig.json",它是一个家长。

标签: angular typescript angular-module angular-library


【解决方案1】:

找到更好的解决方案

库模块

export class FalconCoreModule {
    public static forRoot(environment: any): ModuleWithProviders {
      return {
        ngModule: FalconCoreModule,
        providers: [{ provide: EnvironmentViewModel, useValue: environment }]
      };
    }
}

现在使用这个库的项目将环境变量作为根元素传递。

import {environment} from "../environments/environment";
@NgModule({
            declarations: [],
            imports:[
                FalconCoreModule.forRoot(environment)
            ],
            bootstrap: [AppComponent]
        })

【讨论】:

  • 你得到这个解决方案了吗,上面的方法对我不起作用。
猜你喜欢
  • 2022-07-15
  • 2017-12-01
  • 2019-01-28
  • 2019-12-16
  • 2019-01-05
  • 2019-09-09
  • 2021-06-05
  • 1970-01-01
  • 2023-01-26
相关资源
最近更新 更多