从供应商文件中的ember-cli-build获取ember js访问环境

mdfafbf1  于 2022-11-23  发布在  其他
关注(0)|答案(1)|浏览(101)

在我的ember-cli-build.js文件中,我正在使用app.import('vendor/new-relic.js')导入一个名为new-relic的供应商库,我想将一个名为env的参数传递给new-legacy供应商文件,并在new-relic.js文件中使用它。
app.import('vendor/new-relic.js', { env: 'production' });
当我尝试在vendor文件中控制台日志env时,它显示为undefined。有没有办法将env传递到vendor文件?

jgwigjjp

jgwigjjp1#

当您对供应商文件执行app.import时,它不会在生成时在与ember-cli-build.js相同的节点环境中执行,而是在运行时在用户的浏览器中执行,因此无法将环境作为参数传递。
然而,Ember会以如下方式自动使环境在浏览器中可用。这就是你如何在初始化器中的window对象上设置它:

import ENV from 'config/environment';

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

export default { initialize };

这将使环境在你的ember应用程序启动时在窗口对象上可用。如果你的供应商文件在那时访问它,这将起作用。
然而,这可能还不够早。您可能需要在浏览器读取new-relic.js文件后立即使用env变量。为了处理这样的用例,您可能需要在插件中使用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变量。

相关问题