我已经使用gruntjs和grunt-contrib-jst编写了一个任务来预编译我的所有模板文件(存储在“coffee”文件夹中)并将它们连接在一个单独的javascript文件AppTemplate.js中。
jst: {
compile: {
options: {
templateSettings: {
"variable" : "data"
},
prettify: true,
processName: function(filename) {
return name = filename.replace('coffee/','');
}
},
files: {
"js/AppTemplates.js": ["coffee/**/*.html"]
}
}
},
到目前为止,一切都运行良好,无论如何,因为模板的数量正在增长,我想将模板拆分为按其所属模块分组的独立文件。
我的文件夹结构如下:
|--modules
|--user
|--templates
* html template files *
user_module.coffee
|--post
|--templates
* html template files *
post_module.coffee
依旧......
我只是想在每个模板文件夹中创建一个template.js文件,但我不知道如何编辑我的原始任务来实现它。任何帮助或提示表示赞赏,谢谢!
答案 0 :(得分:2)
您可以直接定义每个目录 - 例如:
files: {
'public/js/allfiles.js': [ 'public/js/*.js' ],
'public/js/lib/allfiles.js': [ 'public/js/lib/*.js' ]
}
或者您可以做一些更动态的事情,以便自动拾取每个新模块目录。
例如:
module.exports = function( grunt ) {
"use strict";
var util = require('util');
var path = require('path');
grunt.initConfig({
pkg: grunt.file.readJSON("package.json"),
buildFiles: {},
concat: {
options: {
separator: ';'
},
dist: {
files: '<%= buildFiles %>'
}
},
});
grunt.loadNpmTasks('grunt-contrib-concat');
grunt.registerTask('default', ['buildList', 'concat']);
grunt.registerTask('buildList', function() {
var dirs = grunt.file.expand({filter: 'isDirectory'}, ['./public/js/**']);
var files = grunt.config.data.buildFiles;
dirs.forEach(function(val) {
files[path.join(val, 'allfiles.js')] = [path.join(val, '*.js')];
});
});
};
此代码基本上只构建与初始选项相同的静态配置。
输出:
Running "buildList" task
Running "concat:dist" (concat) task
File "public/js/allfiles.js" created.
File "public/js/lib/allfiles.js" created.
注意:可能有更好的方法来使用grunts各种文件apis来执行此操作...