首页 > 解决方案 > ember js 访问环境来自供应商文件中的 ember-cli-build

问题描述

在我的ember-cli-build.js文件中,我正在导入一个名为new-relicusing的供应商库app.import('vendor/new-relic.js'),我想将一个名为的参数传递env给 new-relic 供应商文件并在new-relic.js文件中使用它。我试着做

app.import('vendor/new-relic.js', { env: 'production' });

当我尝试控制台登录env供应商文件时,它显示undefined. 有没有办法将环境传递给供应商文件?

标签: javascriptember.js

解决方案


当您app.import使用供应商文件时,它不会在与ember-cli-build.js构建时相同的节点环境中执行,而是在运行时在您用户的浏览器上执行,因此无法将环境作为参数传递。

但是,Ember 通过以下方式自动使浏览器中的环境可用。这是您可以在初始化程序中的窗口对象上设置它的方法:

import ENV from 'config/environment';

export function initialize() {
  window.env = ENV.environment;
}

export default { initialize };

这将在您的 ember 应用程序启动后立即在窗口对象上提供环境。如果您的供应商文件访问它,那么这将起作用。

然而,这可能还不够早。env一旦浏览器读取 new-relic.js 文件,您可能需要该变量可用。为了处理这样的用例,您可能需要contentFor在插件中使用钩子。已经为您编写了一个不错的插件来执行此操作:ember-cli-content-for-config. 有了它,您可以将其添加到您的index.html

<script>
  window.env = '{{content-for 'config.environment'}}';
</script>

在此处查看插件的自述文件:https ://github.com/bmac/ember-cli-content-for-config

您还需要更改 new-relic.js 以env在全局命名空间(窗口对象)中查找变量。


推荐阅读