zoukankan      html  css  js  c++  java
  • module.exports与exports,export与export default之间的关系和区别

     module.exports    

     

    CommonJS   
     - require    

    每个模块内部,module变量代表当前模块。这个变量是一个对象,它的exports属性(即module.exports)是对外的接口。加载某个模块,其实是加载该模块的module.exports属性。

    // a1.js
    const Programmer = {
        name: 'a.js'
    }
    module.exports = {
        Programmer
    }
    console.log(module)
    // b.js
    let Programmer = require('./a1.js')
    console.log('b----------', Programmer)
    console.log('b----------', Programmer.name)
    Module {
      id: 'D:\pengfei\learn\设计模式\project\a1.js',
      path: 'D:\pengfei\learn\设计模式\project',
      exports: { Programmer: { name: 'a.js', age: '25' }, add: [Function: add] },
      parent: Module {...},
      filename: 'D:\pengfei\learn\设计模式\project\a1.js',
      loaded: false,
      children: [],
      paths: [...]
    }
    b---------- { Programmer: { name: 'a.js', age: '25' }, add: [Function: add] }
    b---------- undefined
    exports

    Node为每个模块提供一个exports变量,指向module.exports。这等同在每个模块头部,有一行这样的命令。

    var exports = module.exports;
    

    直接在 exports 对象上添加方法,表示对外输出的接口,如同在module.exports上添加一样。

    * 因为 Node 模块是通过 module.exports 导出的,如果直接将exports变量指向一个值,就切断了exports与module.exports的联系,导致意外发生

    // a2.js
    const Programmer = {
        name: 'a.js'
    }
    const add = function (value) {
    return value + x;
    };
    exports = {
        Programmer,
        add
    }
    // exports.Programmer = Programmer
    // exports.add = add
    console.log(module)
    Module {
      id: 'D:\pengfei\learn\设计模式\project\a2.js',
      path: 'D:\pengfei\learn\设计模式\project',
      exports: {},
      parent: Module {...},
    ...
    } b---------- {} b---------- undefined
    export

    ES6

     - import 

    // profile.js
    var firstName = 'Michael';
    var lastName = 'Jackson';
    var year = 1958;
    
    export {firstName, lastName, year};

    注意,export命令规定的是对外的接口,必须与模块内部的变量建立一一对应关系

    // 写法一
    export var m = 1;
    
    // 写法二
    var m = 1;
    export {m};
    
    // 写法三
    var n = 1;
    export {n as m};
    export default

    export default命令,为模块指定默认输出

    export default function () {
      console.log('foo');
    }
  • 相关阅读:
    spring参数类型异常输出(二), SpringMvc参数类型转换错误输出(二)
    spring参数类型异常输出,SpringMvc参数类型转换错误输出
    Linux下载jdk ,Linux如何下载jdk
    Linux安装Jdk,CentOS安装Jdk
    Linux系统ifconfig命令找不到,centos ifconfig Command not found
    centos could not retrieve mirrorlist
    Spring声明式事务(xml配置事务方式)
    微信上传图文消息invalid media_id hint,thumb_media_id怎么获取
    云虚拟主机开源 DedeCMS 安装指南
    安装dede显示dir的解决办法
  • 原文地址:https://www.cnblogs.com/slightFly/p/14511485.html
Copyright © 2011-2022 走看看