kb84tkhrのブログ

何を書こうか考え中です あ、あと組織とは関係ないってやつです 個人的なやつ

TiddlyWiki/Dev - ソースを読み始める

さて何から読んでみようか
あんまり人のコード読んだことないんでどこから手を付けていいのやらカンがない

まあ起動するところから順番に行ってみよう
bootprefix.jsってやつだな
っていうかこれがどうやって起動するんだ

最初はtiddlywiki.jsってやつか

#!/usr/bin/env node

こうやっても起動できるんだな
この時点でなにかデフォルトで読み込まれたりするんだろうか

var $tw = require("./boot/boot.js").TiddlyWiki();

このrequireがCommonJSのモジュールってやつだな?
TiddlyWiki()を読み込んで$twに覚えておくと
$tw.wikiがいちばん大事なオブジェクトって書いてあったな
もうできているんだろうか

$tw.boot.boot();

実際に動き出すのはここか
bootprefix.jsがどこで出てくるかわからないけど出た順でboot.jsから見てみよう

var _boot = (function($tw) {
  :

さていきなりこれはなんだ
JavaScript知らないのに読むのは若干無謀?

対応するカッコを探すとファイルのほぼ末尾にこんなのが

  :

return $tw;

});

_bootっていうのはなにしろ$twをもらっていじくって返す関数、ということか

そしてすぐ下(ファイルの末尾)

if(typeof(exports) !== "undefined") {
    exports.TiddlyWiki = _boot;
} else {
    _boot(window.$tw);
}

TiddlyWikiという名前で_bootを公開しますよ、ってことだろう
exportsundefinedなときは_bootをそのまま返すんだな

exportsってやつはCommonJSのモジュールってのに関係してそうだ
そういうのをサポートしてるかどうかを判定していると見た
きっと全体でイディオムになってる

exportsのプロパティをrequireで取り出す、というのがモジュールのしくみらしいな
exportsが定義されてればモジュールが使えるぞってことだろう
使えないのはブラウザの素の環境とかかな

typeofは型を返す関数で、!==は型も値も合ってるかどうかを見る

var $tw = require("./boot/boot.js").TiddlyWiki();

ではboot.jsの_boot$twに代入して

$tw.boot.boot();

では

$tw.boot.boot = function(callback) {
  :

て定義される関数を呼んでるってことだな

ところどころ引数が省略されてるように見えるけど
ふーん省略するとundefinedが渡されたことになるのか

雰囲気はわかった気がする
中身を読んでいこう