Подтвердить что ты не робот

Файл конфигурации в AngularJS

Каков наилучший способ создания файла конфигурации (что-то вроде веб-конфигурации в .net), для хранения URL-адресов и других констант, которые могут различаться при развертывании приложения?

4b9b3361

Ответ 1

Используйте метод .constant():

angular.module('app').constant('MONGOLAB_CONFIG', {
  baseUrl: '/databases/',
  dbName: 'ascrum'
});

как в этом примере.

Затем вы можете просто ввести его туда, где вам нужны константы.

У вас могут быть разные файлы, определяющие разные константы для разработки или производства, а затем использовать такой инструмент, как Grunt, для использования того или иного файла в соответствии с окружением.

Предположим, что у вас есть такая структура папок:

|-js/
|  |-app.js
|  |-anotherfile.js
|  |-...
|
|-env/
|  |-dev.js
|  |-prod.js
|
|-index.html

dev.js и prod.js определяет ту же службу .constant() с разными значениями. Затем вы можете получить соответствующий файл, который будет объединен с таким способом gruntFile:

grunt.registerTask('default', ['concat']);

grunt.initConfig({
  env : process.env.NODE_ENV,
  src: {
    javascript: ['js/*.js'],
    config: ['env/<%= env %>.js']
  },
  concat: {
    javascript: {
      src:['<%= src.config %>', '<%= src.javascript %>'],
      dest:'myapp.js'
    }
  }
});

Запустив grunt, вы получите файл myapp.js, содержащий хорошие константы.

Изменить: с помощью Gulp вы можете сделать это следующим образом:

var paths = [
  'env/' + process.env.NODE_ENV + '.js',
  'js/**/*.js',
];

var stream = gulp.src(paths)
  .pipe(plugins.concat('main.js'))
  .pipe(gulp.dest('/output'));

Ответ 2

IMHO, мне не нравится обрабатывать файлы конфигурации с помощью задач. Причина в том, что вам нужно будет перестроить все ваше приложение, чтобы изменить строку или два каждый раз, когда вам нужна другая конфигурация.

Использование .config of angular - это хорошо, и я бы сделал что-то вроде (заимствование из примера первого ответа)

angular.module('app').constant('MONGOLAB_CONFIG', {
  baseUrl: '/databases/',
  dbName: 'ascrum'
});

назовите это как app.config.js

И это будет связано в .html сразу после мини- script, подобного этому

<script src="js/app-38e2ba1168.js"></script> //the application minified script
<script src="/app.config.js"></script>

Вы можете просто отредактировать файл app.config.js без каких-либо задач. Таким образом, вы можете иметь разные файлы app.config.js на разных компьютерах/средах без повторного создания приложения снова и снова

Ответ 3

Мысль за пределами коробки, вы действительно не хотите использовать .constant, поскольку она привязана к приложению. Используйте конфигурацию, которая находится за пределами приложения, и у вас больше возможностей для управления конфигурациями env. Я привел ссылку ниже, объясняя, как возникают ошибки в конфигурациях самой сборки angular.

(function hydrateConfiguration() {
"use strict";
var xhr = new XMLHttpRequest();
xhr.open("get", "conf.json", window);
xhr.onload = function () {
    var status = xhr.status;
    if (status === 200) {
        if (xhr.responseText) {
            var response = JSON.parse(xhr.responseText);
            window.ss_conf = response;
        }
    } else {

        console.error("messages: Could not load confguration -> ERROR ->", status);
    }
};

xhr.send() )());

Просто простой пример, когда внешний файл конфигурации управляет состоянием приложения и вводит значения вне внутри, а не внутри.

https://www.jvandemo.com/how-to-configure-your-angularjs-application-using-environment-variables/