Node.js 的模块知识汇总

发布时间 - 2026-01-11 02:48:37    点击率:

在写 Node.js 应用程序的时候,你确实可以把所有代码放在巨大原 index.js 文件中,不在乎你的应用程序会变得多大多复杂。Node.js 解释器不会在意这个事情。但在代码组织方面,你很快就会陷入混乱,不能理解代码,而且难以调试。所以,作为一个人,你应该关心代码的结构。这就是使用模块的原因。

你可以把 Node.js 模块当作 JavaScript 库 —— 是整体代码中你想放在一起的某个部分(比如,函数集),你会想把这部分代码相对独立于代码库中的其它部分,可以把事情区分清楚。

就们我们把袜子放在衣柜一个抽屉,把衬衣放在衣柜的另一个抽屉 —— 我们可以把它们组成一天的着装 ——在代码库中,我们将不同的部分保存在不同的模块中,然后将它们有条不紊地合并成一个应用程序。

内建模块

即使我们不创造任何 Node.js 模块,也有模块可用,因为 Node.js 环境提供了内建模块。我们已经遇到过一个模块,就是在博客中寻找如何使用内建的 SHATWG URL 解析器的时候。

在我们自己的代码文件中,我们需要使用已经存在但是在别处声明的代码 —— 这种情况下,URL类是 Node.js 内置模块url中的一部分。

var URL = require('url').URL;

require('url')让我们可以访问url模块。这个模块定义在哪里,是怎么定义的,对我们来说完全不透明 —— 我们所需要知道的只是它的名称 ——url—— 以及它公开的属性,比如URL。

其它内建的模块直接导出我们需要的属性(通常是 JavaScript 对象)。以http模块为例:

var http = require('http');

http.createServer(function (req, res) {
  res.writeHead(200, {'Content-Type': 'text/html'});
  res.end('Hello World!');
}).listen(8080);



这里,请求http模块让我们可以直接访问http对象,我们可以直接使用其方法,比如createServer。

Node 初学者这本书讲述了如何使用 Node.js 写一个完整的 Web 服务器,它就是使用的内建http模块。

外部模块

内建模块随 Node.js 发布,它可以解决很多开发问题,而不需要为每个应用发明新的轮子,但是真正促进 Node.js 编程能力的是由来自 Node.js 社区的开源模块构建起来的庞大生态系统。这些模块也可以集成到我们的代码库中,但是由于它们不是内置的,并且不会随每次安装Node.js 一起安装,所以只在是我们的代码中require是不够的。我们需要先安装包含外部模块的代码库,由于 NPM,Node Package Manager(Node 包管理器) 的存在,这很容易。

请参博客文章,它以如何使用 async 库为例来介绍如何使用外部模块。

此外,Node工匠书还使用了一个章节来介绍了使用 NPM 的细节。

创建你自己的模块

内建模块和外部模块都是别人提供的,但它们不会妨碍你创建自己的 Node.js 模块。

下面的例子创建了一个名为myRandom的模块,它会提供了一个辅助函数,用于返回 0 到 10 之间的数。

文件myRandom.js:

function getRandom(min, max) {
   return Math.random() * (max - min) + min;
}

exports.between1and10 = function() {
   return getRandom(1, 10);
};



你应该把代码放在自己的myRandom.js文件中。由于此文件存在,并通过exports向外提供属性,另一个文件index.js可以使用导出的功能:

文件index.js:

var myRandom = require('./myRandom.js');

console.log(myRandom.between1and10());



require再次发挥作用,它让本地myRandom模块中导出的属性生效 —— 在这里是指between1and10函数。

注意:虽然模块系统允许公开模块的功能,但它也允许隐藏在模块之外不会用到的功能,只要不通过exports导出就好。即使index.js文件请求了myRandom.js文件,它也不能访问未导出的getRandom函数:

var myRandom = require('./myRandom.js');

console.log(myRandom.getRandom(5, 99));

这会导致 TypeError: myRandom.getRandom is not a function.

通过将实现细节隐藏在模块中,只暴露出需要在其它代码中使用的部分,可以很好的组织你的代码。


