0

我已经使用 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 文件,但我不知道如何编辑我的原始任务来实现这一点。任何帮助或提示表示赞赏,谢谢!

4

1 回答 1

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 的各种文件 api 来做到这一点......

于 2013-05-05T16:39:09.267 回答