2012-01-26 101 views
9

Node和npm都安装并且是最新版本,但在尝试安装coffeescript时仍然出现此错误。我仍然对编程不熟悉,所以任何建议将不胜感激。在mac上安装coffeescript时出错10.7.2

test-macbook:~ Test$ npm -v 
1.1.0-3 
test-macbook:~ Test$ node -v 
v0.6.8 
test-macbook:~ Test$ npm install -g coffee-script 
npm http GET https://registry.npmjs.org/coffee-script 
npm http 304 https://registry.npmjs.org/coffee-script 
npm ERR! Could not create /usr/local/lib/node_modules/___coffee-script.npm 
npm ERR! error installing [email protected] 

npm ERR! Error: EACCES, permission denied '/usr/local/lib/node_modules/___coffee-script.npm' 
npm ERR! 
npm ERR! Please try running this command again as root/Administrator. 
npm ERR! 
npm ERR! System Darwin 11.2.0 
npm ERR! command "node" "/usr/local/bin/npm" "install" "-g" "coffee-script" 
npm ERR! cwd /Users/Dylan 
npm ERR! node -v v0.6.8 
npm ERR! npm -v 1.1.0-3 
npm ERR! path /usr/local/lib/node_modules/___coffee-script.npm 
npm ERR! code EACCES 
npm ERR! message EACCES, permission denied '/usr/local/lib/node_modules/___coffee-script.npm' 
npm ERR! errno {} 
npm ERR! 
npm ERR! Additional logging details can be found in: 
npm ERR!  /Users/Dylan/npm-debug.log 
npm not ok 

回答

8

的错误信息是相当明确的:

npm ERR! Error: EACCES, permission denied '/usr/local/lib/node_modules/___coffee-script.npm' 
npm ERR! 
npm ERR! Please try running this command again as root/Administrator. 

您不能在/usr/local/lib/node_modules安装它,因为你没有必要的权限。尝试使用sudo

dylan-hermans-macbook:~ sudo npm install -g coffee-script 

故宫笔者建议不使用sudo因为包可以运行任意命令,从而sudo npm install是危险的。他建议将/usr/local的所有权转移给您的用户。我认为这是一个可怕的建议,只会给你一种错误的安全感:如果一个软件包可以运行任意命令,那么它可能会混淆你的主目录(包括你的所有个人数据,可执行文件,配置文件和启动文件......) sudo或谁拥有/usr/local所以不使用sudo真的不会为你做很多事情。如果你不信任一个包,那就不要安装它;如果你不信任一个包,那么你甚至可以使用它? /usr/local树仍然是一个系统目录树,OSX仍然是一个多用户操作系统。

IMO一个更好的解决方案是双重的:

  1. 不要安装或使用,你不信任任何程序包。如果你安装了它,那么你就相信这个代码是你的(除非你总是在某个监狱里运行它,但是如果你要这么做的话,你最好自己编写代码) 。
  2. 单独留下sudo/usr/local并将其全部安装到您的主目录中。您将面临与使用sudo或更改/usr/local所有权相同的危险,但至少您不会惹起不良习惯。
+1

谢谢!我不知道解决方案如此简单。对于我将来遇到的类似问题,我一定要记住这一点。 – Anconia 2012-01-27 01:00:20

+1

请参阅下面Tim Schaub的回答,以了解处理此问题的正确方法。 – 2013-02-11 16:15:03

+0

这不是一个解决方案,解决方案是让用户访问'/ usr/local',就像@TimSchaub所说的那样。 – 2013-03-07 10:19:36

13

继NMP作家艾萨克Z. Schlueter的的the advice

我强烈建议你不要做包管理使用sudo!

相反的sudo npm install ...可以转而改变你的/usr/local目录权限:

sudo chown -R $USER /usr/local 

一旦这样做了以后,你应该能够npm install ...(没有sudo)。

+0

你是绝对正确的 - 这是使用包管理器,如npm或homebrew的全部要点:) – bx2 2013-02-10 16:27:59

9

我意识到这是一个较老的线程,但我碰到了这个,想更新最后一个答案。

更改整个/ usr/local目录的所有者对这个问题是一个可怕的答案。你应该这样做没有任何理由。

如果你看看npm的错误信息,它将被拒绝在/ usr/local/lib/node_modules上写入权限/我知道在OS X Mavericks上安装node和npm之后,它的默认所有者是不存在的用户。

0 drwxr-xr-x 3 24561  wheel  102 Jan 23 14:17 node_modules 

如果你只是在本地开发机器上运行的节点/ NPM,只是改变了node_modules文件夹的所有者给您的用户:

sudo chown -R yourusername /usr/local/lib/node_modules 

然后你就可以用NPM安装的模块没有sudo并且不需要更改root用户的/ usr/lib所有者,因为它应该是。

+2

'sudo chown -R $ USER/usr/local/lib/node_modules'避免了用户意外输入错误用户名的问题。 – ThomasW 2015-01-07 05:46:00