module.exports与exports,export与export default之间的关系和区别
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区别:
- export与export default均可用于导出常量、函数、文件、模块等
- 在一个文件或模块中,export、import可以有多个,export default仅有一个
- 通过export方式导出,在导入时要加{ },export default则不需要
- 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之间的关系和区别相关推荐
- exports module.exports export export default之间的关系
exports 和module.exports是CommonJS模块规范 export export default是ES6模块的规范,两者完全是不同的概念. node应用由模块组成,采用的是Comm ...
- 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
对于前端初学者来说,exports.module.exports 和 export.export default 容易让人产生误解,笔者顺便写篇文章解读一下. 第一部分:exports 和 modul ...
- (区别、详解、使用)module.exports与exports,export与export default,import 与require
目录 导出简介(里面有小细节请仔细阅读) module.exports与exports 1.该js文件要导出的值即为test 2.该js文件要导出的值即为test1和test2 3. 注意这里我是先给 ...
- 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 ...
- export、export default、module.export区别
在es6里面定义模块,导出模块时可以使用export.export default 这2者区别: 在同一个文件里面可以有多个export, 一个文件里面只能有1个export default 1 // ...
- es6中export和export default的区别
export与export default均可用于导出常量.函数.文件.模块你可以在其它文件或模块中通过import+(常量 | 函数 | 文件 | 模块)名的方式,将其导入,以便能够对其进行使用在一 ...
- export、export default、import 的注意和require
export 暴露有两种形式,一个是声明,一个是直接暴露简写的对象,如下 //第一种:直接声明函数或者变量 export let a = 1; export let b = 1; export fun ...
最新文章
- .net使用memcached
- 佩奇扑街、外星人疯狂!Python 告诉你大年初二应该看哪部电影
- 谷歌CEO为「Jeff Dean开除研究员」事件道歉,却引发持续争议
- java html提取_2020年全新Java学习路线,含配套资料,更易上手 - 打不过就跑吧
- linux 如何对文件解压或打包压缩
- 二分算法php,PHP练习-二分查找算法
- VTK:图表之EdgeWeights
- 服务器配置文件salt,saltstack 配置文件详解
- 前端学习(1856)vue之电商管理系统电商系统之安装mysql出现mysql报错:Can’t start server: Bind on TCP/IP port: 通常每个套接字地址(协议/网络地址
- leetcode —— 206. 反转链表
- 微软:来这个开源的网站看看我们是如何拥抱开源的
- spring底层原理
- RS报表从按月图表追溯到按日报表
- 树莓派(RespberryPi)安装手记
- java infinity 处理_Java:如何执行向-Infinity而不是0的整数除法?
- Centos 6 之samba 搭建
- U盘文件被隐藏是怎么回事?怎样恢复被隐藏文件?
- 冒泡排序 java代码实现
- 笔记-EXCEL 周报制作
- C++培训_001_WIN10的安装与激活_VS编译器的安装
热门文章
- 数字图像处理之Canny编程实现
- XKC's basketball team(2019徐州站网络赛E线段树)
- python统计分析---6.主成分分析
- jsp中两个double相乘_图像处理中的代数运算及几何变换
- php微信分享接口调用,TP5的微信分享接口和JSSDK使用
- python while一定要提供循环次数吗_Python语法之选择和循环(if、while)
- P1460 健康的荷斯坦奶牛 Healthy Holsteins (简单的dfs)
- maven eclipse 配置
- ttribute value is quoted with which must be escaped when used within the value
- PCB板材结构介绍(z)