加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

如何使angularjs应用程序12兼容配置

发布时间:2020-12-17 18:07:57 所属栏目:安全 来源:网络整理
导读:我正试图使一个 angularjs应用程序12因素兼容配置( http://12factor.net/config). 它应该取决于环境,我不应该在代码中看到开发,测试,生产等字样. 例如,变量可以存储在bash env中. 我可以将它们传递给网络服务器. 我已经想到了一个.erb模板文件来erb config.j
我正试图使一个 angularjs应用程序12因素兼容配置( http://12factor.net/config).

它应该取决于环境,我不应该在代码中看到开发,测试,生产等字样.

例如,变量可以存储在bash env中.
我可以将它们传递给网络服务器.

我已经想到了一个.erb模板文件来erb config.js.erb> config.js,但如果我在应用程序运行时更改变量,我必须重做这个.

我已经找到了这篇文章http://mindthecode.com/how-to-use-environment-variables-in-your-angular-application/

但这是一个很大的谎言和Grunt.js这样做,真的……无论如何.

我知道12factor哲学不是为前端应用而制作的,但我的角度应用程序可以在许多不同的服务器中部署在许多环境中,并且不会伤害任何人来尝试正确地做事:).

谢谢 !

编辑:

我想使用的配置参数有些像:

app:
   api:
       url: "The url of the api server"
       port: 8080
   cdn:
       images: "url of my images caching service"
   google:
       oauth:
           "api_key": "The api key used for that deployment"
   #other external frontend services

其他编辑:

这个家伙有点回答:http://bahmutov.calepin.co/inject-valid-constants-into-angular.html我发现有点丑陋,完全绑定到angularjs;但它的确有效!

解决方法

这是我找到的解决方案,它完全绑定到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',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);

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读