例によって、いろいろと試行錯誤した(混乱した)ので、又記録しておく。
実は、node.jsだけならば一度入れたことがありました。その時の手順は以下の通り。
$ mkdir work/node $ cd work/node/ $ wget http://nodejs.org/dist/node-v0.4.0.tar.gz $ tar xzf node-v0.4.0.tar.gz $ cd node-v0.4.0 $ ./configure $ make $ sudo make install
この時はサンプルプログラム(以下)を作って実行してみた。
/* file name : server.js var http = require('http'); // httpライブラリを呼ぶ http.createServer(function(request,response){ response.writeHead(200, {'Content-Type':'text/plain'}); response.end('Hello World'); }).listen(8124); console.log('Server running at http://127.0.0.1:8124');
$ node server.js &
今回はnode.js環境のパッケージマネージャであるnpmを導入して、様々なモジュールを試すための準備をすることだった。
混乱の最初は、nave。node.jsの複数のバージョンを切り替えるツールだが、これが必須だと勘違いしてしまったこと。node.jsは凄い勢いでヴァージョンがアップされているらしく、まだ仕様が安定していない。そのための対策で、rubyではrvmが有名。naveの他にnvmと言う同様の機能をもつツールもあるのだが、それがnpmと名前が似ているもんで、さらに混乱。
結局、naveは今回スキップ。
npmをgitで入れることにした。
$ git clone http://github.com/isaacs/npm.git $ cd npm $ sudo make install ! [ -d .git ] || git submodule update --init bash: git: command not found make: *** [submodules] エラー 127失敗。「modulesが見つからないです」と叫ばれる。gitコマンドを調べてみる。
$ git submodule -3d509ef6a503703e357f2ffa1df05e4f09a43bba node_modules/abbrev -8b4395bf931a9b0d27fbb24d6f41d2a1cdbb61cb node_modules/nopt -6e8da86d6a391f4a001971209cf1f4a66d060c4e node_modules/semverなんだ。パッケージがないのか!と勝った気になって
$ git submodule init $ git submodule update $ git submodule 3d509ef6a503703e357f2ffa1df05e4f09a43bba node_modules/abbrev (v1.0.2-3-g3d509ef) 8b4395bf931a9b0d27fbb24d6f41d2a1cdbb61cb node_modules/nopt (v1.0.4) 6e8da86d6a391f4a001971209cf1f4a66d060c4e node_modules/semver (v1.0.5)よし入った。これで $ sudo make install が入らない?! 似たようなエラー。
それでは、本家npmの指示に従い
$ sudo node ./cli.js install -g $ npm -v 1.0.6これで、入ったっぽい。
良し。それでは、パッケージを試しに入れてみる。
$ npm install socket.io $ npm ls (empty)ん? ない。そして、カレントディレクトリにnpm_modulesとか出来ている。その中にsocket.ioが入っている。なんじゃ?
いろいろ、やったが不明なので、npmをアンインストールすることに。
$ sudo npm uninstall npm -g /usr/bin/env: node: そのようなファイルやディレクトリはありませんええ!? これは、調べて visudoコマンドで、sudo時の環境変数リセット停止を設定。
Defaults env_reset Defaluts:%wheel !env_reset Defaults env_keep = "COLORS DISPLAY HOSTNAME HISTSIZE INPUTRC KDEDIR \ LS_COLORS MAIL PS1 PS2 QTDIR USERNAME \ LANG LC_ADDRESS LC_CTYPE LC_COLLATE LC_IDENTIFICATION \ LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC \ LC_PAPER LC_TELEPHONE LC_TIME LC_ALL LANGUAGE LINGUAS \ _XKB_CHARSET XAUTHORITY"どうも、原因は
- sudo実行時のnodeへのパスが通っていなかったこと
- npmのインストール先は、/usr/localらしいが、此処には userレベルでのインストール権限がない
結局、以下のサイトに従い、インストールした。
http://havelog.ayumusato.com/develop/javascript/e210-install_nodejs_and_npm.html
$ sudo chown -R $USER /usr/local $ curl http://npmjs.org/install.sh | sh $ sudo chown -R root /usr/local $ sudo npm install socket.io $ sudo npm install express # 注: この前にnode.jsのバージョンを上げている $ npm ls /home/baker ├─┬ express@2.3.4 │ ├── connect@1.4.1 │ ├── mime@1.2.2 │ └── qs@0.1.0 └── socket.io@0.6.17気持ちが悪いのは、node_modulesフォルダが、ユーザのホームディレクトリに出来ていること。
早速、coffee script をインストールしてみた。
$ npm install coffee-script $ coffee -v -bash: coffee: command not found $ npm ls /home/baker ├── coffee-script@1.1.1 ├─┬ express@2.3.4 │ ├── connect@1.4.1 │ ├── mime@1.2.2 │ └── qs@0.1.0 └── socket.io@0.6.17また変だ! 大体、プログラム本体は何処にいったのか?
結局、私が作ったnode, npm の環境はグローバルなので、
- sudo による実行
- -g オプションは必須
- その結果 /usr/local/bin/ に、コマンドがインストールされる(リンク)
$ sudo npm install -g coffee-script /usr/local/bin/cake -> /usr/local/lib/node_modules/coffee-script/bin/cake /usr/local/bin/coffee -> /usr/local/lib/node_modules/coffee-script/bin/coffee coffee-script@1.1.1 /usr/local/lib/node_modules/coffee-script $ sudo npm install -g express /usr/local/bin/express -> /usr/local/lib/node_modules/express/bin/express connect@1.4.1 /usr/local/lib/node_modules/express/node_modules/connect mime@1.2.2 /usr/local/lib/node_modules/express/node_modules/mime qs@0.1.0 /usr/local/lib/node_modules/express/node_modules/qs express@2.3.4 /usr/local/lib/node_modules/express $ sudo npm -g install socket.io socket.io@0.6.18 /usr/local/lib/node_modules/socket.io $ npm uninstall express $ npm uninstall socket.io $ npm uninstall coffee-script $ npm ls /home/baker (empty) $ sudo npm -g ls /usr/local/lib ├── coffee-script@1.1.1 ├─┬ express@2.3.4 │ ├── connect@1.4.1 │ ├── mime@1.2.2 │ └── qs@0.1.0 ├─┬ npm@1.0.6 │ ├── abbrev@1.0.3 │ ├── node-uuid@1.1.0 │ ├── nopt@1.0.4 │ └── semver@1.0.5 └── socket.io@0.6.18(追記)
あとで調べてみたところでは、.npmrcにパスを書き、あくまでローカルで実行する手もあったようだし、それが推薦のようだ。
実際に、npm install でローカルにインストールされたコマンドは、node_modules/.binにインストールされていたようで、そこにパスを通しても解決できたらしい。
散々な結果です。
0 件のコメント:
コメントを投稿