17

我有一个项目,其中有几个子文件夹,其中包含我要连接的 JavaScript 文件。配置它们的正确方法是什么?

例如。

来源:/modules/$modulename/js/*.js(几个文件) dest:/modules/$modulename/js/compiled.js

所以我想要做的是将未知/未配置的子文件夹($modulename)计数的js文件编译到每个子文件夹一个文件中。

这可能吗?


以下函数(根据 hereandnow78 的说明构建)完成了这项工作:

grunt.registerTask('preparemodulejs', 'iterates over all module directories and compiles modules js files', function() {

    // read all subdirectories from your modules folder
    grunt.file.expand('./modules/*').forEach(function(dir){

        // get the current concat config
        var concat = grunt.config.get('concat') || {};

        // set the config for this modulename-directory
        concat[dir] = {
            src: [dir + '/js/*.js', '!' + dir + '/js/compiled.js'],
            dest: dir + '/js/compiled.js'
        };

        // save the new concat config
        grunt.config.set('concat', concat);

    });

});

之后,我将 preparemodulejs 放在默认配置中的 concat 作业之前。

4

1 回答 1

32

您可能需要编写自己的任务,在其中迭代您的子文件夹,并动态附加到您的 concat 配置。

grunt.registerTask("your-task-name", "your description", function() {

  // read all subdirectories from your modules folder
  grunt.file.expand("./modules/*").forEach(function (dir) {

    // get the current concat config
    var concat = grunt.config.get('concat') || {};

    // set the config for this modulename-directory
    concat[dir] = {
     src: ['/modules/' + dir + '/js/*.js', '!/modules/' + dir + '/js/compiled.js'],
     dest: '/modules/' + dir + '/js/compiled.js'
    };

    // save the new concat configuration
    grunt.config.set('concat', concat);
  });
  // when finished run the concatinations
  grunt.task.run('concat');
});

运行这个:

$ grunt your-task-name

此代码未经测试,但我认为它应该可以完成您的工作。

提示:如果你想保持你的 gruntfile 很小,你可以把这个代码放到一个外部文件中并包含在你的 gruntfile 中,例如把它放到一个任务目录中的文件中:

module.exports = function(grunt) {
  grunt.registerTask("your-task-name", "your description", function() {
    ...
  });
};

并加载到您的 gruntfile 中:

grunt.loadTasks("./tasks");
于 2013-06-11T07:43:49.237 回答