简而言之...
首先,为什么npm建议只以非根用户身份运行?我不相信每个其他的包管理器(apt
, yum
, gem
, pacman
)都因为需要sudo而是错的。
其次,当我遵循他们的建议(以非root用户运行npm install
)时,它并不能正常工作(因为非root用户没有对/usr/local/lib的权限)。那么我该怎么做呢?我不会chown -R $USER /usr/local/lib
,因为这听起来对我来说是一个非常糟糕的主意。
完整描述...
我通过执行curl http://npmjs.org/install.sh | sudo sh
(在他们的README里的指示)安装了npm。
当我以sudo身份运行sudo npm install mongoose
时,npm告诉我不要以root身份运行:
npm ERR! sudon't!
npm ERR! sudon't! Running npm as root is not recommended!
npm ERR! sudon't! Seriously, don't do this!
npm ERR! sudon't!
但是,如果我在没有使用sudo的情况下运行npm install mongoose
,则会得到以下结果:
npm info it worked if it ends with ok
npm info using npm@0.2.17
npm info using node@v0.4.0-pre
npm info fetch http://registry.npmjs.org/mongoose/-/mongoose-1.0.7.tgz
npm info calculating sha1 /tmp/npm-1297199132405/1297199132406-0.7044695958029479/tmp.tgz
npm info shasum b3573930a22066fbf3ab745a79329d5eae75b8ae
npm ERR! Could not create /usr/local/lib/node/.npm/.cache/mongoose/1.0.7/package.tgz
npm ERR! Failed creating the tarball.
npm ERR! This is very rare. Perhaps the 'gzip' or 'tar' configs
npm ERR! are set improperly?
npm ERR!
npm ERR! couldn't pack /tmp/npm-1297199132405/1297199132406-0.7044695958029479/contents/package to /usr/local/lib/node/.npm/.cache/mongoose/1.0.7/package.tgz
npm ERR! Error installing mongoose@1.0.7
npm ERR! Error: EACCES, Permission denied '/usr/local/lib/node/.npm/.cache/mongoose'
npm ERR! There appear to be some permission problems
npm ERR! See the section on 'Permission Errors' at
npm ERR! http://github.com/isaacs/npm#readme
npm ERR! This will get better in the future, I promise.
npm not ok
这告诉我不应该使用sudo,但如果我按照他们的建议操作,它就无法工作。
这导致了我之前提出的问题。
apt
应该以root身份运行(https://help.ubuntu.com/community/AptGet/Howto),因为它们已经正确构建。`npm`没有完全完成他们的产品,所以`npm`本来应该能够作为root运行,但是他们还没有完成这个功能(https://github.com/isaacs/npm/issues/294)。在他们完成之前,使用sudo运行实际上是不安全的。 - Alexander Bird