Angular配置根据环境(dev,staging,production)

时间:2015-11-24 16:41:56

标签: javascript angularjs build

这很愚蠢,我知道 - 每当我改变环境时,我都会注释掉我应用程序的配置工厂。必须有更好的方法,有吗?

我虽然检查了网址,但这似乎是一种不好的做法。我想到的另一个选择是在构建过程中使用某种gulp NPM - 但是开发没有构建过程。

angular.module('myApp.services')
    .factory('GemsConfig', function () {
        return {
            //apiServer: "http://localhost:3000/v2/",
            //apiServer: "https://staging.gems.org/v2/",
            apiServer: "https://api.gems.org/v2/",
            //giphyServer: "http://api.giphy.com/v1/gifs/",
            giphyServer: "https://api.giphy.com/v1/gifs/",
            TTL: 5000,
            OS: 'web',
            version: '1.1',
            apiVer: '2.0',
            checkBalanceEveryXSeconds: 600,
            //giphyKey: 'xxx',    // testing
            giphyKey: 'xxxx'
        };

    })

1 个答案:

答案 0 :(得分:0)

为生产创建两个配置,为开发创建一个。并创建一个变量,它可以有两个值“生产”或“开发”。基于此变量调用您的配置。这样你只需要改变变量的名称。

例如

angular.module('myApp.services')
    .factory('GemsConfig', function () {

        var currentEnv = "production";
        var config  = {

          development :{
            apiServer: "https://api.gems.org/v2/",
            giphyServer: "https://api.giphy.com/v1/gifs/",
            TTL: 5000,
            OS: 'web',
            version: '1.1',
            apiVer: '2.0',
            checkBalanceEveryXSeconds: 600,
            giphyKey: 'xxxx'
        },
          production :{
            apiServer: "https://api.gems.org/v2/",
            giphyServer: "https://api.giphy.com/v1/gifs/",
            TTL: 5000,
            OS: 'web',
            version: '1.1',
            apiVer: '2.0',
            checkBalanceEveryXSeconds: 600,
            giphyKey: 'xxxx'
        }
        };

        return config[currentEnv];

     })

修改

或更好的解决方案:创建三个配置 1)常见 2)生产 3)发展

您可以将常用配置参数保留在“常用”公共配置中,也可以在“生产”或“开发”中覆盖它们。至少你必须合并你的“当前环境” - (生产或开发)配置和“通用”配置。为此,您可以使用 angular.extend 函数。

EG。

 angular.module('myApp.services')
        .factory('GemsConfig', function () {

           var currentEnv = "production";
            var config  = {

                common:{
                  TTL: 5000,
                  OS: 'web',
                  version: '1.1',
                  apiVer: '2.0',
                  checkBalanceEveryXSeconds: 600,
                  giphyKey: 'xxxxx'
                },
               development :{
                  apiServer: "https://api.gems.org/v2/",
                  giphyServer: "https://api.giphy.com/v1/gifs/",
                },

                production :{

                  apiServer: "https://api.gems.org/v2/",
                  giphyServer: "https://api.giphy.com/v1/gifs/",
                  TTL:800,

                }
            };

            return angular.extend(config['common'],config[currentEnv]);
});