CommonJS模块规范和ES6模块规范完全是两种不同的概念。

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。这等同在每个模块头部,有一行这样的命令。

优先使用 module.exports

var exports = module.exports;

module.exports / exports: 只有 node 支持的导出

require: node 和 es6 都支持的引入--{遵循的是CommonJS规范}

exports只辅助module.exports操作内存中的数据,各种操作数据完,结果到最后真正被require出去的内容还是module.exports

其实大家用内存块的概念去理解,就会很清楚了。

然后呢,为了避免糊涂,尽量都用 module.exports 导出,然后用require导入


ES6模块规范

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

// profile.js
var firstName = 'Michael';
var lastName = 'Jackson';
var year = 1958;export {firstName, lastName, year};//需要特别注意的是,export命令规定的是对外的接口,必须与模块内部的变量建立一一对应关系。//export default// 使用export default命令,为模块指定默认输出
// export-default.js
export default function () {console.log('foo');
}

export 和 export default区别:

  1. export与export default均可用于导出常量、函数、文件、模块等
  2. 在一个文件或模块中,export、import可以有多个,export default仅有一个
  3. 通过export方式导出,在导入时要加{ },export default则不需要
  4. export能直接导出变量表达式,export default不行。

export / import : 只有es6 支持的导出引入

testEs6Export.js
'use strict'
//导出变量
export const a = '100';  //导出方法
export const dogSay = function(){ console.log('wang wang');
}//导出方法第二种
function catSay(){console.log('miao miao');
}
export { catSay };//export default导出
const m = 100;
export default m;
//export defult const m = 100;// 这里不能写这种格式。//index.js
'use strict'
var express = require('express');
var router = express.Router();import { dogSay, catSay } from './testEs6Export'; //导出了 export 方法
import m from './testEs6Export';  //导出了 export default import * as testModule from './testEs6Export'; //as 集合成对象导出/* GET home page. */
router.get('/', function(req, res, next) {dogSay();catSay();console.log(m);testModule.dogSay();console.log(testModule.m); // undefined , 因为  as 导出是 把 零散的 export 聚集在一起作为一个对象,而export default 是导出为 default属性。console.log(testModule.default); // 100res.send('恭喜你,成功验证');
});module.exports = router;

ES6的模块系统非常灵活。

module.exports与exports,export与export default之间的关系和区别相关推荐

  1. exports module.exports export export default之间的关系

    exports 和module.exports是CommonJS模块规范 export export default是ES6模块的规范,两者完全是不同的概念. node应用由模块组成,采用的是Comm ...

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

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

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

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

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

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

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

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

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

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

  7. export、export default、module.export区别

    在es6里面定义模块,导出模块时可以使用export.export default 这2者区别: 在同一个文件里面可以有多个export, 一个文件里面只能有1个export default 1 // ...

  8. es6中export和export default的区别

    export与export default均可用于导出常量.函数.文件.模块你可以在其它文件或模块中通过import+(常量 | 函数 | 文件 | 模块)名的方式,将其导入,以便能够对其进行使用在一 ...

  9. export、export default、import 的注意和require

    export 暴露有两种形式,一个是声明,一个是直接暴露简写的对象,如下 //第一种:直接声明函数或者变量 export let a = 1; export let b = 1; export fun ...

最新文章

  1. .net使用memcached
  2. 佩奇扑街、外星人疯狂!Python 告诉你大年初二应该看哪部电影
  3. 谷歌CEO为「Jeff Dean开除研究员」事件道歉,却引发持续争议
  4. java html提取_2020年全新Java学习路线,含配套资料,更易上手 - 打不过就跑吧
  5. linux 如何对文件解压或打包压缩
  6. 二分算法php,PHP练习-二分查找算法
  7. VTK:图表之EdgeWeights
  8. 服务器配置文件salt,saltstack 配置文件详解
  9. 前端学习(1856)vue之电商管理系统电商系统之安装mysql出现mysql报错:Can’t start server: Bind on TCP/IP port: 通常每个套接字地址(协议/网络地址
  10. leetcode —— 206. 反转链表
  11. 微软:来这个开源的网站看看我们是如何拥抱开源的
  12. spring底层原理
  13. RS报表从按月图表追溯到按日报表
  14. 树莓派(RespberryPi)安装手记
  15. java infinity 处理_Java:如何执行向-Infinity而不是0的整数除法?
  16. Centos 6 之samba 搭建
  17. U盘文件被隐藏是怎么回事?怎样恢复被隐藏文件?
  18. 冒泡排序 java代码实现
  19. 笔记-EXCEL 周报制作
  20. C++培训_001_WIN10的安装与激活_VS编译器的安装

热门文章

  1. 数字图像处理之Canny编程实现
  2. XKC's basketball team(2019徐州站网络赛E线段树)
  3. python统计分析---6.主成分分析
  4. jsp中两个double相乘_图像处理中的代数运算及几何变换
  5. php微信分享接口调用,TP5的微信分享接口和JSSDK使用
  6. python while一定要提供循环次数吗_Python语法之选择和循环(if、while)
  7. P1460 健康的荷斯坦奶牛 Healthy Holsteins (简单的dfs)
  8. maven eclipse 配置
  9. ttribute value is quoted with which must be escaped when used within the value
  10. PCB板材结构介绍(z)