2012-04-01 21 views
2

私はノードnpm、socket.ioを初めて使用しています。かなり有用なガイドがたくさん見つかりましたが、原因を理解できないエラーがいくつか発生しました。うまくいけば、私を助けることができます。socket.ioをグローバルにインストールしようとするとエラーが発生する

npm install socket.io -g 

戻って...私はnpm install socket.ioをしたとき

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 

しかし、エラーがなかった、すべてが大丈夫でした。

申し訳ありませんが、ここでこの情報を追加することを忘れ...

私がしようとしたとき、私は実際に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の前)またはrequire.paths変数(nodeが実行されている)を介して制御されます。私はローカルの設定をプログラムから分離したほうが好きなので、環境変数を設定してパスを変更することをお勧めしますが、環境が変わっても長く存続する必要がある長命のアプリケーションにとっては便利です。

NODE_PATH変数を1つのインスタンスに変更するには、shとその派生語を使用して、コマンドの前にNODE_PATH=/pathを追加するだけで済みます。たとえば、変更:

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

を作成するには:

node ./foo.js 

あなたが複数のディレクトリを持っている場合は、ちょうどあなたがPATHの場合と同じように、標準:区切られたディレクトリを使用

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

へこの永続的なシェルの export組み込み変数を使用して、 NODE_PATH変数の値をすべての子にエクスポートします 場所シェルの起動ファイルでの変更、など ~/.bashrcとして:

export NODE_PATH=/usr/local/lib/node_modules 

これは、自動的にすべての新しいシェルで有効になります。

source ~/.bashrc 
+0

ああ、私は実際に 'sudo npm install socket.io -g'を試してみましたが、それはうまくインストールされていると付け加えています。しかし、〜/ node_modulesにcdすると、socket.ioは表示されません。これは、次のチュートリアル(http://blog.koostudios.com/?p=470)で 'node main.js'を実行しようとすると、エラー 'socket.io not found'が発生します。 –

+0

'node'を起動する前に'/usr/local/lib/node_modules/'を' NODE_PATH'環境変数に追加するか、スクリプト内で '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

+0

ここに私が何をしたのですか... npm rm socket.io、 node main.js //戻り値 'socket.io'モジュールが見つかりませんこれは正しいです、 sudo npm install socket.io -g //すべてがうまくいった .. socket.ioが〜/ node_modulesにあるかどうかを調べる//いいえ、 NODE_PATH =/usr/local/lib/node_modules node main.js //うまく動作します。 .. .bash_profileへのパスを追加しました。 node main.js // sweet it works。ありがとうございました。 コンソールで、この行の「io is defined error」と表示されています。 "socket = io.connect 'http:// localhost'"、私の設定が間違っていると思われます。うーん –

0

それは同様の問題で私を助けたとしてだけで、ここではこれを残して: NPM no longer working

は、いくつかの良いを持っていたあなたがそれらを再起動したくない場合は、現在実行中のシェルにsourceこのファイルをすることができます答え。 お手伝いをしてください。

関連する問題