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');
}

今天现在项目中遇到的一个问题,报错信息是

Uncaught Error: Minified React error #130;

检查之后发现使用的是module.exports,而项目使用的是ES6的语法,所以在第一次的时候总会报错,刷新一下就可以了,第一次的时候语法转换失败了。后面换成了export default 就不会出现这个问题了。

相关链接:
CommonJS规范,http://javascript.ruanyifeng.com/nodejs/module.html
ES6 Module 的语法,http://es6.ruanyifeng.com/#docs/module

转载于:https://www.cnblogs.com/gwf93/p/10278771.html

module.exports 和 export default相关推荐

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

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

  2. ES6 module.exports和export详解

    module.exports和export详解 前言 一.commonJs: 使用步骤 1.导出属性 2.导出类 二.ES6规范 对外暴露的方式 分别暴露 统一暴露 暴露的时候指定别名 默认暴露 引入 ...

  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之间的区别

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

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

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

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

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

  7. 谈谈module.exports和exports

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

  8. 关于module.exports和exports

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

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

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

最新文章

  1. springboot打成jar后获取classpath下的文件
  2. log函数 oracle power_数学函数
  3. 在R中子集化数据框的5种方法
  4. 《研磨设计模式》chap14 迭代器模式(2)算工资举例
  5. 在Spring Boot使用H2内存数据库
  6. 自定义会话状态存储提供程序
  7. HTML5概要与新增标签
  8. 初探Golang(3)-数据类型
  9. UVA11991 Easy Problem from Rujia Liu?题解
  10. jsp java ldquo_添加jsp · yayaangel/java201521123103 - Gitee.com
  11. mysql代码创建表博客园_数据库——用代码创建表
  12. 趣谈充电IC的电源路径管理功能
  13. 如何用计算机设置热点,Win7如何在笔记本电脑设置热点wifi?
  14. 软考程序员常见问题答疑
  15. 微软账号登陆不上_登录微软账号的Windows电脑如何远程?
  16. 雷电模拟器如何启动某一特定应用 | ldconsole.exe runapp打开雷电内的APP没有任何反应怎么办
  17. 证券公司信息化——6
  18. 链表从尾部增加新节点
  19. Flutter 无法热重载
  20. 行车记录仪冲刺前装450万台,小鹏G9紧急开发功能

热门文章

  1. 通用解题法——回溯算法(理解+练习)
  2. 初试linux编译(ubuntu+vim)+玩转智能蛇
  3. 2017 年总结及 2018 年计划
  4. 卷积池化计算 深度学习
  5. Ramsey定理数学
  6. 同步与异步,阻塞与非阻塞的区别
  7. YOLOv4实用训练实践
  8. window路径和linux路径变换,从linux样式路径转换时,Docker装入的卷将; C添加到Windows路径的末尾...
  9. Android TextView 去除顶部和底部留白(上下的间距有空白问题处理)
  10. RxJava debounce()和throttleWithTimeout()