【问题标题】:How can I install the grunt-cli without getting errors?如何安装 grunt-cli 而不会出错?
【发布时间】:2013-12-12 22:29:43
【问题描述】:

受到 Chris Coyier 的 post 的启发,我决定试试 grunt。但是我在设置时遇到了很大的问题。

首先,我安装了 Node.js。

然后我在我的项目根目录中添加了一个 package.json 文件,其中包括:

{
  "name": "example-project",
  "version": "0.1.0",
  "devDependencies": {
    "grunt": "~0.4.1"
  }
}

然后我跑了npm install

最后,我跑了npm install -g grunt-cli

返回大量错误:

npm http GET https://registry.npmjs.org/grunt-cli
npm http 304 https://registry.npmjs.org/grunt-cli
npm ERR! Error: EACCES, mkdir '/usr/local/lib/node_modules/grunt-cli'
npm ERR!  { [Error: EACCES, mkdir '/usr/local/lib/node_modules/grunt-cli']
npm ERR!   errno: 3,
npm ERR!   code: 'EACCES',
npm ERR!   path: '/usr/local/lib/node_modules/grunt-cli',
npm ERR!   fstream_type: 'Directory',
npm ERR!   fstream_path: '/usr/local/lib/node_modules/grunt-cli',
npm ERR!   fstream_class: 'DirWriter',
npm ERR!   fstream_stack: 
npm ERR!    [ '/usr/local/lib/node_modules/npm/node_modules/fstream/lib/dir-writer.js:36:23',
npm ERR!      '/usr/local/lib/node_modules/npm/node_modules/mkdirp/index.js:37:53',
npm ERR!      'Object.oncomplete (fs.js:107:15)' ] }
npm ERR! 
npm ERR! Please try running this command again as root/Administrator.

npm ERR! System Darwin 11.4.2
npm ERR! command "node" "/usr/local/bin/npm" "install" "-g" "grunt-cli"
npm ERR! cwd /Users/bryce/repo
npm ERR! node -v v0.10.23
npm ERR! npm -v 1.3.17
npm ERR! path /usr/local/lib/node_modules/grunt-cli
npm ERR! fstream_path /usr/local/lib/node_modules/grunt-cli
npm ERR! fstream_type Directory
npm ERR! fstream_class DirWriter
npm ERR! code EACCES
npm ERR! errno 3
npm ERR! stack Error: EACCES, mkdir '/usr/local/lib/node_modules/grunt-cli'
npm ERR! fstream_stack /usr/local/lib/node_modules/npm/node_modules/fstream/lib/dir-writer.js:36:23
npm ERR! fstream_stack /usr/local/lib/node_modules/npm/node_modules/mkdirp/index.js:37:53
npm ERR! fstream_stack Object.oncomplete (fs.js:107:15)
npm ERR! 
npm ERR! Additional logging details can be found in:
npm ERR!     /Users/bryce/repo/npm-debug.log
npm ERR! not ok code 0
Bryce:repo bryce$ npm install -g grunt-cli
npm http GET https://registry.npmjs.org/grunt-cli
npm http 304 https://registry.npmjs.org/grunt-cli
npm ERR! Error: EACCES, mkdir '/usr/local/lib/node_modules/grunt-cli'
npm ERR!  { [Error: EACCES, mkdir '/usr/local/lib/node_modules/grunt-cli']
npm ERR!   errno: 3,
npm ERR!   code: 'EACCES',
npm ERR!   path: '/usr/local/lib/node_modules/grunt-cli',
npm ERR!   fstream_type: 'Directory',
npm ERR!   fstream_path: '/usr/local/lib/node_modules/grunt-cli',
npm ERR!   fstream_class: 'DirWriter',
npm ERR!   fstream_stack: 
npm ERR!    [ '/usr/local/lib/node_modules/npm/node_modules/fstream/lib/dir-writer.js:36:23',
npm ERR!      '/usr/local/lib/node_modules/npm/node_modules/mkdirp/index.js:37:53',
npm ERR!      'Object.oncomplete (fs.js:107:15)' ] }
npm ERR! 
npm ERR! Please try running this command again as root/Administrator.

