module.exports 、 exports、export、export default 区别

原创
2019/06/05 11:59
阅读数 16

module.exports 与 exports

  • 一个文件就是一个模块,即module;这个文件有自己的作用域,在一个文件里面定义的变量、函数、类等都是私有的,对其他文件不可见

  • 在每个模块内部,module变量即为当前模块,这个变量是一个对象,他的exports属性是对外的接口属性,加载这个模块,其实就是加载该模块的module.exports属性;

      'use strict';
      var a = 2;
      var b = 3;
    
      function methodTools() {
    
      }
    
      module.exports.fa = a;
      module.exports.fb = b;
    

    上述代码通过module.exports对外暴露 fa、fb两个变量 外部用require、或者import则可以访问到fa、fb两个变量了

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

      var exports = module.exports;
    

    即 exports 为 module.exports。所以通过exports可以访问到fa、fb了

      'use strict';
      var a = 2;
      var b = 3;
    
      function methodTools() {
    
      }
    
      exports.fa = a;
      exports.fb = b;
    
  • 注意exports、module.exports 导出的是module;如果外部文件引用

    • import引用

        import example from './common/appMethod';
        let { fa, fb } = example;
        console.log(fa); //2
      
    • require引用

        var example = require('./common/appMethod')
        console.log(example.fa);//2
        console.log(example);//{fa: 2, fb: 3}
      

export 、 export default

  • ES6使用 export 和 import 来导出、导入模块

      // a文件
      // 'use strict';
      var a = 2;
      var b = 3;
    
      function methodTools() {
    
      }
      export { a, b };
    
      // b文件导入a文件
      var example = require('./common/appMethod')
      console.log(example);
    
      // 输出信息
      {__esModule: true}
      a: 2
      b: 3
    
      // c 文件导入a文件
      import { a, c } from './common/appMethod';
      console.log(a, c);
      // 输出信息
      2 undefined
    
  • 使用export default命令,为模块指定默认输出

    • 模块文件

        'use strict';
        var a = 2;
        var b = 3;
      
        export { a, b };
        export default a;
      
    • 导入模块

        import { a, b, c, d, j } from './common/appMethod';
        import def_M from './common/appMethod';
        console.log(a, b, c, d, j, def_M);
      
        输出信息
        2 3 undefined undefined undefined 2
      
  • 如果使用export default,不能使用结构赋值获取到导出变量

  • 使用require

      var example = require('./common/appMethod');
      console.log(example);
    
      // 输出
       {default: 2, __esModule: true}
      a: 2,
      b: 3,
      default: 2,
    
展开阅读全文
def
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部