首先我们要明白一个前提,CommonJS模块规范和ES6模块规范完全是两种不同的概念。

CommonJS模块规范


Node应用由模块组成,采用CommonJS模块规范。

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

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

var x = 5;
var addX = function (value) {return value + x;
};
module.exports.x = x;
module.exports.addX = addX;
复制代码

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

require方法用于加载模块。

var example = require('./example.js');console.log(example.x); // 5
console.log(example.addX(1)); // 6
复制代码

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

var exports = module.exports;
复制代码

于是我们可以直接在 exports 对象上添加方法,表示对外输出的接口,如同在module.exports上添加一样。注意,不能直接将exports变量指向一个值,因为这样等于切断了exports与module.exports的联系。

ES6模块规范


不同于CommonJS,ES6使用 export 和 import 来导出、导入模块。

// profile.js
var firstName = 'Michael';
var lastName = 'Jackson';
var year = 1958;export {firstName, lastName, year};
复制代码

需要特别注意的是,export命令规定的是对外的接口,必须与模块内部的变量建立一一对应关系。

// 写法一
export var m = 1;// 写法二
var m = 1;
export {m};// 写法三
var n = 1;
export {n as m};
复制代码

export default 命令 使用export default命令,为模块指定默认输出。

// export-default.js
export default function () {console.log('foo');
}
复制代码

相关链接:

CommonJS规范,javascript.ruanyifeng.com/nodejs/modu…

ES6 Module 的语法,es6.ruanyifeng.com/#docs/modul…

文章来自:Fayin

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

module.exports与exports,export与export defa相关推荐

  1. exports、module.exports和export、export default到底是咋回事

    地址1:https://segmentfault.com/a/1190000010426778 地址2:https://blog.csdn.net/caixiaowang/article/detail ...

  2. module.exports与exports,export与export default之间的关系和区别

    CommonJS模块规范和ES6模块规范完全是两种不同的概念. CommonJS模块规范: 根据这个规范,每个文件就是一个模块,有自己的作用域.在一个文件里面定义的变量.函数.类,都是私有的,对其他文 ...

  3. module.exports 和 exports 、export default 、export、require 、 inport 的区别

    module.exports 和 exports 的区别(不完全理解exports 实际操作有出入) module.export 和exports 是node.js 的语法 , 而export def ...

  4. 一文解读exports、module.exports 和 export、export default

    对于前端初学者来说,exports.module.exports 和 export.export default 容易让人产生误解,笔者顺便写篇文章解读一下. 第一部分:exports 和 modul ...

  5. (区别、详解、使用)module.exports与exports,export与export default,import 与require

    目录 导出简介(里面有小细节请仔细阅读) module.exports与exports 1.该js文件要导出的值即为test 2.该js文件要导出的值即为test1和test2 3. 注意这里我是先给 ...

  6. exports、module.exports和export、export default之间的区别

    总结: require: node 和 es6 都支持的引入(CommonJS规范) export / import : 只有es6 支持的导出引入 module.exports / exports: ...

  7. module.exports和exports得区别

    对module.exports和exports的一些理解 可能是有史以来最简单通俗易懂的有关Module.exports和exports区别的文章了. exports = module.exports ...

  8. 关于module.exports和exports

    关于module.exports和export 总结:直接使用module.exports.属性名=属性值 的方式,根据后面的会覆盖前面的原则. 使用module.exports={ 属性名:属性值} ...

  9. 谈谈module.exports和exports

    谈谈module.exports和exports module.exports 对象是由模块系统创建的.在我们自己写模块的时候,需要在模块最后写好模块接口,声明这个模块对外暴露什么内容,module. ...

  10. nodejs中module.exports和exports的区别

    最近在学习nodejs,这篇文章就权当是一篇笔记,如果有什么地方有误,望指出. 首先我们要明白一个前提,CommonJS模块规范和ES6模块规范完全是两种不同的概念. CommonJS模块规范 Com ...

最新文章

  1. AI技术如何帮助研究人员重现历史的气味?
  2. css设置标题边框,css 如何让文字标题显示在边框上?
  3. 怎么判断前轮左右的位置_汽车上主要传感器的安装位置,你知道多少?
  4. 深入理解 Lua 虚拟机
  5. 部署 SAP UI5 应用到 SAP BTP 时遇到的 error retrieving MTA 错误消息
  6. 聊聊gcc参数中的-I, -L和-l
  7. 企业——Docker容器的搭建及简单应用
  8. P5727 【深基5.例3】冰雹猜想(python3实现)
  9. Oracle 数据库 各种索引类型 简单介绍
  10. 那些好用的阅读软件(Windows Android)
  11. vue 获取当前本机ip_vue中获取本地ip
  12. 汽车SoC芯片IP供应商
  13. DDN - Digital Data Network
  14. 软考考点笔记之松驰时间的计算
  15. 我心如水_Win8_PE_x64_x86_无忧启动终结版
  16. 用核弹炸火星能更宜居!马斯克再开脑洞,移民计划从卖T恤开始
  17. 害阿里程序员差点被当场开除的P0事故
  18. 安霸S5L通过usb虚拟网卡共享网络功能
  19. 【人脸识别】基于KL变换人脸识别含Matlab源码
  20. mysql 存储过程 compile_存储过程 | iMySQL | 老叶茶馆

热门文章

  1. 重构指南 - 封装条件(Encapsulate Conditional)
  2. python学习笔记15-执行环境
  3. 区块链相关名词解释(一)
  4. 3.6 SQL Server 内存
  5. CSS遮罩层:hover状态丢失及解决方案
  6. cad二次开发程序的绿色安装
  7. Viliv N5 GPS安装及使用方法
  8. Sql Create Function简单例子
  9. 异常——Python
  10. FAILED Execution Error, return code 2 from org