我正在使用第一个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。
我不需要在项目中添加环境吗?
答案 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 {}