角库-“ rootDir”应包含所有源文件。 (environment.ts)

时间:2018-11-08 13:14:10

标签: angular angular7

我正在使用第一个Angular 7库,但是在尝试编译该库时遇到此错误。

错误:错误TS6059:文件'... environment.ts'不在'rootDir''my-angular-library \ projects \ my-library \ src'下。 “ rootDir”应包含所有源文件。

看着我的树,我有:

-projects
  -my-library
     -src
-src
  - environments

在我的课堂上,我有以下导入内容:

import { environment } from "src/environments/environment";

我正在检查其他线程在打字稿中提到错误的地方,但是我正在运行最新版本的“打字稿”:“〜3.1.1”。

提到其他有关rootDir配置错误的线程。我检查了项目,但在任何配置文件中都没有定义rootDir。

我不需要在项目中添加环境吗?

1 个答案:

答案 0 :(得分:0)

该库引用的所有文件都必须包含在project\my-library\src目录中(或从另一个模块中拉入),以便正确构建该库。

我也不认为您也不想直接在您的库中包含环境文件。在构建应用程序期间,该环境文件将在应用程序中切换出来。不过,有了库,您就可以对其进行构建,然后将其导入到已经构建的应用程序中,这样就不会适当地切换出该文件。

我知道最好的解决方案是在您的库中创建一个Token并将其从库的api中导出。然后,在使用该库的应用程序中,您将使用该令牌通过DI容器提供环境。

例如,在您的库中,您将执行以下操作:

project\my-library\src\lib\environment-token.ts

import { InjectionToken } from '@angular/core';

export let ENVIRONMENT_TOKEN = new InjectionToken('environment');

project\my-library\src\public_api.ts

export * from './lib/environment-token.ts'

project\my-library\src\lib\component.ts

import {
  Component,
  Inject
} from '@angular/core';

import {
  ENVIRONMENT_TOKEN
} from './environment-token';

@Component({
  selector: 'aa-component',
  template: `
})
export class Component {
  constructor(@Inject(ENVIRONMENT_TOKEN) private environment: any) {
  }
}

然后在您的应用程序中,您将执行以下操作:

import {
  NgModule
} from '@angular/core';

import {
  YOUR_MODULE,
  ENVIRONMENT_TOKEN
} from 'YOUR_LIB_NAME';

import {
  environment
} from './environments/environment';

import {
  AppComponent
} from './app.component.ts'

@NgModule({
  declarations: [
    AppComponent
  ],
  imports: [
    YOUR_MODULE
  providers: [
    { provide: ENVIRONMENT_TOKEN, useFactory: () => environment }
  ],
  bootstrap: [AppComponent]
})
export class AppModule {}