0.11 新機能 require

ChangeLog に書いていませんが、view サーバーのソースみてたらやっぱりできるみたい。CommonJS 互換なライブラリ呼び出し。

デザインドキュメントのJavaScriptで CommonJS スタイルの require を使ってモジュール化したJavaScriptを呼び出せるようになりました。

// _design/app/lib/hello.js
exports.hello = function(){
   return "hello";
}

な感じでやっておくと、show/list から lib/hello.js を require して呼び出せるようになります。

function(doc, req){
   h = require("lib/hello");
   return h.hello();
}

モジュールファイルの方では exports オブジェクトにpublicにするメソッドや変数などを定義することになります。!code マクロとか !json マクロとかほとんどいらないです。

この機能に伴い、デザインドキュメントは初回呼び出し時にJavaScriptランタイムに全部が渡されてオブジェクトとしてキャッシュされるようになりました。このおかげで、でかいデザインドキュメントを扱うときに、エラーでも出そうものならスタックトレースが膨大になって、すごくいらいらするようになります。。。relax どこいったんだよ。

その代わり正常に動作する場合は若干速くなりました。

とりあえず CouchDB用のオレオレ便利ライブラリを CommonJS スタイルで書き直す必要がありそうです。