尝试全局安装socket.io时出现错误
我是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)
一种迷茫的同胞在这里:/
最重要的部分是:
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
呵呵,我忘了补充一点,我实际上试过'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
在启动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
好的,这是我做的... 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