[~/javascript/node.js/creating_modules/cycles(master)]$ cat a.js console.log('a starting'); exports.done = false; var b = require('./b.js'); console.log('in a, b.done = %j', b.done); exports.done = true; console.log('a done');
[~/javascript/node.js/creating_modules/cycles(master)]$ cat b.js console.log('b starting'); exports.done = false; var a = require('./a.js'); console.log('in b, a.done = %j', a.done); exports.done = true; console.log('b done');
[~/javascript/node.js/creating_modules/cycles(master)]$ cat main.js console.log('main starting'); var a = require('./a.js'); var b = require('./b.js'); console.log('in main, a.done=%j, b.done=%j', a.done, b.done);When
main.js
loads a.js
, then a.js
in turn loads
b.js
. At that point, b.js
tries to load a.js
. In
order to prevent an infinite loop an unfinished copy of the a.js
exports object is returned to the b.js
module. b.js
then
finishes loading, and its exports object is provided to the a.js
module.
By the time main.js
has loaded both modules, they're both finished. The
output of this program would thus be:
[~/javascript/node.js/creating_modules/cycles(master)]$ node main.js main starting a starting b starting in b, a.done = false b done in a, b.done = true a done in main, a.done=true, b.done=true
Casiano Rodriguez León 2015-01-07