Javascript 过滤变量并为Node.JS构建缩小的JS分布工件的策略
我来自Java/Maven背景,您可以在这里创建WAR文件进行部署。Maven能够在构建期间“过滤”文件,并在构建时使用您要部署到的环境的目标信息替换变量 现在我在Node.js中工作,我想知道是否有一个类似的工具和最佳实践可以在Node.js中使用,我可以将我的javascript缩小到一个文件中,但同时根据我部署到的环境过滤变量 例如,有一个app_name配置,我希望它是特定于环境的:Javascript 过滤变量并为Node.JS构建缩小的JS分布工件的策略,javascript,node.js,gruntjs,Javascript,Node.js,Gruntjs,我来自Java/Maven背景,您可以在这里创建WAR文件进行部署。Maven能够在构建期间“过滤”文件,并在构建时使用您要部署到的环境的目标信息替换变量 现在我在Node.js中工作,我想知道是否有一个类似的工具和最佳实践可以在Node.js中使用,我可以将我的javascript缩小到一个文件中,但同时根据我部署到的环境过滤变量 例如,有一个app_name配置,我希望它是特定于环境的: exports.config = { app_name : ['$APPNAME-$ENV
exports.config = {
app_name : ['$APPNAME-$ENV'],
license_key : 'xxx',
logging : {
level : '$DEBUG_LEVEL'
}
};
因此,我希望能够使用特定于环境的变量将上面的所有$variables更新到一个单独的缩小JS文件中。看起来我必须将文件复制到暂存区域,对变量执行字符串替换,然后缩小。这看起来合理吗?或者对于如何在节点世界中最好地实现这一点,有什么建议吗?以下是我最终完成上述内容所做的工作(清理、复制、字符串替换、JSHint和Google CC缩小)。我为那些对更深层次的潜水感兴趣的人发布了一篇更完整的文章
(function () {
'use strict';
module.exports = function (grunt) {
grunt.initConfig({
pkg: grunt.file.readJSON('package.json'),
clean: ["dist"],
copy: {
build: {
files: [
{src: ['./**/*.js', './*.json', './stackato.yml', './README.md', './nunit.js', './test/**/*', '!./dist/**/*', '!./node_modules/**/*', '!./Gruntfile.js'], dest: 'dist/'}
]
}
},
'string-replace': {
dev: {
files: {
"dist/": ["newrelic.js", "stackato.yml", "package.json"]
},
options: {
replacements: [
{
pattern: '$APPNAME',
replacement: "services-people"
},
{
pattern: '$VERSION',
replacement: "1.0.6"
},
{
pattern: 'server.js',
replacement: "server.min.js"
},
{
pattern: '$ENV',
replacement: "DEV"
},
{
pattern: '$PDS_PWD',
replacement: ""
},
{
pattern: '$INSTANCES',
replacement: "1"
},
{
pattern: '$NEWRELIC_TRACE_LVL',
replacement: "trace"
}
]
}
},
prod: {
files: {
"dist/": ["newrelic.js", "stackato.yml", "package.json"]
},
options: {
replacements: [
{
pattern: '$APPNAME',
replacement: "services-people"
},
{
pattern: '$VERSION',
replacement: "1.0.6"
},
{
pattern: 'server.js',
replacement: "server.min.js"
},
{
pattern: '$ENV',
replacement: "prod"
},
{
pattern: '$PDS_PWD',
replacement: ""
},
{
pattern: '$INSTANCES',
replacement: "2"
},
{
pattern: '$NEWRELIC_TRACE_LVL',
replacement: "info"
}
]
}
}
},
jshint: {
options: {
curly: true,
eqeqeq: true,
eqnull: true,
strict: true,
globals: {
jQuery: true
},
ignores: ['dist/test/**/*.js']
},
files: ['Gruntfile.js', 'dist/**/*.js']
},
nodeunit: {
all: ['dist/test/*-tests.js']
},
'closure-compiler': {
build: {
closurePath: '.',
js: 'dist/**/*.js',
jsOutputFile: 'dist/server.min.js',
maxBuffer: 500,
options: {
compilation_level: 'ADVANCED_OPTIMIZATIONS',
language_in: 'ECMASCRIPT5_STRICT',
debug: false
// formatting: 'PRETTY_PRINT'
}
}
}
});
grunt.loadNpmTasks('grunt-closure-compiler');
grunt.loadNpmTasks('grunt-contrib-copy');
grunt.loadNpmTasks('grunt-contrib-clean');
grunt.loadNpmTasks('grunt-contrib-jshint');
grunt.loadNpmTasks('grunt-contrib-nodeunit');
grunt.loadNpmTasks('grunt-string-replace');
// Default task(s).
grunt.registerTask('default', ['clean', 'copy:build', 'string-replace:dev', 'jshint', 'closure-compiler:build']);
grunt.registerTask('prod', ['clean', 'copy:build', 'string-replace:prod', 'jshint', 'closure-compiler:build']);
};
})();
在CLI上,您只需使用“grunt”来加速开发版本,或使用“grunt prod”来构建产品版本。我按照您的建议执行,字符串替换并使用Google CC进行缩小。缩小Node.js脚本的原因是什么?@Bergi-为了减小大小并将分发的代码整合到一个工件中,我可以将其放在我们的发布报告中。@FritsvanCampen-您使用什么工具来复制和替换字符串?Grunt??没什么比这更奇特的了,只是一个PHP脚本。