美文网首页
node中commonJs模块加载规范和es6模块加载规范

node中commonJs模块加载规范和es6模块加载规范

作者: WWWWWWWWWWWWWWM | 来源:发表于2020-07-05 01:50 被阅读0次

    1、commonJs加载规范

    module.exports : 暴露
    exports: 暴露
    require : 引入

    • 区别
    // 1、初始化他们是一个空对象
    module.exports === exports === {} 
    
    // 2、暴露的写法
    module.exports = a; //a是你要暴露的内容,可以是任何东西
    exports[key] = value; //exports只能是这种写法,不能写exports = a,这种写法
    
    //3、 module.exports才是真正的接口,exports只不过是它的一个辅助工具。 
    //最终返回给调用的是module.exports而不是exports。
    // 所有的exports收集到的属性和方法,都赋值给了Module.exports。
    // 当然,这有个前提,就是module.exports本身不具备任何属性和方法。
    // 如果,module.exports已经具备一些属性和方法,那么exports收集来的信息将被忽略。
    
    
    对于区别中第三条的疑问的解释:

    先看例子

    var counter  = 0;
    exports.printNextCount = function()
        {
        counter+=2;
            console.log(counter);
        }
    module.exports = function(){
    counter+=10;
    this.printNextCount=function(){
    console.log(counter)
    }
    
    }
    var isEq = (exports === module.exports);
    console.log(exports);
    console.log(module.exports);
    console.log(isEq);
    

    打印结果


    image.png

    说明
    exports仅仅是module.exports的一个地址引用。nodejs只会导出module.exports的指向,如果exports指向变了,那就仅仅是exports不在指向module.exports,于是不会再被导出,这可以解释为什么不能使用

    exports = {a: 1} //错误,
    exports.a = 1;
    

    这种写法,因为,当使用exports = {a:1}时,相当于把exports的指向从module.exports变成了{a:1},当然不会再暴露了。

    • commonJs结论

    NodeJs开发者建议导出对象用module.exports,导出多个方法和变量用exports,为了避免混淆,大部分场景用module.exports就行了
    来自
    https://www.cnblogs.com/ooooevan/p/5897586.html

    1、es6模块加载规范

    es6模块加载规范不能直接在node里面运行,需要babel,且必须在服务器端,自己手写的html部署在服务器端需要加

     <script type="module"></script>
    

    commonJs加载规范,暴露和导入这两个是深拷贝,两者完全脱离关系;ES modules即es6模块加载规范是浅拷贝,两者还存在引用关系

    .

    相关文章

      网友评论

          本文标题:node中commonJs模块加载规范和es6模块加载规范

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