13

2つのファイルを連結すると、次のようになります。

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

また、ファイルのフォルダー全体を1つにまとめたい場合は、次のようになります。

  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

など...具体的には、説明したようにファイルを1つずつ連結する方法を理解できますが、例から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タスク(ソースbtwを確認することをお勧めします)は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 に答える