nodeJS循环引用

最近在nodejs上由于一个exports使用方式方式不对导致在两个不同js循环引用的情况下导致其中一个js无法获取另外一个js的方法,从而导致执行报错,于是就去研究了一下nodeJs的循环引用。
官方给出了一个例子:

  • a.js:
  • exports.done = false;
    const b = require('./b.js');
    console.log('in a, b.done = %j', b.done);
    exports.done = true;
    console.log('a done');
    
  • b.js:
  • console.log('b starting');
    exports.done = false;
    const a = require('./a.js');
    console.log('in b, a.done = %j', a.done);
    exports.done = true;
    console.log('b done');
    
  • main.js:
  • console.log('main starting');
    const a = require('./a.js');
    const b = require('./b.js');
    console.log('in main, a.done = %j, b.done = %j', a.done, b.done);
    

    上面可以看到在a.js中requireb.js, b.js中也require了a.js,两者是循环引用, 当执行main.js的时候输出如下:

    $ node main.js
    main starting
    a starting
    b starting
    in b, a.done = false
    b done
    in a, b.done = true