博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
module.exports与export那些事儿
阅读量:5886 次
发布时间:2019-06-19

本文共 1582 字,大约阅读时间需要 5 分钟。

首先,我们要明白一个前提,那就是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.jslet 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); // 5console.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意义对应实例
// oneexport const PI = "3.1415926";// twolet name = "Robin";export { name }// threelet 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

你可能感兴趣的文章
如何将lotus 通讯簿导入到outlook 2003中
查看>>
WinForm 应用程序中开启新的进程及控制
查看>>
js replace,正则截取字符串内容
查看>>
Thinkphp5笔记三:创建基类
查看>>
查询反模式 - GroupBy、HAVING的理解
查看>>
Android中EditText,Button等控件的设置
查看>>
TextKit简单示例
查看>>
网格最短路径算法(Dijkstra & Fast Marching)(转)
查看>>
软链接和硬链接详解
查看>>
Redis_master-slave模式
查看>>
彻底卸载删除微软Win10易升方法
查看>>
SWT/JFACE之环境配置(一)
查看>>
应用程序日志中总是说MS DTC无法正确处理DC 升级/降级事件,是什么意思
查看>>
mybatis数据处理的几种方式
查看>>
作业2
查看>>
远程主机探测技术FAQ集 - 扫描篇
查看>>
C++中调用python函数
查看>>
Nomad添加acl认证
查看>>
“TI门外汉”网路知识笔记一 OSI参考模型
查看>>
你不需要jQuery(五)
查看>>