Angular 从可发布的角度库访问环境设置
我已经创建了一个基于Nx的工作区,它有两个shell应用程序(app1和app2)。将在这两个应用程序中重用此CoreModule库 添加Ngrx存储根目录时,我从库中获取access Environment对象时出错,因为shell应用程序中存在Environments文件夹 请让我知道如何将环境对象注入到核心模块中,以便我可以对模块执行此条件加载 !环境与生产?StoreDevtoolsModule.instrument():[] 下面是代码片段,在“我遇到了错误”中,我将注释中的行括起来Angular 从可发布的角度库访问环境设置,angular,angular7,ngrx,nrwl,Angular,Angular7,Ngrx,Nrwl,我已经创建了一个基于Nx的工作区,它有两个shell应用程序(app1和app2)。将在这两个应用程序中重用此CoreModule库 添加Ngrx存储根目录时,我从库中获取access Environment对象时出错,因为shell应用程序中存在Environments文件夹 请让我知道如何将环境对象注入到核心模块中,以便我可以对模块执行此条件加载 !环境与生产?StoreDevtoolsModule.instrument():[] 下面是代码片段,在“我遇到了错误”中,我将注释中的行括起来
import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { StoreModule } from '@ngrx/store';
import { EffectsModule } from '@ngrx/effects';
import {
APP_FEATURE_KEY,
initialState as appInitialState,
appReducer
} from './+state/app.reducer';
import { AppEffects } from './+state/app.effects';
import { NxModule } from '@nrwl/nx';
import { StoreDevtoolsModule } from '@ngrx/store-devtools';
// <error>
import { environment } from '../environments/environment';
// </error>
import { storeFreeze } from 'ngrx-store-freeze';
@NgModule({
imports: [
CommonModule,
NxModule.forRoot(),
StoreModule.forRoot(
{ app: appReducer },
{
initialState: { app: appInitialState },
metaReducers: !environment.production ? [storeFreeze] : []
}
),
EffectsModule.forRoot([AppEffects]),
!environment.production ? StoreDevtoolsModule.instrument() : []
]
})
export class CoreModule {
}
您可以在
tsconfig.json
中的path
config中添加项目结构别名
{
"compilerOptions": {
...,
"baseUrl": ".",
"paths": {
...,
"@mainApp/*": ["app1/app/*"],
"@secondApp/*": ["app2/app/*"]
}
}
}
建议(替代方法):您可以尝试避免在共享模块中创建根状态。而是在各自的应用程序模块中创建根状态,在共享模块中创建功能状态并导入它们。这样可能会更简单。另外,请检查,在共享模块中创建根存储并导入它们将创建一个或两个根存储实例?您可以在
tsconfig.json的path
config中添加项目结构别名
{
"compilerOptions": {
...,
"baseUrl": ".",
"paths": {
...,
"@mainApp/*": ["app1/app/*"],
"@secondApp/*": ["app2/app/*"]
}
}
}
建议(替代方法):您可以尝试避免在共享模块中创建根状态。而是在各自的应用程序模块中创建根状态,在共享模块中创建功能状态并导入它们。这样可能会更简单。另外,请检查,在共享模块中创建根存储并导入它们将创建一个或两个根存储实例?这是一个常见问题,因为环境文件由CLI存储在应用程序级别。解决这个问题的一种方法是为特定的应用程序libs/myapp/data-access-environment
提供一个专用于环境的lib。这将包含两个方面:
环境的类型定义(MyAppEnv
)
注入令牌(MYAPP\u ENV\u令牌
)
您可以使用注入令牌为应用程序提供值。例如,在您的应用程序模块中
:
provide: [ { provide: MYAPP_ENV_TOKEN, useValue: myEnv }] // import myEnv from environment.ts
然后在其他lib中,您可以注入令牌并添加输入
constructor(@Inject(MYAPP_ENV_TOKEN) private env: MyAppEnv) {}
通过这种方式,您可以将环境与应用程序分离。这是一个常见问题,因为环境文件由CLI存储在应用程序级别。解决这个问题的一种方法是为特定的应用程序libs/myapp/data-access-environment
提供一个专用于环境的lib。这将包含两个方面:
环境的类型定义(MyAppEnv
)
注入令牌(MYAPP\u ENV\u令牌
)
您可以使用注入令牌为应用程序提供值。例如,在您的应用程序模块中
:
provide: [ { provide: MYAPP_ENV_TOKEN, useValue: myEnv }] // import myEnv from environment.ts
然后在其他lib中,您可以注入令牌并添加输入
constructor(@Inject(MYAPP_ENV_TOKEN) private env: MyAppEnv) {}
通过这种方式,您可以将环境与应用程序分离。我已经用我尝试过的选项更新了我的问题,但没有得到我期望的结果。我用我尝试过的选项更新了我的问题,但没有得到我期望的结果。