2014年1月6日月曜日

Ubuntuのnode.js実装

今度はnode.jsを少しかじってみようと思い、手元のUbuntu13に環境を準備します。(こういうこと考えると、vagrantで仮想環境の自動構築って便利だと初めて実感しました。最初は、なんでそんな気機能が必要なのか思いつかなったんで)

ググってみると、ソースをDLしてビルドする人、Ubuntuのapt-getで済ます人、半々のようです。どちらがいいか迷ったんですが、ソースからビルドすると大抵後で削除するのが面倒なことが多いです。他のものに影響を与えても原因追究しづらいし。
ということで、まずはすなおにUbuntuのapt-getでインストールします。


$ sudo apt-get install nodejs npm
[sudo] password for hoge:
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています    

node.js本体とパッケージを管理するnpmを個別にインストールするようです。
メッセージが大量に流れますが、特に問題なくインストールは終了しました。

簡単なプログラムを以下に示します。(JavaScriptになります)
hello.js
var http = require('http');
var server = http.createServer();
server.on('request', function(req, res) {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.write('Hello World!');
res.end();
});
server.listen(1337, '192.168.24.64');
console.log('Server running at 1337');


赤字はport番号と、(自PCの)IPアドレスです。
これで実行は以下の通りです。


$ nodejs  hello.js
Server running at 1337


(注:他のサイトの例では'node’コマンドでしたが、今回なぜか'nodejs’に変わっていました。おそらくubuntuだけの実装だと思われます)


あとはブラウザで当該port番号で開いてみれば動作を確認できます。無事"Hello World!"の表示を確認できたので、いくつかサンプルを試してみました。

そのうち「ejs」というテンプレートを処理するパッケージを使用するサンプルがでてきて(よく使われるようです)、まずそれをインストールしないといけません。ここでパッケージ管理のnpmの出番になります。

$ npm install ejs
npm http GET https://registry.npmjs.org/ejs


npm ERR! Error: failed to fetch from registry: ejs
npm ERR!     at /usr/share/npm/lib/utils/npm-registry-client/get.js:139:12
npm ERR!     at cb (/usr/share/npm/lib/utils/npm-registry-client/request.js:31:9)


なんだろう?Ubuntu独自実装のnodejsに問題があるのか?

後日、VMPlayer上に試験環境として用意してある別のPC上のUbuntuにソースからDLしてインストールしてみました。

$  ./configure
$  make
$  sudo make install

(/usr/local以下にinstallされた。わりと行儀がいい。)
次にnpmをインストールしようと思ったが、サイトにあったやり方を見ると、何をしようとしているのかよく意味がわからない。他のサイトではnode.jsと一緒にインストールされるとあったが、調べてみると、/usr/local/bin/npmと既に存在していた。

$ npm install ejs
npm http GET https://registry.npmjs.org/ejs
npm http 200 https://registry.npmjs.org/ejs
npm http GET https://registry.npmjs.org/ejs/-/ejs-0.8.5.tgz
npm http 200 https://registry.npmjs.org/ejs/-/ejs-0.8.5.tgz
ejs@0.8.5 node_modules/ejs
$

サイトの出力例とは若干違うが(バージョンも違うし)、普通にインストールできた。

やはり、Ubuntu独自の実装に問題がありそうだ。

0 件のコメント:

コメントを投稿