1

プロジェクトの 1 つでタスクを実行していgrunt concatますが、次のようになります。

/**
 * Concatenate | Dependencies Scripts
 */

concat: {
    dependencies: {
        files: {        
            "./Ditcoop/js/plugins.min.js": ["./Ditcoop/js/vendor/**/*.min.js", "!./Ditcoop/js/vendor/modernizr/*.js", "!./Ditcoop/js/vendor/jquery/*.js"],
            "./Global/js/plugins.min.js": ["./Global/js/vendor/**/*.min.js", "!./Global/js/vendor/modernizr/*.js", "!./Global/js/vendor/jquery/*.js"],
            "./Webshop/js/plugins.min.js": ["./Webshop/js/vendor/**/*.min.js", "!./Webshop/js/vendor/modernizr/*.js", "!./Webshop/js/vendor/jquery/*.js"]
        }
    }
}

私の質問は、各ルート フォルダーを指定することなく、どうにかしてそれをより動的にすることができるかどうかです。私は次のようなことを考えていました:

    concat: {
    dependencies: {
        files: {        
            "./*/js/plugins.min.js": ["./*/js/vendor/**/*.min.js", "!./*/js/vendor/modernizr/*.js", "!./*/js/vendor/jquery/*.js"],
        }
    }
}

この方法ではできないと確信していますが、expandオプションを使用することはできます。どのように使用できるかがわからないため、正しいルートフォルダーの下で実行できるため、同じ宛先を作成しませんconcatを実行する回数だけファイルします。

4

1 に答える 1

3

Gruntfilesはjavascriptであることを常に覚えておいてください:)

grunt.initConfig({
  concat: {
    dependencies: {
      files: (function() {
        var files = Object.create(null);
        grunt.file.expand({filter: 'isDirectory'}, '*').forEach(function(dir) {
          files[dir + '/js/plugins.min.js'] = [
            dir + '/js/vendor/**/*.min.js',
            '!' + dir + '/js/vendor/modernizr/*.js',
            '!' + dir + '/js/vendor/jquery/*.js'
          ];
        });
        return files;
      }()),
    },
  },
});

ただし、依存関係処理ロジックがこれほど複雑な場合は、browserify や requirejs などのモジュール ローダーの使用を検討することをお勧めします。concat タスクは、単純なファイルを結合するためだけのものです。

于 2013-08-01T16:44:50.587 に答える