我尝试按照配置(http://12factor.net/config)设置angularjs app 12因素。
它应该取决于环境,我不应该在代码中看到development
,test
,production
等字样。
例如,变量可以存储在bash env
中。
我可以将它们传递给网络服务器。
我已经想到了{。{1}}的.erb模板文件,但是如果我在应用程序运行时更改变量,我必须重做这个。
我已经找到了这篇文章http://mindthecode.com/how-to-use-environment-variables-in-your-angular-application/
但这是一个很大的谎言和Grunt.js这样做,真的......无论如何。
我知道12因素哲学并不适用于前端应用程序,但我的角度应用程序可以部署在许多环境中的许多不同服务器中,并且不会伤害任何人以试图正确地做事:)。
谢谢!
编辑:
我想使用的配置参数可能是:
erb config.js.erb > config.js
其他编辑:
这家伙有点回答:http://bahmutov.calepin.co/inject-valid-constants-into-angular.html我发现它有些丑陋,完全与棱镜有关;但它有效!
答案 0 :(得分:1)
这是我找到的解决方案,它完全绑定到angularjs但它在Heroku上适用于我,它非常简单。我只是将我的conf模块附加到生成的代码中。
每次我重新启动应用程序时都会复制新版本的代码,因此Append
只会发生一次。
Append
只是重新定义了现有的配置变量。
如果有人发现了更多优雅的东西。我很乐意将其作为正确的解决方案!
var compression = require('compression');
var express = require('express');
var logfmt = require('logfmt');
var stdio = require('stdio');
var glob = require("glob");
var fs = require('fs');
// ------------------------
// Read config from args
var ops = stdio.getopt({
'url': {
key: 'u',
args: 1,
default: '',
description: 'Url of api server'
},
'port': {
key: 'p',
args: 1,
default: 5000,
description: 'Port on which to listen'
}
});
var port = ops.port || process.env.PORT;
ops.port = undefined;
// ------------------------
// Append config to js built file
var codeToAppend = 'angular.module("project.config",[]).constant("ApiConfig",' + JSON.stringify(ops) + ');';
glob(__dirname + '/dist/scripts/scripts.*.js', function(er, files) {
fs.appendFile(files[0], codeToAppend, function(err) {
if (err) {
throw err;
}
console.log('The "conf code" was appended to file!');
});
});
// ------------------------
// Start App :3
var app = express();
app.use(logfmt.requestLogger());
app.use(compression({
threshold: 512
}));
app.use(express.static(__dirname + '/dist'));
app.get('/config', function(req, res) {
res.json(ops);
});
app.listen(port);
答案 1 :(得分:0)
我在github上找到了一个存储库,希望能帮到你Angular-Express-Train-Seed