Black Lives Matter

よくある質問

Gruntをインストールするには?

一般的なインストール手順については、はじめにガイドをお読みください。それでも不明な点がある場合は、包括的なGruntのインストールガイドをお読みください。

開発中の機能「X」はいつ使用できますか?

公開済みと未公開の開発版Gruntの両方のインストールについては、Gruntのインストールガイドで説明しています。

GruntはWindowsで動作しますか?

GruntはWindowsでも問題なく動作します。Node.jsnpmはどちらもWindowsで問題なく動作するためです。問題になるのは通常Cygwinで、古いバージョンのNode.jsがバンドルされているためです。

この問題を回避する最善の方法は、msysGitインストーラーを使用してgitバイナリをインストールし、Node.jsインストーラーを使用してnodenpmバイナリをインストールし、Cygwinではなく、組み込みのWindowsコマンドプロンプトまたはPowerShellを使用することです。

非同期タスクが完了しないのはなぜですか?

これは、タスクが非同期であることをGruntに伝えるthis.asyncメソッドを呼び出すのを忘れていることが原因である可能性があります。簡潔にするため、Gruntは同期的なコーディングスタイルを使用していますが、タスク本体内でthis.async()を呼び出すことで非同期に切り替えることができます。

done()関数にfalseを渡すと、Gruntはタスクが失敗したことを認識します。

例:

grunt.registerTask('asyncme', 'My asynchronous task.', function() {
  var done = this.async();
  doSomethingAsync(done);
});

シェルタブの自動補完を有効にするには?

Gruntのbashタブ自動補完を有効にするには、次の行を~/.bashrcファイルに追加します。

eval "$(grunt --completion=bash)"

これは、Gruntがnpm install -g gruntでグローバルにインストールされていることを前提としています。現在、サポートされているシェルはbashのみです。

複数のタスク間でパラメーターを共有するには?

各タスクはそれぞれ独自のパラメーターを受け入れることができますが、複数のタスク間でパラメーターを共有するためのいくつかのオプションがあります。

「動的」エイリアスタスク

これは、複数のタスク間でパラメーターを共有するための推奨方法です。

エイリアスタスクは必ずしも単純ではありませんが、通常のタスクはgrunt.task.runを使用して、効果的に「動的」エイリアスタスクとして機能させることができます。この例では、コマンドラインでgrunt build:001を実行すると、foo:001bar:001baz:001タスクが実行されます。

grunt.registerTask('build', 'Run all my build tasks.', function(n) {
  if (n == null) {
    grunt.warn('Build num must be specified, like build:001.');
  }
  grunt.task.run('foo:' + n, 'bar:' + n, 'baz:' + n);
});

-- オプション

複数のタスク間でパラメーターを共有する別の方法は、grunt.optionを使用することです。この例では、コマンドラインでgrunt deploy --target=stagingを実行すると、grunt.option('target')"staging"を返します。

grunt.registerTask('upload', 'Upload code to specified target.', function() {
  var target = grunt.option('target');
  // do something useful with target here
});
grunt.registerTask('deploy', ['validate', 'upload']);

ブール値のオプションは、値なしでキーだけを使用して指定できます。たとえば、コマンドラインでgrunt deploy --stagingを実行すると、grunt.option('staging')trueを返します。

グローバル変数と設定

その他の場合、設定値またはグローバル値を設定する方法を公開したい場合があります。そのような場合は、引数をグローバル変数または設定値として設定するタスクを登録します。

この例では、コマンドラインでgrunt set_global:name:peter set_config:target:staging deployを実行すると、global.name"peter"になり、grunt.config('target')"staging"を返します。おそらく、deployタスクはこれらの値を使用します。

grunt.registerTask('set_global', 'Set a global variable.', function(name, val) {
  global[name] = val;
});

grunt.registerTask('set_config', 'Set a config property.', function(name, val) {
  grunt.config.set(name, val);
});

エラー発生時にスタックトレースを取得するには?

スタックトレースを表示するには、--stackオプションを使用します。例:grunt task --stack

「Maximum call stack size exceeded」エラーが発生するのはなぜですか?

おそらく、通常のタスクと同じ名前のエイリアスタスクを作成したためです。例:grunt.registerTask('uglify', ['uglify:my_target']);grunt.registerTask('myUglify', ['uglify:my_target']);にする必要があります。

不要なプラグインをアンインストールまたは削除するには?

少なくとも2つの方法があります。1つの方法はnpm uninstall [GRUNT_PLUGIN] --save-devを使用することです。これにより、プラグインがpackage.jsonnode_modulesから削除されます。また、package.jsonから不要な依存関係を手動で削除し、npm pruneを実行することもできます。

エラー「npmエラー:互換性のあるバージョンが見つかりません」

NPMとNode.JSの最新安定版がインストールされていることを確認してください。


Grunt 0.3に関する質問

WindowsでGrunt 0.3を使用している場合、Gruntを実行しようとするとJSエディターが開くのはなぜですか?

Gruntfileと同じディレクトリにいる場合、Windowsはgruntと入力するとそのファイルを実行しようとします。そのため、代わりにgrunt.cmdと入力する必要があります。

別の方法として、この手順に従って、Gruntマクロを作成するためにDOSKEYコマンドを使用することもできます。これにより、grunt.cmdの代わりにgruntを使用できます。

使用するDOSKEYコマンドは次のとおりです。

DOSKEY grunt=grunt.cmd $*