NodeJSでプロジェクトをビルドし始めて、疑問に思っていました
- NodeJSは、同じモジュールを必要とするモジュールに対して、すでにロードされているモジュールを再利用しますか?
- モジュールは、それらを必要とするモジュール間で同じ「状態」を維持しますか?
- どちらかまたは両方が発生した場合のキャッチは何ですか?ループ
setTimeout
や非同期コードに似た問題に直面していますか?
現在、4つのファイルでテストしました
common.js
var i = 0; function add(v){i += v;} function view(){console.log(i);} module.exports = { add : add, view : view }
a.js
とb.js
exports.common = require('./common.js');
server.js
var a = require('./a.js'), b = require('./b.js'); function start(){ http.createServer(function (req, res) { a.common.add(2); a.common.view(); b.common.add(4); b.common.view(); a.common.view(); res.writeHead(200, {'Content-Type': 'text/plain'}); res.end('Hello World\n'); }).listen(config.port, config.address || '127.0.0.1'); console.log('Server running'); }
結果は私にそれがすることを示唆する結果を与えます:
2 - view() via a.js on favicon request
6 - view() via b.js on favicon request
6 - view() via a.js on favicon request
8 - view() via a.js
12 - view() via b.js
12 - view() via a.js
2つの別々のモジュールで必要な場合でも、モジュールを共有しているように見え、モジュール間およびリクエスト間で状態を維持しているようです。