web-dev-qa-db-ja.com

なぜGruntは失敗するのですか?

npm run-script gruntを実行した後、奇妙なエラーが発生し、node_modules/.bin/gruntが失敗したことが通知されます。

私はBackboneにかなり新しいチュートリアルをフォローしています( http://dailyjs.com/2012/11/29/backbone-tutorial-1/ )、

これが私のpackage.jsonファイルです。

{
  "name": "btask"
, "version": "0.0.1"
, "private": true
, "dependencies": {
    "requirejs": "latest"
  , "connect": "2.7.0"
  }
, "devDependencies": {
    "mocha": "latest"
  , "chai": "latest"
  , "grunt": "latest"
  , "grunt-exec": "latest"
  }
, "scripts": {
    "grunt": "node_modules/.bin/grunt"
  }
}

そして、これがエラーの完全なトランスクリプトです。

0 info it worked if it ends with ok
1 verbose cli [ 'node',
1 verbose cli   '/Users/Keva161/.nvm/v0.8.18/bin/npm',
1 verbose cli   'run-script',
1 verbose cli   'grunt' ]
2 info using [email protected]
3 info using [email protected]
4 verbose read json /Users/Keva161/Documents/Web Dev/Webapps/Node/btask/package.json
5 verbose run-script [ 'pregrunt', 'grunt', 'postgrunt' ]
6 info pregrunt [email protected]
7 info grunt [email protected]
8 verbose unsafe-perm in lifecycle true
9 silly exec sh "-c" "node_modules/.bin/grunt"
10 silly sh,-c,node_modules/.bin/grunt,/Users/Keva161/Documents/Web Dev/Webapps/Node/btask spawning
11 info [email protected] Failed to exec grunt script
12 error [email protected] grunt: `node_modules/.bin/grunt`
12 error `sh "-c" "node_modules/.bin/grunt"` failed with 2
13 error Failed at the [email protected] grunt script.
13 error This is most likely a problem with the btask package,
13 error not with npm itself.
13 error Tell the author that this fails on your system:
13 error     node_modules/.bin/grunt
13 error You can get their info via:
13 error     npm owner ls btask
13 error There is likely additional logging output above.
14 error System Darwin 12.2.1
15 error command "node" "/Users/Keva161/.nvm/v0.8.18/bin/npm" "run-script" "grunt"
16 error cwd /Users/Keva161/Documents/Web Dev/Webapps/Node/btask
17 error node -v v0.8.18
18 error npm -v 1.2.4
19 error code ELIFECYCLE
20 verbose exit [ 1, true ]
12
Keva161

あなたが話しているチュートリアルはgrunt0.3を使用しています。それ以来、Gruntは更新されており、package.jsonファイルで "grunt": "latest"を使用すると、デフォルトでgrunt0.4が取得されます。

移行ガイド を実行して、機能させることができます。

チュートリアルでうなり声を上げるために、これを行うことができます-

  • Grunt-cliをグローバルにインストールするnpm install -g grunt-cli
  • Grunt-initをグローバルにインストールしますnpm install -g grunt-init
  • Gruntをローカルにインストールします(チュートリアルに従っている場合はすでにインストールされています)
  • package.json"grunt": "node_modules\\.bin\\grunt""grunt": "grunt"に変更します
  • ルートディレクトリのgrunt.jsの名前をGruntfile.jsに変更します
  • Gruntfile.jsgrunt.registerTask('default', 'exec copy-require');grunt.registerTask('default', ['exec','copy-require']);に変更します
  • コマンドラインで通常どおりnpm run-script gruntを実行します。これで問題なく動作するはずです。

R.jsビルドでビルドディレクトリを取得します。

それでも上記の手順でうまく機能しない場合は、package.jsonファイルでgrunt: "latest"grunt : "0.3"に変更し、シェルでnpm installを実行できます。

22
arunkjn

arunkjn の答えは問題を解決します。チュートリアルの意図に従って、作者はgruntをグローバルにインストールしたくありませんでした。これも私が目指していることです。 arunkjnのおかげで、次のこともできると思いました。

  • _npm install grunt-cli_によってgrunt-cliをローカルにインストールします
  • ルートディレクトリのgrunt.jsの名前をGruntfile.jsに変更します
  • Gruntfile.jsのgrunt.registerTask('default', 'exec copy-require');grunt.registerTask('default', ['exec','copy-require']);に変更します

そして、もう一度_npm run-script grunt_を実行すると、機能するはずです。

5
owyongsk

私はしばらくの間gruntとnpmを使用していますが、run_scriptを使用したことはありません。多分これを試してみませんか?

scriptsの部分は通常、リモートサーバー(HerokuまたはTravisなど)で実行するためのものです。


scriptsブロックを削除します。

その後、

npm install -g grunt

この後、ターミナルを再起動する必要がある場合があります。

cd myproject
npm install
grunt mytask
2
Jon Jaques