NPM安装失败

8
我首先要说的是,我几乎没有在终端或使用node.js方面的经验。
同事离开度假,我正试图按照他留下的说明在我们的演示服务器上设置他的应用程序。我可以在本地运行所有内容,但在安装socket.io模块的服务器上遇到了问题。
已安装python,已安装nodejs,两者都成功。但然后我执行以下命令:
npm install -g socket.io

我得到的输出是:

npm http GET https://registry.npmjs.org/socket.io
npm http 304 https://registry.npmjs.org/socket.io
npm ERR! Error: EACCES, mkdir '/usr/local/lib/node_modules/socket.io'
npm ERR!  { [Error: EACCES, mkdir '/usr/local/lib/node_modules/socket.io']
npm ERR!   errno: 3,
npm ERR!   code: 'EACCES',
npm ERR!   path: '/usr/local/lib/node_modules/socket.io',
npm ERR!   fstream_type: 'Directory',
npm ERR!   fstream_path: '/usr/local/lib/node_modules/socket.io',
npm ERR!   fstream_class: 'DirWriter',
npm ERR!   fstream_stack:
npm ERR!    [ 'DirWriter._create (/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:297:15)' ] }
npm ERR!
npm ERR! Please try running this command again as root/Administrator.

npm ERR! System Linux 2.6.32-279.el6.x86_64
npm ERR! command "/usr/local/bin/node" "/usr/local/bin/npm" "install" "-g" "socket.io"
npm ERR! cwd /home/qa
npm ERR! node -v v0.8.16
npm ERR! npm -v 1.1.69
npm ERR! path /usr/local/lib/node_modules/socket.io
npm ERR! fstream_path /usr/local/lib/node_modules/socket.io
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/socket.io'
npm ERR! fstream_stack DirWriter._create (/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:297:15)
npm ERR!
npm ERR! Additional logging details can be found in:
npm ERR!     /home/qa/npm-debug.log
npm ERR! not ok code 0

我所使用的账户应该拥有管理员权限。我在谷歌上搜索了一些建议,但似乎都不适用于我的情况。尝试在命令前添加sudo,但是出现了以下错误:

[qa@umr-demo ~]sudo npm install -g socket.io
[sudo] password for qa:
sudo: npm: command not found

当你输入 which npm 时,它会输出什么? - JaredMcAteer
2个回答

20

如果没有特权,我遇到了同样的错误,因此使用-g标志时必须使用sudo。

如果sudo无法识别npm,则可以尝试:

  • 传递完整的npm路径

$ sudo $(which npm) install -g socket.io
  • 使用-E标志保护环境

  • $ sudo -E npm install -g socket.io
    

    更新:

    请注意,建议仅对可执行文件使用-g标志,并在您的代码中require的库本地安装(不带标志)。需要特权才能将可执行文件复制到/usr/bin或者,在您的情况下是 /usr/local/bin

    请注意,在socket.io网站上,安装命令中没有包括-g标志。 ;)

    了解更多信息:http://blog.nodejs.org/2011/03/23/npm-1-0-global-vs-local-installation/


    0
    如果你使用的是Arch Linux,可以在AUR中查找npm2arch软件包。它可以让你使用pacman安装npm软件包。
    例如:
    npm2archinstall socket.io
    

    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接