2015-12-31 10 views
5

は私が探しているものの例である:Gruntタスク内のJavaScript関数にGrunt変数を渡すことはできますか?ここ

module.exports = function(grunt) { 
    grunt.initConfig({ 

    config: grunt.file.readYAML('_config.yml'), 
    // example variable: <%= config.scripts %> 

    copy: { 
     scripts: (function() { 
     if (config.scripts === true) { // I want to target <%= config.scripts %> 
      return { 
      expand: true, 
      cwd: '<%= input %>/_assets/js/', 
      src: '**/*.js', 
      dest: '<%= output %>/assets/js/' 
      }; 
     } else { 
      return { 
      // do nothing 
      }; 
     } 
     })() 
    } 

    }); 
}; 

私はうなり声が「grunt.file.readJSON」を使用してファイル内からデータを読み、[次でそのデータが利用可能なことを知って変数のタイプ '<%= pkg.value%>'になります。

私がしたいことは、JSONファイル内の変数に基づいてif/elseオプションを指定してタスクを作成することです。私が不明な点は、Grunt変数 '<%= pkg.value%>'をJavaScriptのif文に理解する方法で渡す方法です。私は '<%=%>'を使って同じグランツ形式で渡してみただけでなく、その部分を取り除いて 'pkg.value'を渡してみましたが、どちらもうまくいかないようです。

これを行うことができるかどうかについて、誰かがどのように光を当てることができれば、私は非常に感謝します。ありがとう!直接面倒を割り当てるの代わりに

test.json

{ 
    "fruit": "apple" 
} 

Gruntfile.js

module.exports = function(grunt) { 

    grunt.initConfig({ 
    ... 
    }) 

    grunt.registerTask('sample-task', function() { 
    var test = grunt.file.readJSON('./test.json'); 

    if (test.fruit === 'apple') { 
     // do this one thing 
    } else { 
     // do something else 
    } 

    }); 

    grunt.registerTask('default', ['sample-task']); 
}; 
+1

不快な仕事の具体例を教えてください。 (コメントを 'do something'をタスクに置き換えてください) –

+0

上記の編集例を参照してください。 –

+0

ありがとうございます。私は答えを掲示する。それを試してみてください。 –

答えて

1

私はより多くの時間を持っているとき、私はおそらくいくつかの追加のアイデアに見ていきますが、ここで提供アイデアに基づいて、これは私が今のところ一緒に行くことになったものです。

module.exports = function(grunt) { 

    var config = grunt.file.readYAML('_config.yml'); 

    grunt.initConfig({ 

    copy: { 
     scripts: (function() { 
     if (config.scripts) { 
      return { 
      expand: true, 
      cwd: 'input/_assets/js/', 
      src: '**/*.js', 
      dest: 'output/assets/js/' 
      }; 
     } else { 
      return { 
      // do nothing 
      }; 
     } 
     })() 
    } 

    }); 
}; 

ありがとうございました。

0

うなり声は、あなたがこのようなものを使用することができ、ファイルを読み込むためのAPIを、持っていますconfig内のconfig属性では、変数(gruntConfig)に格納します。これで、次のコードでアクセスできます。

module.exports = function(grunt) { 
    // store your grunt config 
    var gruntConfig = grunt.file.readYAML('_config.yml'); 
    // init `script` with an empty object 
    var script = {}; 
    if (gruntConfig.script) { 
     script = { 
      expand: true, 
      cwd: '<%= input %>/_assets/js/', 
      src: '**/*.js', 
      dest: '<%= output %>/assets/js/' 
     }; 
    } 
    // Init Grunt configuration 
    grunt.initConfig({ 
     config: gruntConfig, 
     copy: { 
      scripts: script 
     } 
    }); 
}; 
+0

「test.json」ファイルの変数がtrueに設定されている場合、taskAを実行している場合、またはfalseの場合はtaskBを実行すると、これをどのように使用して共有することができますか?私はまた、参考のために元の質問の私の例を更新しました。ありがとう! –

+0

そこに行く! JSONオブジェクトを取得するだけで、通常のJSオブジェクトとして扱うことができます – alexdmejias

1

関連する問題