我开始在 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
即使两个单独的模块需要它,它似乎也确实共享模块,甚至跨模块和跨请求保持状态