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');
    }
  • 相关阅读:
    水晶苍蝇拍:微薄投资感悟摘录(四) (2012-04-03 14:11:01)
    水晶苍蝇拍:投资感悟(三)(手打,有删减)
    水晶苍蝇拍:投资感悟(二)(2011-12-27 08:17:54)
    leetcode -- String to Integer (atoi)
    leetcode -- Longest Palindromic Substring
    leetcode -- Longest Substring Without Repeating Characters
    leetcode -- Add Two Numbers
    QQ截图工具截取
    LUA学习笔记(第5-6章)
    Lua5.2 请求 luasocket 相关模块时的 multiple-lua-vms-detected
  • 原文地址:https://www.cnblogs.com/slightFly/p/14511485.html
Copyright © 2011-2022 走看看