为什么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" } }
这里是完整的错误logging。
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 npm@1.2.4 3 info using node@v0.8.18 4 verbose read json /Users/Keva161/Documents/Web Dev/Webapps/Node/btask/package.json 5 verbose run-script [ 'pregrunt', 'grunt', 'postgrunt' ] 6 info pregrunt btask@0.0.1 7 info grunt btask@0.0.1 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 btask@0.0.1 Failed to exec grunt script 12 error btask@0.0.1 grunt: `node_modules/.bin/grunt` 12 error `sh "-c" "node_modules/.bin/grunt"` failed with 2 13 error Failed at the btask@0.0.1 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 ]
你正在讨论的教程使用grunt 0.3。 Grunt已经更新,如果你在你的package.json文件中使用“grunt”:“latest”,那么默认情况下你会得到grunt 0.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
- 更改
grunt.registerTask('default', 'exec copy-require');
在Gruntfile.js中grunt.registerTask('default', ['exec','copy-require']);
- 像往常一样在命令行中运行
npm run-script grunt
。 事情应该现在正常工作。
你将得到一个build立目录与r.js构build。
如果仍然无法通过上述步骤使其工作,可以在package.json文件中将grunt: "latest"
更改为grunt : "0.3"
,然后在shell中运行npm install
。
arunkjn的回答将解决问题。 虽然按照教程的意图,作者并不想在全球安装grunt,这也是我所要做的。 感谢arunkjn,我想你也可以:
- 通过
npm install grunt-cli
在本地npm install grunt-cli
- 将根目录下的grunt.js重命名为Gruntfile.js
- 更改
grunt.registerTask('default', 'exec copy-require');
在Gruntfile.js中grunt.registerTask('default', ['exec','copy-require']);
做npm run-script grunt
再次npm run-script grunt
,它应该工作。
我一直在使用grunt和npm一段时间,而我从来没有使用run_script
。 也许试试这个?
scripts
部分通常是运行在远程服务器上(即Heroku或Travis)
删除scripts
块。
然后做
npm install -g grunt
此后可能不得不重新启动terminal。
cd myproject npm install grunt mytask