Как сделать угловое приложение 12 совместимым с конфигурацией

Я пытаюсь сделать приложение angularjs app 12 совместимым с конфигурацией (http://12factor.net/config).

Он должен зависеть от среды, и я не должен видеть в коде слова development, test, production и т.д.

Переменные могут быть сохранены в bash env, например. Я мог бы передать их на веб-сервер.

Я уже думал о файле шаблона .erb для erb config.js.erb > config.js, но если я изменю переменную во время работы приложения, мне придется переделать ее.

Я уже нашел эту статью http://mindthecode.com/how-to-use-environment-variables-in-your-angular-application/

Но это большая ложь и Grunt.js, чтобы сделать это, действительно... Во всяком случае.

Я знаю, что философия 12factor не была создана для приложения frontend, но мое угловое приложение может быть развернуто на многих разных серверах во многих средах, и это никому не повредит, чтобы попытаться сделать что-то правильно:).

Спасибо!

Edit:

Параметры конфигурации, которые я хотел бы использовать, будут такими, как:

<Предварительно > <код > приложения:  апи:      url: "URL-адрес сервера api"      порт: 8080  CDN:      images: "url of my images caching service"  Google:      OAuth:           "api_key": "Ключ api, используемый для этого развертывания"  # другие внешние интерфейсные службы Код >

Другое Редактировать:

Этот парень вроде бы пошел с ответом: http://bahmutov.calepin.co/inject-valid-constants-into-angular.html, который я считаю отвратительным и полностью привязанным к угловым; но он работает!

4
задан Azr 30 мая '14 в 13:14
источник поделиться

2 ответов

Вот решение, которое я нашел, оно полностью связано с угловыми, но оно работает для меня на 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
ответ дан Azr 15 окт. '14 в 18:52
источник поделиться

Я нашел репозиторий на github, который, надеюсь, поможет вам Angular-Express-Train-Seed

0
ответ дан Nur Rony 21 авг. '14 в 17:27
источник поделиться

Другие вопросы по меткам