node.js の require

今日、require があるんじゃね? と思いたち色々ググッてみたのですが、普通の javascript ではそんなものは標準実装されておらず、帰宅後に express のサンプル確認したら普通に書いてあって、成程 node.js ならではのソレなのか、ということにようやく気づいておる後天性記憶不全の yamanetoshi です。
とりあえず、require というか module に関するドキュメントは 0.5.10 であれば

を確認すれば良いかと。

とりあえず

昨晩の続き、ということであまりヨソ見をせずに express/example/mvc の中を掘削してみます。
とりあえず app.js の先頭部分なんですが、昨晩も引っ掛かったソレです。

var express = require('../../lib/express');

var app = express.createServer();

createServer 手続きは一体どこで定義されているのかが分からん。ちなみに express なドキュメントの Creating A Server な項によれば

To create an instance of the express.HTTPServer, simply invoke the createServer() method. With our instance app we can then define routes based on the HTTP verbs, in this example app.get().

という記述があるなぁ。createServer 手続きは express.HTTPServer なオブジェクトを戻す模様。ちなみに HTTPServer というソレも express の中では定義されてない。ちなみに以下な記述が lib/express.js に書いてあるのは確認済み。

/**
 * Expose `createApplication()`.
 */

exports = module.exports = createApplication;

createApplication は手続きオブジェクトですな。この式が何を意味しているか、を未だ理解できておりません。module 全体を手続きオブジェクトにする場合云々、という記述がそこかしこにあります。
駄目だこれ、ソースが無いと分からん。node.js のソースってどうやって取得するんだ。ってか npm が動かぬ。

色々もごもごしてて

以下なエントリを発見。

どうやら package.json に依存関係な記述があるらしい。根拠はまだ確かめてません。dependencies なエントリが以下。

  "dependencies": {
    "connect": "git://github.com/senchalabs/connect.git",
    "commander": "0.0.4",
    "mime": ">= 1.2.2",
    "qs": ">= 0.3.1",
    "mkdirp": "0.0.7"
  },

connect を clone しておく。

$ git clone git://github.com/senchalabs/connect.git
Initialized empty Git repository in /home/rms/Documents/nodejs/connect/.git/
remote: Counting objects: 11596, done.
remote: Compressing objects: 100% (3458/3458), done.
remote: Total 11596 (delta 7539), reused 11146 (delta 7140)
Receiving objects: 100% (11596/11596), 2.39 MiB | 536 KiB/s, done.
Resolving deltas: 100% (7539/7539), done.
$

で、中身を見てみたら lib/connect.js に以下な記述があります。

// expose createServer() as the module

exports = module.exports = createServer;

む、そーゆー意味では express.js に以下な記述があったな。

/**
 * Module dependencies.
 */

var connect = require('connect')
  , proto = require('./application')
  , Route = require('./router/route')
  , utils = connect.utils;

あ、createApplication 手続きで呼ばれてる connect 手続きは createServer なのか。

function createApplication() {
  var app = connect();
  utils.merge(app, proto);
  app.init();
  return app;
}

あと理解が微妙なんですが、connect を require したらその module で createServer という手続きが定義されたこと、になるのだろうか。
ちょっと今日は時間切れ。

追記

以下を忘れるので控えとこ。

$ ~/.nave/nave.sh use 0.5.10