module.exports---exports---export default与import---require区别和联系

 一、弄清基本信息:

CommonJS规范 ES6语法
导出模块:module.exports 导出模块:export
exports export default
导入模块:require 导入模块:import

***module.exports导出对应require导入,export导出对应import导入

 

模块化:

  (1)node应用由模块组成,采用CommonJS模块规范。

  (2)根据这个规范,每个文件就是一个模块,有自己的作用域,在一个文件里面顶一个变量、函数、类,都是私有的,对其他文件不可见。

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

 

二、module.exports和exports的区别与联系

// exam.js
var
x=1; var addX=function(val){ return val+x; }; module.exports.x=x; module.exports.addX=addX;

以上代码通过module.exports输出变量x和函数addX

下面通过require方法加载上面的模块:

var exam=require('./exam.js');  //使用require引入自定义模块时,一定要加路径(./前缀);系统模块可以直接引入不用前缀
console.log(exam.x);
console.log(exam.addX(1));

其实exports变量是指向module.exports,加载模块实际是加载该模块的module.exports。这等同在每个模块头部,有一行这样的命令:

 

var exports=module.exports;

 

 注意:不能直接将exports变量指向一个值,这样等于切断了exports和module.exports的联系

 

三、export和export default的区别和联系

模块功能主要由:export和import构成。export导出模块的对外接口,import命令导入其他模块暴露的接口。

(1)export和export default就是写法上面有差别,export导出一个个单独接口,export default默认导出一个整个接口。

 

(2)使用import命令的时候,用户需要知道所要加载的变量名和函数名,否则无法加载。

(3)不用知道有哪些具体的暴露接口名,就用export default命令,为模块指定默认输出

export写法  
// ex.js
var sid=001;
var name="xlx";
var data="1995";

export {sid,name,data}

使用export命令定义了模块的对外接口后,其他js文件就可以通过import命令加载这个模块。

import {sid,name,data} from "./ex.js"

 export default 写法

// export-default.js

export default function(){
    console.log("foo");
}

//或者写成:
function foo(){
      console.log("foo")  
}

export default foo;

main.js

import fn from "./export-default.js";

fn();
// 报错:Unexpected identifier
// 第一组
export default function car() { // 输出
  // ...
}
import car from 'car'; // 输入 // 第二组 export function car2() { // 输出 // ... }; import {car2} from 'car2'; // 输入

区别:

(1)export default ===>import不需要大括号(一个模块只能有一个默认输出,所以export default只能使用一次)

(2)export ===>需要大括号

 

posted @ 2020-03-14 21:04  俄罗斯方块  阅读(197)  评论(0编辑  收藏  举报