我正在开发我的第一个 Angular 7 库,但是在尝试编译该库时收到此错误。
错误:错误 TS6059:文件“...environment.ts”不在“rootDir”“my-angular-library\projects\my-library\src”下。“rootDir”预计包含所有源文件。
看着我的树,我有:
-projects
-my-library
-src
-src
- environments
Run Code Online (Sandbox Code Playgroud)
在我的课堂上,我有以下导入:
import { environment } from "src/environments/environment";
Run Code Online (Sandbox Code Playgroud)
我正在检查其他线程,他们提到了打字稿中的错误,但是我正在运行最新版本的“打字稿”:“〜3.1.1”。
其他线程提到了错误配置的 rootDir。我检查了我的项目,没有在任何配置文件中定义 rootDir。
我不需要向项目添加环境,对吗?
库引用的所有文件都需要包含在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');
Run Code Online (Sandbox Code Playgroud)
project\my-library\src\public_api.ts
export * from './lib/environment-token.ts'
Run Code Online (Sandbox Code Playgroud)
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) {
}
}
Run Code Online (Sandbox Code Playgroud)
然后在您的应用程序中,您将执行以下操作:
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 {}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6781 次 |
| 最近记录: |