1

这是@dbendaou 在Ember Discord上提出的一个问题


从插件中的配置/环境访问 ENV 的最佳方法是什么?

我在想,getOwner(this).lookup('config:environment')但它不起作用,也没有import ENV from '../config/environment';

4

1 回答 1

1

从插件,特别是,因为你的上下文没有定义环境,你需要一个稍微不同的 API:

import { getOwner } from '@ember/application';

// ....
export default class MyAddonComponent extends Component {
  get env() {
    getOwner(this).resolveRegistration('config:environment')
  }
}

import ENV from '../config/environment'是一个别名import ENV from '<app-name>/config/environment';,插件无法知道它<app-name>是什么。

也许相关,因为这在不和谐中出现了很多次,这也是您在运行时访问环境变量的方式。environment.js 是一个构建时文件,因此它可以访问您的应用程序构建的节点环境,并输出一个 JSON 对象供您的应用程序使用。

例如:

// <your-app>/config/environment.js

const MY_ENV_VAR = process.env;

module.exports = function (environment) {
  let ENV = {
     // ...
     MY_ENV_VAR,

  };

  return ENV;
}

然后,您的插件可以MY_ENV_VAR通过 resolveRegistration 访问。并且应用程序可以通过导入访问它。

应用:

import ENV from '<app-name>/config/environment'

// ...
ENV.MY_ENV_VAR

插件:

getOwner(this).resolveRegistration('config:environment').MY_ENV_VAR;
于 2021-10-08T15:26:41.607 回答