javascript - 如何从 NPM 包中获取 Angular 5 应用程序环境变量?

标签 javascript angular npm node-modules angular5

我有从 Angular 5 应用程序创建的节点模块,我有必须使用该节点模块的 Angular 5 应用程序。有什么方法可以从我的节点模块中读取 Angular 5 应用程序环境变量(environments/environment.ts)? 也许 Angular 5 在构建后将其环境变量导出到 JavaScript 全局变量,我的节点模块可以从 JavaScript 获取它?

如有任何帮助,我将不胜感激

最佳答案

节点模块不应该直接从环境文件中读取。无法保证用户环境文件的文件结构,或者他们是否有环境文件。所以 node_module 应该完全不受环境影响,而是应该在导入模块时传入一个变量。这使应用程序(及其环境文件)可以完全控制 node_module 使用的内容。

// app.module.ts
import { environment } from './environments/environment';


@NgModule({
    imports: [MyNodeModule.setup(environment.myVar)]
})
export class AppModule {}

这允许用户从他们自己的环境文件中传入静态值或动态值。


更新

要使传入的值可用于您的 node_module,您可以使用 InjectionToken

export const MY_TOKEN = new InjectionToken<string>('My passed in token');

在您的 MyModule 中,您提供此 token 并为其分配传入的值。

@NgModule()
export class MyNodeModule {
    static setup(myToken: string) {
        return {
            ngModule: MyNodeModule,
            providers: [{ provide: MY_TOKEN, useValue: myToken }]
        }
    }
}

现在,为了让您的 node_module 的其余部分使用 token ,您可以注入(inject)它。

@Injectable()
export class SomeService {
    constructor(@Inject(MY_TOKEN) private myToken){}
}

这是一个非常基本的 stackblitz演示此功能。

关于javascript - 如何从 NPM 包中获取 Angular 5 应用程序环境变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47877884/

相关文章:

javascript - WebView 变白/空白

javascript - Immutable JS 从 map 中的所有元素中删除属性

javascript - Typescript switch 语句执行错误情况?

javascript - 如何在 ngx-openlayers 中加载自定义 .pbf 文件

javascript - 如何在 Angular 2 中使用 ngIf-else 中的表达式

node.js - 使用 NPM 在 Ubuntu 上全局安装 Electron

javascript - jQuery "Class"麻烦 - "Unexpected token this"

npm - 如何在不执行 npm install 的情况下更新 package-lock.json ?

javascript - ELI5 包含一个 npm 包

javascript - 离开页面前的动画 JQuery