如何使用 process.env 将环境变量中的 API 密钥传递给 Ember CLI?
Posted
技术标签:
【中文标题】如何使用 process.env 将环境变量中的 API 密钥传递给 Ember CLI?【英文标题】:How to pass API keys in environment variables to Ember CLI using process.env? 【发布时间】:2014-12-11 18:10:11 【问题描述】:如何将环境变量从 bashrc 传递到 Ember CLI。我想象一种情况,您需要条带 api 密钥或推送器 api 密钥,并且您将它们放在 bashrc 的环境变量中。如何将 api-keys 传递给 Ember CLI。
我尝试在 brocfile.js
和 environment.js
中使用 Node.js process.env
,但是当我尝试在 Ember JS 控制器中访问它时,该属性为空。
在我添加的environment.js
文件中,
APP: apiKey: process.env.KEY
在我的 Ember JS 控制器中,我尝试通过以下方式访问它:
import config from '../config/environment';
并设置控制器属性lkey
如下图,不起作用:
lkey: config.App.KEY
接下来在我的brocfile.js
中,我补充说:
var limaKey = process.env.Key;
var app = new EmberApp(key: limaKey);
这还是不行。
【问题讨论】:
ember rails 不是 ember-cli 顺便说一句 我知道,你可以看到他们的名字不同,所以我知道他们是不同的。我的示例显示了使用 ember-rails 时如何处理它,我正在询问如何使用 ember-cli 来处理它。请参阅我的问题的最后一行。 类似的东西可能需要绑定到 ember-cli 的构建过程或 environment.js 文件中。一种快速而肮脏的方法是只使用 environment.js 文件中的节点来读取您在 rails 应用程序中存储密钥的任何位置,并将它们添加到应用程序的环境配置中。 假设您正在使用 secrets.yml 或 application.yml 之类的东西来存储它们,以便您可以读取它们 是的,我正在使用 secrets.yml。我现在正在尝试在 environment.js 文件中使用 node,使用 process.env.xxx 来 bashrc 文件中的环境变量。欢呼 【参考方案1】:关键是在config/environment.js
中定义ENV 变量,当您需要在某个地方(即适配器、控制器等)访问它们时,您首先导入config/environment.js
。
对于 Ember CLI 应用程序,https://ember-cli.com/user-guide/#Environments 记录了此内容,供您参考。
示例逻辑:
# app/controllers/foobar.js
import DS from 'ember-data';
import ENV from 'nameOfApp/config/environment';
export default Ember.Controller.extend(
actions:
click: function()
console.log(ENV.SOME_ENVIRONMENT_KEY);
);
# config/environment.js
module.exports = function(environment)
....
if (environment === 'development')
ENV.SOME_ENVIRONMENT_KEY = 'asdf1234';
...
;
【讨论】:
我更强调在 ember build 的命令行中指定选项的原始问题,例如 --environment=staging --key=我终于解决了这个问题。我面临两个选择。选项 1 是使用 XHR 从服务器上的端点获取 api-keys。选项 2 是使用 Nodejs process.env 直接从环境变量中获取 api-key。我更喜欢选项 2,因为它使我免于执行 XHR 请求。
您可以使用依赖于 Nodejs Dotenv 项目的 ember-cli-addOn 获得选项 2
https://github.com/fivetanley/ember-cli-dotenv https://github.com/motdotla/dotenv就我而言,我选择不使用任何插件。
-
如果您是 Ubuntu 或您自己的 linux 发行版的适当位置,请首先将 api-key 添加到您的
.bashrc
。
export API_KEY=NwPyhL5
-
重新加载
.bashrc
文件,以便您的设置被拾取:
source ~/.bashrc
-
在 Ember CLI 中,将属性添加到
config/environment.js
中的 ENV
对象。默认是这样的
module.exports = function(environment)
var ENV =
modulePrefix: 'rails-em-cli',
environment: environment,
baseURL: '/',
locationType: 'auto',
EmberENV:
现在,我们可以向 ENV
对象添加一个新属性 myApiKey,如下所示:
module.exports = function(environment)
var ENV =
modulePrefix: 'rails-em-cli',
environment: environment,
baseURL: '/',
locationType: 'auto',
myApikey: null,
EmberENV:
//assign a value to the myApiKey
if (environment === 'development')
// ENV.APP.LOG_RESOLVER = true;
ENV.myApiKey = process.env.API_KEY;
请注意,process.env.API_KEY 正在获取我们添加到 .bashrc
的设置并将其分配给 myApiKey。您需要在服务器上安装 Nodejs,process.env 才能正常工作。
最后在你的控制器中访问那个变量
import config from '../config/environment';
import Ember from 'ember';
export default Ember.Controller.extend(
yourKey: config.myApikey,
);
就是这样。
【讨论】:
我这边不需要任何这些 ember 插件。process.env.API_KEY
够了!【参考方案3】:
我想确保我的 API 密钥没有被签入。作为构建过程的一部分,我将本地配置文件复制到 config
目录并将其加载到 environment.js
在environment.js
try
var local = require('./local_environment');
Object.keys(local.config).forEach(function(key)
ENV[key] = local.config[key];
);
catch(err)
console.log("config/local_environment.js not found");
在local_environment.js
(未签入,由构建过程复制)
exports.config =
SOME_API_KEY: 'key_here'
;
【讨论】:
【参考方案4】:您还可以在ENV.APP
对象上设置变量:它们将由应用程序实例携带。
然后您可以在初始化程序等中重用它们。
这样,您不必将config/environment
导入应用程序的代码中,这对我来说有点奇怪。
【讨论】:
您能否添加一个如何使用应用实例访问它的示例?你的意思是使用this.container.lookup('application:main')
?
是的,我就是这个意思。以上是关于如何使用 process.env 将环境变量中的 API 密钥传递给 Ember CLI?的主要内容,如果未能解决你的问题,请参考以下文章
vue中如何添加自定义环境变量 ,process.env取值报错undefined
如何在赛普拉斯运行的浏览器中使用 process.env 变量