【问题标题】:Why does Grunt fail?为什么 Grunt 会失败?
【发布时间】:2013-01-19 16:33:37
【问题描述】:

我在运行 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 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 ]

【问题讨论】:

  • 您在 Windows 上吗?我在使用该配置的 Windows 上运行 grunt 时遇到问题...
  • osx 上没有即时消息:/ 我也尝试全局安装 grunt,但同样的错误
  • 我不认为这是你的情况,但我不得不将 package.json 的“脚本”部分更改为在 Windows 上工作:"grunt": "node_modules\\.bin\\grunt"

标签: node.js backbone.js gruntjs


【解决方案1】:

我已经使用 grunt 和 npm 有一段时间了,但我从未使用过 run_script。试试这个?

scripts 部分通常用于在远程服务器(即 Heroku 或 Travis)上运行


删除scripts 块。

那就做吧

npm install -g grunt

之后可能需要重新启动终端。

cd myproject
npm install
grunt mytask

【讨论】:

    【解决方案2】:

    您正在谈论的教程使用 grunt 0.3。 从那时起 Grunt 已更新,如果您在 package.json 文件中使用 "grunt": "latest",那么默认情况下您将获得 grunt 0.4。

    您可以通过migration guide 进行操作。

    为了让本教程的工作更加繁重,您可以这样做 -

    • 全局安装 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.js 中的 grunt.registerTask('default', 'exec copy-require'); 更改为 grunt.registerTask('default', ['exec','copy-require']);
    • 像往常一样在命令行中运行npm run-script grunt。现在应该可以正常工作了。

    您将获得一个带有 r.js 构建的构建目录。

    如果您仍然无法通过上述步骤使其正常工作,您可以在 package.json 文件中将 grunt: "latest" 更改为 grunt : "0.3" 并在 shell 中运行 npm install

    【讨论】:

    • 什么是grunt-init,为什么需要它?
    • Grunt init 是一个自动生成 gruntfile 和其他项目结构的脚手架工具。 (如约曼)。这根本没有必要。更多信息在这里gruntjs.com/project-scaffolding
    • 全局 grunt 根在哪里?
    • @Omar 取决于全局 npm 依赖项的安装位置。您可以在 bash 中执行 which grunt 以找出答案
    【解决方案3】:

    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,它应该可以工作。

    【讨论】:

    • Grunt-cligrunt-init 旨在全局安装。有关详细信息,请参阅第 2 点 here。在我上面的回答中,我已经明确提到你必须在本地安装 grunt 才能工作(这就是作者打算做的)。
    • 是的,我知道他们应该是全球性的。但是教程的作者希望一切都是本地的,只是我想的他的风格。只是一种偏好。
    • 总的来说,我很同情作者,因为我喜欢在本地使用工具,除非我知道我会经常使用它。我认为本地安装符合本教程的精神 - 全局安装 then 本地安装有点违背了目的。为此 +1 和一个简单的答案。
    • 看来您还需要将脚本部分从 "scripts": { "grunt": "node_modules/.bin/grunt" } 更改为 "scripts": { "grunt": "node_modules/grunt-cli/bin" }
    猜你喜欢
    • 2016-11-13
    • 2016-04-11
    • 2021-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多