Angular库 - 'rootDir' 应包含所有源文件。(environment.ts)

5
我正在开发我的第一个Angular 7库,但是当我尝试编译库时出现了以下错误:
错误:error TS6059:文件“...environment.ts”不在“rootDir”“my-angular-library\projects\my-library\src”下。预计“rootDir”包含所有源文件。
查看我的目录树,我有以下文件:
-projects
  -my-library
     -src
-src
  - environments

在我的课程中,我有以下导入内容:

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

我正在查看其他有关typescript中错误的线程,但是我正在运行最新版本的"typescript": "~3.1.1"。
其他线程提到了配置错误的rootDir。我检查了我的项目,发现没有在任何配置文件中定义rootDir。
我不需要为项目添加环境,对吗?
1个回答

2
所有被库引用的文件都需要包含在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 {}

实际上,我在核心应用程序中有一个用户服务,并且我正在尝试将此用户服务导入到库中[作为模块使用]。我遇到了相同的rootDir问题。有可能修复这个问题吗? - boredbear153

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接