我已经使用新的CLI 6.x创建了一个库。我还在其中创建了一个Angular服务,我想在我的开发和生产环境中使用不同的URL。因此,我在库文件夹中创建了一个environment.ts
和environment.prod.ts
文件。
//dev
export const environment = {
production: false,
url: 'dev-url'
};
//prod
export const environment = {
production: true,
url: 'prod-url'
};
我还向angular.json
文件添加了“ fileReplacements”属性:
"configurations": {
"production": {
"fileReplacements": [{
"replace": "projects/tk-shared/src/environments/environment.ts",
"with": "projects/tk-shared/src/environments/environment.prod.ts"
}],
"project": "projects/tk-shared/ng-package.prod.json"
}
}
ng build tk-shared
使用作品编译库并使用dev
设置,但是使用进行编译时ng build --prod tk-shared
出现以下错误:
Schema validation failed with the following errors: Data path "" should NOT have additional properties(fileReplacements).
我的提示是,原因是在中tk-shared
具有projectType: "library"
属性angular.json
。
无论如何,是否可以在库中使用环境文件?
谢谢@R。Richards为我指出了正确的解决方案!这两个来源帮助我弄清楚了如何正确进行注入:LINK1和LINK2。
所以我做了...
创建了一个InjectionToken
并修改了my TkSharedModule
:
export const BASE_URL = new InjectionToken<string>('BASE_URL');
//...
export class TkSharedModule {
static forRoot(host: string) {
return {
ngModule: TkSharedModule,
providers: [{
provide: BASE_URL,
useValue: host
}]
}
}
}
从environment
my中的文件提供了此令牌的值AppModule
:
import {environment} from '../environments/environment';
//...
@NgModule({
declarations: [
AppComponent
],
imports: [
BrowserModule,
TkSharedModule.forRoot(environment.url)
],
providers: [],
bootstrap: [AppComponent]
})
export class AppModule { }
最后将这个值注入我的服务中:
//MyServiceService
import { BASE_URL } from '../tk-shared.module';
constructor(@Inject(BASE_URL) BASE_URL: string) {
console.log('base url', BASE_URL);
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句