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();
// 第一组 export default function car() { // 输出 // ... }
import car from 'car'; // 输入 // 第二组 export function car2() { // 输出 // ... }; import {car2} from 'car2'; // 输入
区别:
(1)export default ===>import不需要大括号(一个模块只能有一个默认输出,所以export default只能使用一次)
(2)export ===>需要大括号