よくある質問
Gruntをインストールするには?
一般的なインストール手順については、はじめにガイドをお読みください。それでも不明な点がある場合は、包括的なGruntのインストールガイドをお読みください。
開発中の機能「X」はいつ使用できますか?
公開済みと未公開の開発版Gruntの両方のインストールについては、Gruntのインストールガイドで説明しています。
GruntはWindowsで動作しますか?
GruntはWindowsでも問題なく動作します。Node.jsとnpmはどちらもWindowsで問題なく動作するためです。問題になるのは通常Cygwinで、古いバージョンのNode.jsがバンドルされているためです。
この問題を回避する最善の方法は、msysGitインストーラーを使用してgit
バイナリをインストールし、Node.jsインストーラーを使用してnode
とnpm
バイナリをインストールし、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:001
、bar:001
、baz: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.json
とnode_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 $*