前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Node.js Module – exports 和module.exports之间的联系与区别

Node.js Module – exports 和module.exports之间的联系与区别

作者头像
蛋未明
发布于 2022-05-09 04:39:24
发布于 2022-05-09 04:39:24
78300
代码可运行
举报
文章被收录于专栏:蛋未明的专栏蛋未明的专栏
运行总次数:0
代码可运行

来自本人论坛:www.tnodejs.com   tnodejs.com

最近大家都说两者是一样的,其实不然,本文来自

http://www.hacksparrow.com/node-js-exports-vs-module-exports.html 翻译 相信大家都很熟悉 exports 的用法了,你可以创建一个 function 在你的模块中如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
exports.name = function() {
    console.log('My name is Lemmy Kilmister');
};

我们可以通过如下方法执行访问:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var rocker = require('./rocker.js');
rocker.name(); // 'My name is Lemmy Kilmister'

那么 module.exports 存在的意义是什么?他是否在编码中也是正确合法的? 在开源的 node.js 代码中可以看出, module.exports 才是真正的模块 export ,而 exports 仅仅是 module.exports 的一个帮手。你的所有模块 export 的,最终都是通过 module.exports 返回出去的。 Exports 的作用主要是将所有的属性和方法整理、连接给 module.exports ,当 module.exports 还未执行。如果 module.exports 执行以后,所有的 exports 方法都将失效。 下面的例子就是说明上面一点 创建一个 rocker.js:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
module.exports = 'ROCK IT!';
exports.name = function() {
    console.log('My name is Lemmy Kilmister');
};

创建另外一个文件,并且执行:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var rocker = require('./rocker.js');
rocker.name(); // TypeError: Object ROCK IT! has no method 'name'

可以看到执行结果中无法获取 name 这个 function 。 rocker.js 中最开始就执行了 module.exports ,根据之前我们介绍的,在 module.exports 执行后他将拒绝所有的 exports 模块,因此我们的 exports.name 将会失效。从而我们无法在 require 模块后获取该方法。 你可能意识到,你的模块并不总是有“模块实例”。你的模块可能是任何的类型的 JavaScript 对象 boolean, number, date, JSON, string, function, array 等等。你可以通过 module.exports 任何的对象。 If you don't set module.exports to anythingexplicitly, the properties of exports and attached to it and returned. In this case, your module is a class:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
module.exports = function(name, age) {
    this.name = name;
    this.age = age;
    this.about = function() {
        console.log(this.name +' is '+ this.age +' years old');
    };
};

and you'd use it this way:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var Rocker = require('./rocker.js');
var r = new Rocker('Ozzy', 62);
r.about(); // Ozzy is 62 years old

In this case, your module is an array:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
module.exports = ['Lemmy Kilmister', 'Ozzy Osbourne', 'Ronnie James Dio', 'Steven Tyler', 'Mick Jagger'];

and you may use it this way:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var rocker = require('./rocker.js');
console.log('Rockin in heaven: ' + rocker[2]); //Rockin in heaven: Ronnie James Dio

So you get the point now - if you want yourmodule to be of a specific object type, use module.exports; if you want yourmodule to be a typical module instance, use exports. The result of attaching properties tomodule.exports is akin to attaching properties to exports. For example this:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
module.exports.name = function() {
    console.log('My name is Lemmy Kilmister');
};

does the same thing as:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
exports.name = function() {
    console.log('My name is Lemmy Kilmister');
};

But note that, they are not the same thing.As I said earlier module.exports is the real deal, exports is just its littlehelper. Having said that, exports is the recommended object unless you areplanning to change the object type of your module from the traditional 'module instance'to something else. I hope this post helped you understand thedifference between exports and module.exports, and learn a bit more about howmodules work in Node.js. Any questions, ping me in the comments. 加上官网的介绍

