module.exports与export那些事儿

首先,我们要明白一个前提,那就是CommonJS模块规范与ES模块规范是不同的概念

1. CommonJs

1.1 概念
  • Node应用由模块组成,采用CommonJS模块规范。
    1. 根据规范,每个文件就是一个模块,有自己单独的作用域。在一个文件里面定义变量,函数,类等都是私有的,对其他的文件不可见。
    2. 根据规范,每个模块内部,module白能量代表当前模块。这个变量是一个对象,它的exports属性(module.exports)是对外的接口。
    3. module.exports用于输出文件定义内容,require用于加载模块。
1.2 实例
1.2.1 module.exports
// example.js
let x = 5;
let addX = (value) => {
    return x + value;
}
module.exports.x = x;
module.exports.addX = addX;
复制代码
1.2.2 require
let requireTest = require(./example.js);
let x = requireTest.x;
let addX = requireTest.addX(3);
console.log(x); // 5
console.log(addx); // 8
复制代码
1.3 exports与module.exports
  • Node为每个模块提供了一个exports变量,指向module.exports。这如同在每个模块的头部添加如下代码:
let exports = module.exports;
复制代码
  • module.exports才是真正的接口,exports只不过是它的一个辅助工具。 最终返回给调用的是module.exports而不是exports。 所有的exports收集到的属性和方法,都赋值给了Module.exports。

2. ES6模块规范

2.1 概念
  • 不同于CommonJS,ES6使用的是export和import来导出和导入模块。
  • export命令规定的是对外的接口,必须与模块内部的变量建立意义对应关系。
2.2 实例
2.2.1 export
let firstName = "Chengwu";
let lastName = "Du";
export { firstName, lastName }
复制代码
2.2.2 export意义对应实例
// one
export const PI = "3.1415926";

// two
let name = "Robin";
export { name }

// three
let n = "Robin";
export { n as name }
复制代码
2.2.3 import
import { firstName, lastName } from "./export.js";
let name = firstName + lastName;
console.log(name); // Chengwu Du
复制代码
2.3 export default
export defalut function() {
    return "Robin";
}
复制代码
2.3.1 export default与export区别
  • 在一个文件或者模块中,export和import可以有多个,但是export default却仅有一个。
  • 通过export方式导出,再导入时需要加{},按需加载。但是export default不需要。
  • 输出单个模块时使用export default,多个模块时使用export。
  • 不要同时使用。

转载于:https://juejin.im/post/5cb72093e51d456e7618a6bc

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值