# nodejs  # request模块  # path  # 模块  # node.js  # fs模块  # NODE.JS加密模块CRYPTO常用方法介绍  # Node.js模块加载详解  # 跟我学Nodejs(三)--- Node.js模块  # 用C/C++来实现 Node.js 的模块(一)  # node.js使用require()函数加载模块  # 在Windows上安装Node.js模块的方法  # 跟我学Nodejs(二)--- Node.js事件模块  # 内建  # 自己的  # 放在  # 如何使用  # 让我们  # 应用程序  # 库中  # 我们可以  # 你应该  # 为例  # 它也  # 的是  # 都是  # 就会  # 在这里  # 也有  # 很好  # 你可以  # 你会  # 这就是 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Laravel的辅助函数有哪些_Laravel常用Helpers函数提高开发效率  Laravel如何使用Laravel Vite编译前端_Laravel10以上版本前端静态资源管理【教程】  如何正确下载安装西数主机建站助手?  惠州网站建设制作推广,惠州市华视达文化传媒有限公司怎么样?  Laravel Pest测试框架怎么用_从PHPUnit转向Pest的Laravel测试教程  深圳网站制作设计招聘,关于服装设计的流行趋势,哪里的资料比较全面?  香港服务器建站指南:免备案优势与SEO优化技巧全解析  Laravel如何处理文件下载请求?(Response示例)  Laravel广播系统如何实现实时通信_Laravel Reverb与WebSockets实战教程  大连网站制作费用,大连新青年网站,五年四班里的视频怎样下载啊?  香港网站服务器数量如何影响SEO优化效果?  如何在IIS服务器上快速部署高效网站?  香港服务器WordPress建站指南:SEO优化与高效部署策略  三星、SK海力士获美批准:可向中国出口芯片制造设备  Laravel怎么实现搜索高亮功能_Laravel结合Scout与Algolia全文检索【实战】  Laravel Artisan命令怎么自定义_创建自己的Laravel命令行工具完全指南  西安市网站制作公司,哪个相亲网站比较好?西安比较好的相亲网站?  香港服务器部署网站为何提示未备案?  如何用低价快速搭建高质量网站?  Laravel如何使用Contracts(契约)进行编程_Laravel契约接口与依赖反转  高性能网站服务器配置指南:安全稳定与高效建站核心方案  Laravel怎么实现软删除SoftDeletes_Laravel模型回收站功能与数据恢复【步骤】  Firefox Developer Edition开发者版本入口  非常酷的网站设计制作软件,酷培ai教育官方网站?  北京网站制作费用多少,建立一个公司网站的费用.有哪些部分,分别要多少钱?  EditPlus中的正则表达式实战(5)  nodejs redis 发布订阅机制封装实现方法及实例代码  油猴 教程,油猴搜脚本为什么会网页无法显示?  DeepSeek是免费使用的吗 DeepSeek收费模式与Pro版本功能详解  教你用AI润色文章,让你的文字表达更专业  如何在万网ECS上快速搭建专属网站?  百度浏览器ai对话怎么关 百度浏览器ai聊天窗口隐藏  Laravel如何发送邮件和通知_Laravel邮件与通知系统发送步骤  微信小程序 require机制详解及实例代码  Java类加载基本过程详细介绍  如何快速建站并高效导出源代码?  Laravel如何优化应用性能?(缓存和优化命令)  EditPlus中的正则表达式 实战(2)  Laravel API资源(Resource)怎么用_格式化Laravel API响应的最佳实践  Laravel如何使用Telescope进行调试?(安装和使用教程)  uc浏览器二维码扫描入口_uc浏览器扫码功能使用地址  Laravel如何使用Eloquent ORM进行数据库操作?(CRUD示例)  Laravel如何实现RSS订阅源功能_Laravel动态生成网站XML格式订阅内容【教程】  Midjourney怎样加参数调细节_Midjourney参数调整技巧【指南】  宙斯浏览器怎么屏蔽图片浏览 节省手机流量使用设置方法  Claude怎样写约束型提示词_Claude约束提示词写法【教程】  Laravel如何安装Breeze扩展包_Laravel用户注册登录功能快速实现【流程】  如何快速生成专业多端适配建站电话?  HTML5空格和nbsp有啥关系_nbsp的作用及使用场景【说明】  Edge浏览器怎么启用睡眠标签页_节省电脑内存占用优化技巧