The exports object is created by the Modulesystem. Sometimes this is not acceptable, many want their module to be aninstance of some class. To do this assign the desired export object to module.exports. For example suppose we were making amodule called a.js

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var EventEmitter = require('events').EventEmitter;
module.exports = new EventEmitter();
// Do some work, and after some time emit
// the 'ready' event from the module itself.
setTimeout(function() {
  module.exports.emit('ready');
}, 1000);

Then in another file we could do

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var a = require('./a');
a.on('ready', function() {
  console.log('module a is ready');
});

Note that assignment to [font='Lucida Console']module.exports must be done immediately. It cannotbe done in any callbacks. This does not work:

x.js:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
setTimeout(function() {
  module.exports = { a: "hello" };
}, 0);

y.js:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var x = require('./x');
console.log(x.a);
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2012-06-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
springboot实战之文件分片上传、断点续传、秒传
上传是一个老生常谈的话题了,在文件相对比较小的情况下,可以直接把文件转化为字节流上传到服务器,但在文件比较大的情况下,用普通的方式进行上传,这可不是一个好的办法,毕竟很少有人会忍受,当文件上传到一半中断后,继续上传却只能重头开始上传,这种让人不爽的体验。那有没有比较好的上传体验呢,答案有的,就是下边要介绍的几种上传方式
lyb-geek
2019/11/20
24.9K2
springboot实战之文件分片上传、断点续传、秒传
字节面试官:请你实现一个大文件上传和断点续传
原 作 者:yeyan1996原文链接:https://url.cn/5h66afn
Nealyang
2020/02/19
3K0
大文件上传:秒传、断点续传、分片上传
文件上传是一个老生常谈的话题了,在文件相对比较小的情况下,可以直接把文件转化为字节流上传到服务器,但在文件比较大的情况下,用普通的方式进行上传,这可不是一个好的办法,毕竟很少有人会忍受,当文件上传到一半中断后,继续上传却只能重头开始上传,这种让人不爽的体验。
程序员小猿
2022/03/09
2.2K0
消息服务框架使用案例之--大文件上传(断点续传)功能
消息服务框架使用案例之--大文件上传(断点续传)功能 一、分块上传和断点续传原理 在我们的一个产品应用中,客户需要上传大量的文件到服务器,其中不乏很大的视频文件。虽然可以使用FTP这样成熟稳定的工具,但客户表示不会使用FTP工具,并且我们产品也觉得客户从我们软件在切换到FTP用户体验不好,如果做成后台脚本调用FTP上传那么进度信息很难呈现到我们软件上。最终,决定我们自己做文件上传功能。     大文件上传受限于服务器每次处理数据的能力,不能一次传输完成,所以分块上传是必然的了,由于上传时间可能较长,中途可能
用户1177503
2018/02/27
2.1K0
Springboot大文件上传下载实现思路,分片、断点续传代码
WebUploader是由Baidu WebFE(FEX)团队开发的一个简单的以HTML5为主,FLASH为辅的现代文件上传组件。
星辰大海的精灵
2024/12/03
5701
JLight——JavaWeb的轻量级开发框架
@Config可以配置端口号、项目根路径、扫描包路径。其中扫描包路径需要填项目的groupId名称。
易兮科技
2021/12/08
1.1K0
如何使用Java语言实现文件分片上传和断点续传功能?
在Web应用程序中,文件上传是比较常见的功能。但是,如果要上传大文件,则可能会出现上传时间过长、网络中断等问题,因此需要实现文件分片上传和断点续传功能。本文将介绍如何使用Java语言实现文件分片上传和断点续传功能。
网络技术联盟站
2023/06/05
1.6K1
前端实现文件的断点续传
以前文件无法分割,但随着HTML5新特性的引入,类似普通字符串、数组的分割,我们可以可以使用slice方法来分割文件。
书童小二
2018/09/03
3.2K0
前端实现文件的断点续传
UnityWebRequest教程☀️2021,你还在使用过时的 www API吗?
UnityWebRequest数据传输,除了一般我们用的最多的Post、Get,其实还有Put、Head
星河造梦坊官方
2024/08/15
2290
UnityWebRequest教程☀️2021,你还在使用过时的 www API吗?
Spring Boot 2.x(十六):玩转vue文件上传
最近用到了Vue + Spring Boot来完成文件上传的操作,踩了一些坑,对比了一些Vue的组件,发现了一个很好用的组件——Vue-Simple-Uploader,先附上gayhub的
山禾说
2019/05/16
1.6K0
Spring Boot 2.x(十六):玩转vue文件上传
MinIO 分片上传
MinIO 简单易用。简单性是 EB 级数据基础设施的基础 - 无论是在技术上还是在操作上。MinIO 使用和部署非常简单,没有其他对象存储可以让您在最快的时间内实现下载到生产环境的部署。
恋喵大鲤鱼
2023/10/12
4.8K0
MinIO 分片上传
大文件分片上传和分片下载
大家好,我是柒八九。一个专注于前端开发技术/Rust及AI应用知识分享的Coder
前端柒八九
2024/07/02
6240
大文件分片上传和分片下载
细说分片上传与极速秒传(SpringBoot+Vue实现)
1)调大服务端的文件上传限制:在一定长度上可以缓解上传限制问题,但并不是最优解。一方面无限制地调大上传大小会加大服务端的压力;一方面这个限制值调成多少是个需要考量的问题。
玛卡bug卡
2022/09/20
2.4K0
深入理解文件上传下载的原理及实现逻辑
文件上传的是根据 http 协议的规范和定义,完成请求消息体的封装和消息体的解析,然后将二进制内容保存到文件。
Lion 莱恩呀
2025/01/01
4230
深入理解文件上传下载的原理及实现逻辑
大文件分片上传Java版简单实现
该实例是一个串行上传分片数据的实例,一个文件仅在数据库中保存了一条记录,每次上传一个分片时更新一次该记录,直到该文件到所有分片上传完成。
WindCoder
2020/06/28
9.1K3
微服务架构 | 怎样解决分片上传及断点续传?
导读:分片上传、断点续传,这两个名词对于做过或者熟悉文件上传的朋友来说应该不会陌生,总结本篇文章希望对从事相关工作的同学能够有所帮助或者启发。
码农架构
2021/12/27
2.2K0
微服务架构  |  怎样解决分片上传及断点续传?
文件上传杂谈
文件上传是前端很常见的一类场景。图片、视频和文档等等都属于文件范畴,每个文件则是通过 File.Type 进行更细的划分。本文将针对文件上传的一些通用维度场景做简单的剖析和尝试,抛砖引玉,希望共同学习,共同成长。
有赞coder
2021/01/18
1.6K0
文件上传杂谈
大文件上传服务器:支持超大文件HTTP断点续传的实现办法
来源:blog.csdn.net/ababab12345/article/details/80490621
用户1516716
2021/07/06
2K0
大文件上传时如何做到秒传?
文件上传是一个老生常谈的话题了,在文件相对比较小的情况下,可以直接把文件转化为字节流上传到服务器,但在文件比较大的情况下,用普通的方式进行上传,这可不是一个好的办法,毕竟很少有人会忍受,当文件上传到一半中断后,继续上传却只能重头开始上传,这种让人不爽的体验。那有没有比较好的上传体验呢,答案有的,就是下边要介绍的几种上传方式
二哥聊运营工具
2022/07/11
1.1K0
大文件上传时如何做到秒传?
鸿蒙(HarmonyOS)性能优化实战-文件上传下载性能提升
在开发应用时,要实现高效的客户端跟服务器之间数据交换,文件传输的性能是至关重要的。一个数据交换性能较低的应用会导致其在加载过程中耗费较长时间,在很多的场景造成页面卡顿,极大的影响了用户体验。相反,一个数据交换高效的应用,则会让应用变得更加流畅。
小帅聊鸿蒙
2024/10/22
4060
鸿蒙(HarmonyOS)性能优化实战-文件上传下载性能提升
推荐阅读
相关推荐
springboot实战之文件分片上传、断点续传、秒传
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档