13

要连接两个文件,它看起来像这样:

  concat: {
    src: ['common.js','js/app.js'],
    dest: 'assets/js/app.js'
  }

如果我想将整个文件夹的文件合并为一个,它看起来像这样:

  concat: {
    src: ['dev/*.js','],
    dest: 'prod/js/app.js'
  }

但是假设我有一个文件要连接到 10 或 20 个其他文件,并且我希望它们分别连接?换句话说,这就是我要找的东西:

A.js + B.js = AB.js
A.js + C.js = AC.js
A.js + D.js = AD.js
A.js + E.js = AE.js

等等......更具体地说,我可以弄清楚如何按照描述一个一个地连接文件,但我想弄清楚如何从示例中指定 A.js,并将其连接到任何文件中指定的路径。所以我想要的是:

A.js + dev/*.js = AB.js, AC.js, AD.js, AE.js ...

在伪代码中,这就是我想要的:

  concat: {
    src: ['common.js', 'dev/*.js','], // common.js gets concatenated to each file in this directory
    dest: 'prod/js/*.js' // each file in src gets saved separately in dest 
  }

我会很感激任何帮助,我很难找到有关如何执行此操作的信息

4

1 回答 1

19

Grunt 的内置concat任务(我建议您查看源代码)不支持类似的东西dest: 'prod/js/*.js',您必须分别指定每个输出目标,这在您的情况下是多余的。

您最好的选择是编写自己的代码(也许将其包装在您的自定义任务中),这很简单。这是一个简单的包装多任务。不要承诺它是强大且安全的使用:)

  grunt.registerMultiTask('wrap', 'Wraps source files with specified header and footer', function() {
        var data = this.data,
            path = require('path'),
            dest = grunt.template.process(data.dest),
            files = grunt.file.expandFiles(this.file.src),
            header = grunt.file.read(grunt.template.process(data.header)),
            footer = grunt.file.read(grunt.template.process(data.footer)),
            sep = grunt.utils.linefeed; 

        files.forEach(function(f) {
            var p = dest + '/' + path.basename(f),
                contents = grunt.file.read(f);

            grunt.file.write(p, header + sep + contents + sep + footer);
            grunt.log.writeln('File "' + p + '" created.');
        });
  });

用这样的配置喂它:

wrap: {
    html: {
        header: '<%= project.partials %>/head.html',
        footer: '<%= project.partials %>/footer.html',
        src: [
            '<%= project.pages %>/index.html',
            '<%= project.pages %>/about.html',
            '<%= project.pages %>/blog.html'
        ],
        dest: '.'   // destination *directory*, probably better than specifying same file names twice
    }
}

以防万一我也更新了你的小提琴:http: //jsfiddle.net/dipish/hKkGX/

于 2012-10-05T15:56:02.380 回答