キンサクプログラマー

お金儲けと技術のメモ

melkorソースコードリーディング

wikiエンジンに興味を持ったので、利用するためにも中身を読んでみる。

リポジトリはここ
hiddentao/melkor · GitHub

melkorってなに

node.jsとGitで作られたwikiエンジン。wikiエンジンにはもっとメジャーなものもあるみたいだけど、個人的にnode.jsを使っている点に興味を持ったのでこれにした。
インストールして

melkor

ってやるだけで立ち上がるので非常に簡単。

早速読んでみる

といっても、そもそもjavascriptもnode.jsもど素人レベルなので、文法とかモジュールとかを随時調査しながら
進める。

*

try {
  require('vm').runInNewContext('var a = function*() {};');
  es6Enabled = true;
} catch (err) {
  es6Enabled = false;
}

try catch説は例外処理、中身の処理が例外キャッチしたら、enableを変えるっぽいので、
runInNewContext(" ")の処理ができたらOKらしい。
なんもしてねーじゃねぇかと思ったけど、実行環境がES6かをチェックしてるみたいね(予想)。

とりあえず、進む。

  var spawn = require('child_process').spawn;
  var app = spawn('node', ['--harmony', __filename].concat(process.argv.slice(2)), {
    cwd: process.cwd(),
    env: process.env,
    stdio: 'inherit',
  });

前半で子プロセスを呼び出すモジュールを読み込む。
次の行ではspawn(command,オプション・・・)で子プロセスでコマンドが実行される。のか・・
とりあえずこれで子プロセスでもnodeが立ち上がる。

var commander = require('commander'),
  melkor = require('../index'),
  co = require('co');

var dataFolder = process.cwd();


commander
  .option('-p, --port <num>', 'Port number (Default: 4567)', 4567)
  .option('-t, --title <title>', 'Wiki title (Default: Wiki)', 'melkor')
  .option('-a, --ajax', 'Enable AJAX navigation and editing')
  .parse(process.argv);

ここらは簡単か。
commanderモジュールを読み込んでる。このモジュールはコマンド処理作ってくれるモジュールらしい。

co(melkor.init)(dataFolder, options, function(err) {
  if (err) {
    return console.error(err.stack);
  }

最後。
coモジュールが起動する。非同期処理をかけるモジュールらしい。
よくわからんが、こいつにわたされているmelkor.initで処理が続くのだろう。
一旦休憩