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使用 exportimport 来导出、导入模块。

// 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的模块系统非常灵活。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/246897.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Ubuntu下安装 imagej 和 Fiji

安装ImageJ 方法一 sudo apt-get install imagej whereis imagej imagej -version 方法二 下载 Linux版本的 imagej 安装 Instructions cd /home mkdir imagej cp ij150-linux64-java8.zip /home/imagej unzip ij150-linux64-java8.zip 建立软连接,可以在终端…

vue的diff 算法

1. 当数据发生变化时,vue是怎么更新节点的? 要知道渲染真实DOM的开销是很大的,比如有时候我们修改了某个数据,如果直接渲染到真实dom上会引起整个dom树的重绘和重排,有没有可能我们只更新我们修改的那一小块dom而不要…

Ubuntu中python调用SimpleITK来显示图像

misc.imshow ipython import os from scipy import misc dataDir os.environ["HOME"] "/Downloads/SimpleITK-MICCAI-2001-Tutorial-master/Data" print dataDir image misc.imread(dataDir "FA.png") misc.imshow(image) 或者 ipython i…

Websocket--- long loop--ajax轮询

Websocket--- long loop--ajax轮询,long poll 和 ajax轮询 的原理。 1,首先是 ajax轮询 ,ajax轮询 的原理非常简单,让浏览器隔个几秒就发送一次请求,询问服务器是否有新信息。 2,long poll 其实原理跟 ajax轮询 差不多…

Linux下设置环境变量

单独查看PATH环境变量,可用: echo $PATH11 方法一:在用户主目录下的 profile或 bashrc文件 sudo gedit ~/.profile 或者 sudo gedit ~/.bashrc123123 可以在此文件末尾加入PATH的设置如下: export PATH”$PATH:your path1:you…

前端解决一像素问题

一、transform:scale 使用伪类 :after 或者 :before 创建 1px 的边框,然后通过 media 适配不同的设备像素比,然后调整缩放比例,从而实现一像素边框 首先用伪类创建边框 .border-bottom{position: relative;border-top: none !important; }.…

Python缩进问题

Python缩进问题 Python中,是通过代码的缩进,来决定代码的逻辑的。通俗的说,Python中的代码的缩进,不是为了好看,而是觉得代码的含义,上下行代码之间的关系。缩进弄错了,就会导致程序出错&#…

Ubuntu下安装Pycharm及相关设置

下载 Pycharm 社区版本 http://www.jetbrains.com/pycharm/download/#sectionlinux 安装指导 Copy the pycharm-community-2016.2.3.tar.gz to the desired installation location (make sure you have rw permissions for that directory) cp /home/bids/Downloads/pycha…

Python 编码规范 PEP 8

PEP 8 – Style Guide for Python Code 详情可查看官网 https://www.python.org/dev/peps/pep-0008/ 用于查看python代码是否符合风格. sudo apt-get install pep8 使用 pep8 --youfile.py 可以得到以下输出 test2.py是自己写的一个文件): test2.py:1:11: E401 multipl…

NIPS 2016 Highlighted Papers

今天看到NIPS官网开放了部分录用文章的Spotlight Videos,迫不及待撸了一遍,特别将一些有趣、有料的highlight出来分享给大家。文章链接均为油管视频,戳前请翻墙(排名不分先后,但根据自己的兴趣在每篇文章后用“★”标记…

深度学习所有文章

所有文章(持续更新中): 聊聊语音识别的发展历程 说说重要的贝叶斯公式吧 我对入门深度学习的切身体会 聊聊隐马尔科夫模型(HMM) 关于防止过拟合的一些想法 我与数据打交道(一) 我与…

朱松纯:初探计算机视觉三个源头兼谈人工智能

朱松纯 加州大学洛杉矶分校UCLA统计学和计算机科学教授(Song-Chun Zhu;www.stat.ucla.edu/~sczhu) 杨: 朱教授,你在计算机视觉领域耕耘20余年,获得很多奖项,是很资深的研究人员。近年来你又涉足认知科学、…

视觉研究的前世今生(上)王天珍(武汉理工大学)

视觉是人类最重要的知觉,没有视觉人类很难定位,识别物体,了解坏境,得以生存发展。20世纪两次世界大战,使得西方各国,不论是为了飞机安全着陆,还是导弹精确制导,都对视觉研究有了非常…

视觉研究的前世今生(中)王天珍(武汉理工大学)

视觉研究的前世今生(三) 王天珍 3 空间知觉 3-1概述 学术界一致同意空间知觉是视觉的最高层次,也是视觉中最抽象,最难以理解的。众所周知。物体上一点发出的光线落到视网膜上只是一个点,但我们怎么能单凭视觉知道物体的…

看了数百个PPT封面,我只想告诉你这两个套路!

做PPT离不开的一个词就是封面,封面即门面,很大程度上决定了你的作品给人的第一印象。 我们经常能够在网上看到一些大神做的封面,比如阿文、珞珈,非常酷炫。 这类封面也许不需要太多技巧,但一定是花了很多心思并且需要…

caffe 框架梳理(待续)

本文更多资料来源于罗韵北京深度学习资料和Ian Goodfellow的书籍《Deep Learning》 链接: http://pan.baidu.com/s/1jIRJ6mU 提取密码:xehi caffe:全称Convolutional Architecture for Fast Feature Embedding,是一个计算CNN 相关算法的框…

NIPS 2016上22篇论文的实现汇集

日前,LightOn CEO 兼联合创始人 Igor Carron 在其博客上放出了其收集到的 NIPS 2016 论文的实现(一共 22 个)。他写道:「在 Reddit 上,peterkuharvarduk 决定编译所有来自 NIPS 2016 的可用实现,我很高兴他…

深度学习 - 强化学习 -迁移学习(杨强教授报告)

李宏毅机器学习课程-Transfer Learning 深度学习 -> 强化学习 ->迁移学习(杨强教授报告) 链接: http://pan.baidu.com/s/1nu6DMRn 密码: an9q 深度学习的局限 表达能力的限制。因为一个模型毕竟是一种现实的反映,等于是现实的镜像&…

Caffe: 贾扬清2015年讲座

链接: http://pan.baidu.com/s/1jIRJ6mU 提取密码:xehi 一、讲座正文 大家好!我是贾扬清,目前在GoogleBrain,今天有幸受邀来和大家聊聊Caffe。没有太多准备,所以讲的不好的地方还请大家谅解。 大家最近一段时间应该已…

李开复 6000 字长文,揭开 AI 创业的 10 个真相

全文见 http://mp.weixin.qq.com/s?__bizMzI5NTIxNTg0OA&mid2247485140&idx1&sn9a92d9cfa6c4461a4fc0f59705ac84bb&chksmec57b153db203845f65a0ce76324f1b3ea329d5cc5612f2b973b34f3f21a8fe78dc22dd61849&scene0#rd AI 创业现在是科学家的天下&#xff…