【发布时间】:2013-07-26 10:24:07
【问题描述】:
创建配置文件(类似于 .net 中的 Web 配置)、用于存储 url 和其他在应用程序部署期间可能发生变化的常量的最佳方法是什么?
【问题讨论】:
标签: angularjs
创建配置文件(类似于 .net 中的 Web 配置)、用于存储 url 和其他在应用程序部署期间可能发生变化的常量的最佳方法是什么?
【问题讨论】:
标签: angularjs
使用.constant() 方法:
angular.module('app').constant('MONGOLAB_CONFIG', {
baseUrl: '/databases/',
dbName: 'ascrum'
});
喜欢this example。
然后你可以把它注入你需要常量的地方。
你可以有不同的文件定义不同的常量用于开发或生产,然后根据环境使用像 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'));
【讨论】:
恕我直言,我不喜欢使用任务运行器处理配置文件。因为您需要重新构建整个应用程序,以便在每次需要不同配置时更改一两行。
使用角度的.config 是一件好事,我会做类似的事情(借用第一个答案的例子)
angular.module('app').constant('MONGOLAB_CONFIG', {
baseUrl: '/databases/',
dbName: 'ascrum'
});
我们将其命名为app.config.js
这将在 .html 中链接到像这样的缩小脚本之后
<script src="js/app-38e2ba1168.js"></script> //the application's minified script
<script src="/app.config.js"></script>
您可以直接编辑app.config.js 文件,而无需重新运行任何任务。因此,您可以在不同的机器/环境上拥有不同的app.config.js 文件,而无需一次又一次地重新构建应用程序
【讨论】:
跳出框框思考,您并不想使用 .constant,因为它与应用程序相关联。使用位于应用程序之外的配置,您可以更好地控制环境配置。我在下面提供了一个链接,解释了在 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/
【讨论】:
window 对象。如果我错了,请纠正我,但@Louie Almeda 的方法似乎更好,因为它使用相同的方法,但导入到角度配置,而不是窗口?欢迎发表意见