Javascript Gruntjs:复制文件时替换模板
我正在写一个Gruntjs脚本,它应该Javascript Gruntjs:复制文件时替换模板,javascript,node.js,continuous-integration,gruntjs,grunt-contrib-concat,Javascript,Node.js,Continuous Integration,Gruntjs,Grunt Contrib Concat,我正在写一个Gruntjs脚本,它应该 将某些JS文件的模板连接并替换到目标目录(contrib concat) 复制并替换其他一些文件的模板(contrib copy) 将文件打包成zip文件 contrib concat有一个布尔选项process,用于在处理文件时替换模板(如) contrib copy还有一个选项processContent,但是我不知道如何使用该选项触发模板处理 module.exports = function(grunt) { grunt.initCo
- 将某些JS文件的模板连接并替换到目标目录(contrib concat)
- 复制并替换其他一些文件的模板(contrib copy)
- 将文件打包成zip文件
)
contrib copy还有一个选项processContent,但是我不知道如何使用该选项触发模板处理
module.exports = function(grunt) {
grunt.initConfig({
meta: {
banner: ' \
/*! <%= pkg.title || pkg.name %> - v<%= pkg.version %> - <%= grunt.template.today("yyyy-mm-dd") %>\n \
* <%= pkg.homepage %>\n \
*/\n\n',
build_date: '<%= grunt.template.today("yyyy-mm-dd") %>',
build_num: process.env.BUILD_NUMBER || 0, // Jenkins build number if available
version_string: '<%= pkg.version %>-<%= meta.build_num %>',
dist_dir: 'dist/<%= pkg.version %>'
},
pkg: grunt.file.readJSON('package.json'),
concat: {
options: {
stripBanners: {
block: true
},
process: true,
separator: '\n /* ----- */ \n',
banner: '<%= meta.banner %>'
},
dist: {
src: [
'src/ViewUtility.js',
'src/ViewClass.js',
'src/ViewClass.js',
'src/MarksClass.js',
'src/ViewVersion.js'],
dest: 'build/View.js'
}
},
uglify: {
options: {
mangle: {
except: ['jQuery', 'Hammer']
},
banner: '<%= meta.banner %>'
},
dist: {
src: '<%= pkg.main %>',
dest: 'build/View.min.js'
}
},
copy: {
options: {
processContent: true
},
dist: {
files: [
{expand: true, cwd: 'build/', src: ['**'], dest: '<%= meta.dist_dir %>/view/'},
{expand: true, cwd: 'src/', src: ['View-tp.js'], dest: '<%= meta.dist_dir %>/view/'},
{expand: true, cwd: 'src/', src: ['plugin.json'], dest: '<%= meta.dist_dir %>/'}
]
}
},
compress: {
dist: {
options: {
archive: 'view_' + '<%= meta.version_string %>_<%= meta.build_date %>' + '.zip'
},
expand: true,
cwd: 'dist/',
src: ['**/*']
}
}
});
grunt.loadNpmTasks('grunt-contrib-uglify');
grunt.loadNpmTasks('grunt-contrib-concat');
grunt.loadNpmTasks('grunt-contrib-copy');
grunt.loadNpmTasks('grunt-contrib-compress');
grunt.registerTask('default', ['concat', 'uglify', 'copy', 'compress']);
};
module.exports=函数(grunt){
grunt.initConfig({
元:{
横幅:'\
/*!-v-\n\
*\n\
*/\n\n',
生成日期:“”,
build_num:process.env.build_NUMBER | | 0,//Jenkins build NUMBER(如果可用)
版本字符串:'-',
dist_dir:'dist/'
},
pkg:grunt.file.readJSON('package.json'),
康卡特:{
选项:{
彩旗:{
布洛克:对
},
过程:正确,
分隔符:'\n/*----*/\n',
横幅:“”
},
地区:{
src:[
“src/ViewUtility.js”,
“src/ViewClass.js”,
“src/ViewClass.js”,
“src/MarksClass.js”,
'src/ViewVersion.js'],
dest:'build/View.js'
}
},
丑陋的:{
选项:{
裂口:{
除了:['jQuery','Hammer']
},
横幅:“”
},
地区:{
src:“”,
dest:'build/View.min.js'
}
},
副本:{
选项:{
processContent:true
},
地区:{
档案:[
{expand:true,cwd:'build/',src:['**',dest:'/view/'},
{expand:true,cwd:'src/',src:['View-tp.js'],dest:'/View/'},
{expand:true,cwd:'src/',src:['plugin.json'],dest:'/'}
]
}
},
压缩:{
地区:{
选项:{
存档:'查看'+'.'+'.zip'
},
是的,
cwd:'dist/',
src:['***']
}
}
});
grunt.loadNpmTasks(“grunt-contrib-uglify”);
grunt.loadNpmTasks(“grunt-contrib-concat”);
grunt.loadNpmTasks('grunt-contrib-copy');
grunt.loadNpmTasks('grunt-contrib-compress');
registerTask('default',['concat','uglify','copy','compress']);
};
上面的processContent不起作用。请建议解决方案。processContent是一种函数类型。见文件:
试试这样的
processContent: function(content, srcpath) {
content = content.replace(/^[\x20\t]+/mg, '').replace(/[\x20\t]+$/mg, '');
content = content.replace(/^[\r\n]+/, '').replace(/[\r\n]+$/, '');
return content;
}
options.processContent
属性实际上是一个函数。你可以很容易地把它和内置的连接起来
这段代码完成了你的
技巧
grunt.initConfig({
pkg: grunt.file.readJSON("package.json"),
distdir: 'dist',
srcdir: 'src',
copy: {
index: {
options: {
processContent: function (content, srcpath) {
return grunt.template.process(content);
}
},
src: '<%= srcdir %>/index.html',
dest: '<%= distdir %>/index.html'
}
}
});
grunt.initConfig({
pkg:grunt.file.readJSON(“package.json”),
distdir:'dist',
srcdir:'src',
副本:{
索引:{
选项:{
processContent:函数(内容,srcpath){
返回grunt.template.process(内容);
}
},
src:“/index.html”,
dest:“/index.html”
}
}
});
谢谢。是否可以从processContent调用“标准”模板替换函数?感谢您的示例@A。这让我在不到一分钟的时间内启动并运行。自grunt contrib copy的0.5.0版以来,processContent
选项被重命名为process
。
grunt.initConfig({
pkg: grunt.file.readJSON("package.json"),
distdir: 'dist',
srcdir: 'src',
copy: {
index: {
options: {
processContent: function (content, srcpath) {
return grunt.template.process(content);
}
},
src: '<%= srcdir %>/index.html',
dest: '<%= distdir %>/index.html'
}
}
});