npm ERR! System Darwin 11.4.2
npm ERR! command "node" "/usr/local/bin/npm" "install" "-g" "grunt-cli"
npm ERR! cwd /Users/bryce/repo
npm ERR! node -v v0.10.23
npm ERR! npm -v 1.3.17
npm ERR! path /usr/local/lib/node_modules/grunt-cli
npm ERR! fstream_path /usr/local/lib/node_modules/grunt-cli
npm ERR! fstream_type Directory
npm ERR! fstream_class DirWriter
npm ERR! code EACCES
npm ERR! errno 3
npm ERR! stack Error: EACCES, mkdir '/usr/local/lib/node_modules/grunt-cli'
npm ERR! fstream_stack /usr/local/lib/node_modules/npm/node_modules/fstream/lib/dir-writer.js:36:23
npm ERR! fstream_stack /usr/local/lib/node_modules/npm/node_modules/mkdirp/index.js:37:53
npm ERR! fstream_stack Object.oncomplete (fs.js:107:15)
npm ERR! 
npm ERR! Additional logging details can be found in:
npm ERR!     /Users/bryce/repo/npm-debug.log
npm ERR! not ok code 0

我认为上述错误是我尝试运行grunt 时得到-bash: grunt: command not found 的原因

有人知道发生了什么吗?

【问题讨论】:

  • 你试过sudo吗?这也是stackoverflow.com/questions/18736943/… 的可能重复项
  • 你是对的。我不知道我怎么在谷歌搜索中没有看到这一点。非常感谢!
  • 您引用的问题中的问题有点不同,因为提问者也在使用 sudo,但答案正是我所需要的。发生这种情况时,正确的堆栈溢出协议是什么?删除问题?回答我自己的?
  • 回答问题总是一件好事。删除保留给无关或不正确的问题。
  • @Hugo 我知道,我在问 OP 他们是如何安装的。需要使用 sudo 表明他们没有使用 brew

标签: node.js bash gruntjs


【解决方案1】:

只需要添加“sudo”,因为默认情况下我没有安装 grunt-cli 的权限。一旦我运行以下命令并输入我的密码,它就会按预期工作。

sudo npm install -g grunt-cli

希望这对某人有所帮助!

【讨论】:

  • npm 不应使用 sudo 运行
  • @l19 使用 sudo 安装任何东西都会改变用户。显然 sudo npm 使用“nobody”用户。但是,您运行的任何其他程序都将以您的用户身份运行。如果“nobody”和您的用户之间存在权限差异,这可能会导致问题。这也意味着“没有人”可以以某种方式做一些你不能做的事情,这会带来更可怕的安全隐患……但既不存在也不存在。
  • sudo npm 最近破坏了服务器设置不正确的访问权限。 npm 不得(即正式,通过文档)以增加的权限运行。
【解决方案2】:

编辑: 下面引用的文章已经很老了,参考的是 pre-v0.3 Yikes! 目前,如果npmsudo 权限运行,它将在执行命令之前降级为nobody 用户。

根据npm 的维护者的说法,使用sudo 安装软件包被认为是不好的做法,因为您允许该软件包完全控制您的系统,并且您不能也不应该信任这些具有root 访问权限的软件包.

http://howtonode.org/introduction-to-npm

【讨论】:

  • 注意:以 root 身份安装(使用 sudo)一直是 recommended since NPM 0.3 (Feb 2011)。它将以“nobody”用户的身份运行它们。大多数相反的信息来自之前 0.1 和 0.2 的合并年份。
  • @JonathanLonowski - 我也在这篇文章之后发现了这些信息。最后,我仍然认为如果可以避免,不使用sudo 会更好。尤其是在 OSX 上。
【解决方案3】:

由于您不应该使用 sudo 安装 - 您将在安装软件包之前执行此操作,并且不再会遇到权限错误:

sudo chown -R $USER /usr/local

来源:https://howtonode.org/introduction-to-npm

【讨论】:

    【解决方案4】:

    我建议在您的项目中安装 grunt(而不是使用 -g 选项)。

    例如,要安装 Grunt 命令行工具,请使用:

    cd ~/path-to-my-project
    npm install grunt-cli --save-dev
    

    如果你想运行 grunt,那么你使用:

    cd ~/path-to-my-project
    ./node_modules/./bin/grunt
    

    通过在项目中安装 grunt-cli,您可以完全控制安装哪个版本,并且不必依赖不一致的 PATH 变量。

    【讨论】:

    • 不知道为什么,但对我来说,二进制文件位于 ./node_modules/.bin/grunt 而不是 ./bin。
    【解决方案5】:

    我也遇到了这个问题,在仔细阅读输出后,我意识到我安装的 node.js 版本与当前版本的 grunt-cli 不兼容。

    更新的 node.js 问题解决了。

    【讨论】:

      猜你喜欢
      • 2018-06-03
      • 2020-05-14
      • 2023-01-09
      • 2015-02-01
      • 2021-02-09
      • 2020-09-10
      • 2017-04-26
      • 1970-01-01
      • 2014-10-17
      相关资源
      最近更新 更多