2012-04-01 112 views
2

我是node,npm,socket.io的新手。找到很多相当有用的指南,但我遇到了一些我不明白原因的错误,希望你能帮助我。尝试全局安装socket.io时出现错误

npm install socket.io -g 

回报......

npm http GET https://registry.npmjs.org/socket.io 
npm http 304 https://registry.npmjs.org/socket.io 
npm ERR! error installing [email protected] 
npm ERR! error rolling back [email protected] Error: EACCES, unlink '/usr/local/lib/node_modules/socket.io/.npmignore' 
npm ERR! Error: EACCES, unlink '/usr/local/lib/node_modules/socket.io/.npmignore' 
npm ERR! Report this *entire* log at: 
npm ERR!  <http://github.com/isaacs/npm/issues> 
npm ERR! or email it to: 
npm ERR!  <[email protected]> 
npm ERR! 
npm ERR! System Darwin 10.8.0 
npm ERR! command "node" "/usr/local/bin/npm" "install" "socket.io" "-g" 
npm ERR! cwd /Users/Kinglee 
npm ERR! node -v v0.6.14 
npm ERR! npm -v 1.1.0-beta-4 
npm ERR! path /usr/local/lib/node_modules/socket.io/.npmignore 
npm ERR! code EACCES 
npm ERR! message EACCES, unlink '/usr/local/lib/node_modules/socket.io/.npmignore' 
npm ERR! 
npm ERR! Additional logging details can be found in: 
npm ERR!  /Users/Kinglee/npm-debug.log 

然而,当我做了npm install socket.io,没有错误,一切都很好。

对不起忘了在这里补充此信息...

我真的试图sudo npm install socket.io并没有错误安装,但是当我尝试cd ~/node_modules,我没有看到socket.io,这项事业'socket.io not found' error当我尝试做require('socket.io')像我效法这里本教程(http://blog.koostudios.com/?p=470

一种迷茫的同胞在这里:/

回答

9

最重要的部分是:

EACCES, unlink '/usr/local/lib/node_modules/socket.io/.npmignore' 

这表示您没有权限删除这个文件。

我认为这意味着您将该命令作为标准用户帐户运行,该帐户将不具有写入/usr/的写入权限。

前面加上sudo你的命令重新运行该命令使用管理员权限:

sudo npm install socket.io -g 

你的本地配置可能没有/usr/local/lib/node_modules/node的默认模块加载位置。模块加载路径通过NODE_PATH环境变量(在启动node之前)或require.paths变量(一旦node正在运行)进行控制。因为我更喜欢保持本地配置与程序分离,所以我更愿意设置环境变量来修改路径,尽管其他机制可能对长时间运行的应用程序很有用,即使环境发生变化,它们也必须保持运行状态。 (这绝对是一种先进的使用。)

要更改NODE_PATH变量单个实例,sh及其衍生物会让你只需在命令前加NODE_PATH=/path。例如,更改:

node ./foo.js 

NODE_PATH=/usr/local/lib/node_modules ./foo.js 

如果你有多个目录,使用标准: - 分隔的目录,正如你会为PATH

NODE_PATH=/usr/local/lib/node_modules:/home/sarnold/node_modules ./foo.js 

要使这个持久性的,使用shell的export内建值将NODE_PATH变量的值输出给所有的孩子发生在你的shell启动文件的修改,如~/.bashrc

export NODE_PATH=/usr/local/lib/node_modules 

这将自动采取在所有新的炮弹效果。您可以source此文件到当前正在运行的贝壳,如果你不希望重新启动它们:

source ~/.bashrc 
+0

呵呵,我忘了补充一点,我实际上试过'sudo npm install socket.io -g',它安装的很好。但是当我cd到〜/ node_modules时,我看不到socket.io。当我尝试在我正在关注的教程(http://blog.koostudios.com/?p=470)上执行'node main.js'时,会导致错误'socket.io not found'。 – 2012-04-01 21:26:52

+0

在启动node之前,您可能需要在'NODE_PATH'环境变量中添加'/ usr/local/lib/node_modules /',或在脚本中修改'require.paths'。我更喜欢环境变量,因为它不会将系统环境知识硬编码到程序中。尝试运行:'NODE_PATH =/usr/local/lib/node_modules node foo.js' - 这是,在'node'命令之前加上'NODE_PATH'分配。如果可行,那么在'〜/ .bashrc'文件中添加'export NODE_PATH =/usr/local/lib/node_modules'。 (并报告回来;我会清理答案和评论...) – sarnold 2012-04-01 21:35:35

+0

好的,这是我做的... npm rm socket.io, node main.js // return找不到模块'socket.io '这是正确的, sudo npm install socket.io -g //一切都很顺利, ..检查是否socket.io在〜/ node_modules .. //不是, NODE_PATH =/usr/local/lib/node_modules节点main.js // Ooo,它的工作原理, ..添加到.bash_profile的路径, node main.js //很好用。非常感谢, Argh我在'控制台,在这行'socket = io.connect'http:// localhost'“,'我没有定义错误',我怀疑这个网址对我的设置是错误的..嗯 – 2012-04-01 21:57:59

0

就要离开这个位置,因为它帮助我类似的问题: NPM no longer working

有一些好答案。 希望它有帮助。

相关问题