如何将环境变量从bashrc传递到Ember CLI。我想象一种情况,你需要条带api键或pusher api-keys,你可以在bashrc中的环境变量中使用它们。如何将api-key传递给Ember CLI。
我尝试在process.env
和brocfile.js
中使用Node.js environment.js
,但是当我尝试在Ember JS控制器中访问它时,该属性为null。
在我添加的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});
这仍然没有用。
答案 0 :(得分:40)
我终于解决了这个问题。我面临两种选择。选项1是使用XHR从服务器上的端点获取api-key。选项2是使用Nodejs process.env直接从环境变量获取api-key。我更喜欢选项2,因为它使我免于做XHR请求。
你可以使用这个依赖于Nodejs Dotenv项目的ember-cli-addOn获得选项2
在我的情况下,我选择不使用任何addOn。
.bashrc
,如果您是Ubuntu或者您自己的Linux发行版的合适地点。export API_KEY=NwPyhL5
.bashrc
文件,以便提取您的设置:source ~/.bashrc
ENV
中的config/environment.js
对象添加属性。默认值如下所示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 的设置。您需要在服务器上安装Nodej才能使 process.env 正常工作。
最后要在你的控制器中访问该变量
import config from '../config/environment';
import Ember from 'ember';
export default Ember.Controller.extend({
yourKey: config.myApikey,
});
那就是它。
答案 1 :(得分:5)
您还可以在ENV.APP
对象上设置变量:它们将由应用程序实例承载。
然后你可以在初始化器和放大器中重复使用它们。等等。
这样,您就不必将config/environment
导入到应用程序的代码中,这对我来说似乎有点奇怪。
答案 2 :(得分: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'
};
答案 3 :(得分:2)
关键是在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';
}
...
};