Angular 从可发布的角度库访问环境设置

Angular 从可发布的角度库访问环境设置,angular,angular7,ngrx,nrwl,Angular,Angular7,Ngrx,Nrwl,我已经创建了一个基于Nx的工作区,它有两个shell应用程序(app1和app2)。将在这两个应用程序中重用此CoreModule库 添加Ngrx存储根目录时,我从库中获取access Environment对象时出错,因为shell应用程序中存在Environments文件夹 请让我知道如何将环境对象注入到核心模块中,以便我可以对模块执行此条件加载 !环境与生产?StoreDevtoolsModule.instrument():[] 下面是代码片段,在“我遇到了错误”中,我将注释中的行括起来

我已经创建了一个基于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) {}
    

    通过这种方式,您可以将环境与应用程序分离。

    我已经用我尝试过的选项更新了我的问题,但没有得到我期望的结果。我用我尝试过的选项更新了我的问题,但没有得到我期望的结果。