module.exports 和 export default
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相关推荐
- 一文解读exports、module.exports 和 export、export default
对于前端初学者来说,exports.module.exports 和 export.export default 容易让人产生误解,笔者顺便写篇文章解读一下. 第一部分:exports 和 modul ...
- ES6 module.exports和export详解
module.exports和export详解 前言 一.commonJs: 使用步骤 1.导出属性 2.导出类 二.ES6规范 对外暴露的方式 分别暴露 统一暴露 暴露的时候指定别名 默认暴露 引入 ...
- module.exports 和 exports 、export default 、export、require 、 inport 的区别
module.exports 和 exports 的区别(不完全理解exports 实际操作有出入) module.export 和exports 是node.js 的语法 , 而export def ...
- exports、module.exports和export、export default之间的区别
总结: require: node 和 es6 都支持的引入(CommonJS规范) export / import : 只有es6 支持的导出引入 module.exports / exports: ...
- exports、module.exports和export、export default到底是咋回事
地址1:https://segmentfault.com/a/1190000010426778 地址2:https://blog.csdn.net/caixiaowang/article/detail ...
- (区别、详解、使用)module.exports与exports,export与export default,import 与require
目录 导出简介(里面有小细节请仔细阅读) module.exports与exports 1.该js文件要导出的值即为test 2.该js文件要导出的值即为test1和test2 3. 注意这里我是先给 ...
- 谈谈module.exports和exports
谈谈module.exports和exports module.exports 对象是由模块系统创建的.在我们自己写模块的时候,需要在模块最后写好模块接口,声明这个模块对外暴露什么内容,module. ...
- 关于module.exports和exports
关于module.exports和export 总结:直接使用module.exports.属性名=属性值 的方式,根据后面的会覆盖前面的原则. 使用module.exports={ 属性名:属性值} ...
- module.exports与exports,export与export default之间的关系和区别
CommonJS模块规范和ES6模块规范完全是两种不同的概念. CommonJS模块规范: 根据这个规范,每个文件就是一个模块,有自己的作用域.在一个文件里面定义的变量.函数.类,都是私有的,对其他文 ...
最新文章
- springboot打成jar后获取classpath下的文件
- log函数 oracle power_数学函数
- 在R中子集化数据框的5种方法
- 《研磨设计模式》chap14 迭代器模式(2)算工资举例
- 在Spring Boot使用H2内存数据库
- 自定义会话状态存储提供程序
- HTML5概要与新增标签
- 初探Golang(3)-数据类型
- UVA11991 Easy Problem from Rujia Liu?题解
- jsp java ldquo_添加jsp · yayaangel/java201521123103 - Gitee.com
- mysql代码创建表博客园_数据库——用代码创建表
- 趣谈充电IC的电源路径管理功能
- 如何用计算机设置热点,Win7如何在笔记本电脑设置热点wifi?
- 软考程序员常见问题答疑
- 微软账号登陆不上_登录微软账号的Windows电脑如何远程?
- 雷电模拟器如何启动某一特定应用 | ldconsole.exe runapp打开雷电内的APP没有任何反应怎么办
- 证券公司信息化——6
- 链表从尾部增加新节点
- Flutter 无法热重载
- 行车记录仪冲刺前装450万台,小鹏G9紧急开发功能
热门文章
- 通用解题法——回溯算法(理解+练习)
- 初试linux编译(ubuntu+vim)+玩转智能蛇
- 2017 年总结及 2018 年计划
- 卷积池化计算 深度学习
- Ramsey定理数学
- 同步与异步,阻塞与非阻塞的区别
- YOLOv4实用训练实践
- window路径和linux路径变换,从linux样式路径转换时,Docker装入的卷将; C添加到Windows路径的末尾...
- Android TextView 去除顶部和底部留白(上下的间距有空白问题处理)
- RxJava debounce()和throttleWithTimeout()