Gruntで処理対象のファイルを動的に指定する方法

Configuring tasks – Grunt: The JavaScript Task Runner

1ファイルずつ個別で指定する場合(対象ファイル数が少ない場合など)

grunt.initConfig({
  uglify: {
    static_mappings: {
      files: [
        {src: 'lib/a.js', dest: 'build/a.min.js'},
        {src: 'lib/b.js', dest: 'build/b.min.js'},
        {src: 'lib/subdir/c.js', dest: 'build/subdir/c.min.js'},
        {src: 'lib/subdir/d.js', dest: 'build/subdir/d.min.js'},
      ]
    }
  }
});

指定フォルダ配下など、動的に指定する場合。filesの指定は配列でないといけないらしく、files: の後に[]を入れずにハマってしまった…

grunt.initConfig({
  uglify: {
    dynamic_mappings: {
      files: [
        {
          expand: true,     // true = 動的に指定する宣言
          cwd: 'lib/',      // 処理対象フォルダをgruntfileからの相対パスで指定
          src: ['**/*.js'], // 処理対象ファイルをパターンで指定。この場合はフォルダcwdで指定したフォルダ配下のjs全て
          dest: 'build/',   // 出力フォルダをgruntfileからの相対パスで指定
          ext: '.min.js',   // 出力ファイルの拡張子
          extDot: 'first'   // 出力ファイル名を決定する拡張子の位置('first' or 'last')。元ファイルが'foo.a.b.js'の場合、'first'なら'foo.min.js'、'last'なら'foo.a.b.min.js'となる
        }
      ]
    }
  }
});

これをCoffee Scriptで指定するとこんな感じ。

grunt.initConfig
  uglify:
    dynamic_mappings:
      files: [
        expand: true
        cwd: 'lib/'
        src: ['**/*.js']
        dest: 'build/'
        ext: '.min.js'
        extDot: 'first'
      ]

ついでに、Coffee Scriptで複数のフォルダを指定するならこう。Coffee Scriptに慣れないのでこれまたハマってしまった。配列の中にオブジェクトを記載するなら、明示的に{}をつけてあげた方がいいみたい(つけなければならない?)

grunt.initConfig
  uglify:
    dynamic_mappings:
      files: [
        {
          expand: true
          cwd: 'lib/'
          src: ['**/*.js']
          dest: 'build/'
          ext: '.min.js'
          extDot: 'first'
        },
        {
          expand: true
          cwd: 'lib2/'
          src: ['**/*.js']
          dest: 'build2/'
          ext: '.min.js'
          extDot: 'first'
        },
      ]

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です