美文网首页
require与module.exports的特性

require与module.exports的特性

作者: XZ阳光小熊 | 来源:发表于2019-04-13 18:39 被阅读0次

    1、在node.js中我们使用require方法引入模块,require方法有一下特性需要注意:

    • module被加载的时候执行,加载后缓存。比如我们在一个模块中输出一条信息,当我们在另一个模块中重复引入该模块,代码执行时都只会有一条输出信息。
    • 一旦出现某个模块被循环加载,就只输出执行的部分还未执行的部分不会输出。
    // moduleA.js
    module.exports.testValue = 'a';
    // 到此处开始执行moduleB的代码
    const moduleB = require('./moduleB');
    // 因为moduleB已经执行完毕此处输出bb
    console.log('moduleB:',moduleB.testValue);
    
    module.exports.testValue = 'aa';
    
    
    // moduleB.js
    module.exports.testValue = 'b';
    const moduleA = require('./moduleA');
    // 执行输出时因为moduleA中才执行到引入moduleB故此处输出值为a
    console.log('moduleA',moduleA.testValue);
    
    module.exports.testValue = 'bb';
    
    
    // main.js
    const moduleA = require('./moduleA');
    // 因为在moduleA中已经引用了moduleB故此处引用并不会输出内容
    const moduleB = require('./moduleB');
    
    

    以上示例就是一个循环调用的例子,实际应用中我们要尽量避免循环调用一个模块。
    2、exports与module.exports的区别。
      在node.js中我们将模块导出时可以使用exports或者module.exports来导出模块中的内容。我们可以认为exports是一个变量它的值为module.exports,因此我们在导出模块的时候需要注意一下问题:

    // 错误的写法
    // export = 10;
    // export = {
    //     name: 'xiaoming'
    // }
    // 正确的写法
    export.name = 10;
    export.obj = {
        name: 'xiaoming'
    }
    // 或者
    module.export = 10;
    module.export = {
        name: 'xiaoming'
    }
    

    相关文章

      网友评论

          本文标题:require与module.exports的特性

          本文链接:https://www.haomeiwen.com/subject/fgurwqtx.html