纯粹的Node.js?没有框架的Node.js?概述
你是一个经常使用Node.js库的Node.js开发人员吗?你是否曾在不使用任何外部Node.js库的情况下构建一个应用程序?
是的,开发一个没有NPM注册二进制文件的Node.js应用程序是可能的。本指南旨在概述如何使用纯Node.js及其功能。
背景介绍
JavaScript得到了开发者社区的广泛喜爱。它具有多样性,几乎可以用来开发任何应用,从移动应用、网页、网络、服务器、实时应用、微服务等。显然,JavaScript是一种跨平台的语言。
JavaScript的稳定增长导致了强大的JavaScript库和框架的发展,如Node.js。

Node.js能够构建极其快速和高度可扩展的应用程序。它已经成为了最受欢迎的JavaScript技术之一。

根据stack overflow 的调查,它已经成为最受欢迎的网络技术。

Node.js的运行时间下载指标不言而喻。

概述
Node.js如此受欢迎的最有影响力的原因之一是有各种开源框架和库。
包(库)是由别人编写的代码。它的开发是为了帮助社区在不重写代码的情况下轻松快速地解决日常问题,特别是对于一个广泛的应用程序。
开源框架、外部库和包可用于大多数编程语言。因此,你只需要基本技能来编写你的应用逻辑。然而,有一点使Node.js与众不同:你可以在Node.js中编写应用程序而不使用外部库。使用vanilla Node.js,你可以从头开始学习和构建应用程序,不需要外部框架。
举个例子,假设你正在构建一个Node.js服务器。在这种情况下,你会使用Express.js等包来创建服务器路由并管理你的HTTP服务器。使用这样的框架可以说是非常棒的。它使你的服务器易于设置,可扩展,并易于管理。
库通过减少多余的代码,使你的工作更容易、更有效率。在幕后,这些库是使用纯Node.js开发的。当你实现你的HTTP服务器时,低级别的Node.js逻辑被隐藏起来。
在这种情况下,你的服务器逻辑并不直接与vanilla Node.js交互。了解你的系统是如何工作的,这一点很重要。因此,对于一个开发者来说,学习vanilla Node.js是一个很好的经验。
为什么要费心学习纯Node.js?
作为开发者,不使用NPM(Node Package Manager)就很难编写应用程序。包管理器帮助你安装包并在你的项目中使用它们。尽管如此,NPM生态系统使得学习纯Node.js的功能很困难。
有了包,每个项目都变得可扩展,快速构建,并且易于管理。然而,这使得专业人员在深入挖掘时面临挑战。你的应用开发的生命周期被简化为包名。你设置一个包的功能和一组参数,嘣,你就完成了。非常简单,确实如此。
学习vanilla Node.js使你能够开发和贡献于这些包。包是使用纯Node.js构建的,所以学习纯Node.js使你能够构建自己的包,并帮助其他开发者的开发工作流程。
软件包是开源的,经常会有一些问题,比如说bug。当你对纯Node.js有一定的了解时,你就能站在解决bug或改进包的角度。包的代码被托管在GitHub上。
你可以创建一个问题或一个拉动请求来发布你的改进。通过这样做,你就成为了一个包的贡献者,帮助社区利用你的纯Node.js的技能。作为一个贡献者,你了解Node.js包的幕后情况。
由于NPM模块依赖性中指定的包的版本,包与某些项目有兼容性问题。一个 "无包 "的应用程序不会有版本兼容性的问题。你是你的项目功能生命周期的唯一管理者。
使用原始Node.js的最大缺点是,你将不得不编写大量的代码,否则将由Express和其他框架提供。你将不得不自己管理大多数事情和操作。
在不使用NPM包的情况下构建一个应用程序,意味着失去了导致许多开发人员选择Node.js的最重要的优势之一。(构成NPM注册表生态系统的开源包的多样性使得Node.js成为一种流行的技术)。
开源包的代码是预先测试过的,解决了你在开发周期中会遇到的大部分常见问题。你可以从头开始编写任何功能,但这将花费你大量的时间,而且是你必须测试你的代码。毋庸置疑,要抛弃这些框架是很难的。
使用包的最大缺点是,即使一个包里有很多代码,你最终可能只使用其中的一小部分。也许你只需要该库中的几个函数,但你将不得不下载整个包。你最终会在你的项目中留下很多未使用的代码,因为软件包的二进制文件会被托管在你的项目中。
当在你的项目中安装一个库时,它的二进制文件会作为依赖项保存在node_modules 文件夹中。当然,你需要那个文件夹来在你的项目中执行这些包。许多包最终会在node_modules 文件夹中添加许多依赖项。
一个纯粹的Node.js HTTP服务器
为了将原始的Node.js知识付诸实践,我已经演示了如何创建一个简单的Web服务器。没有框架,没有Node包管理器(NPM)。因此,没有package.json ,文件,因为你没有依赖性管理 - 只有一个文本编辑器和命令行,并使用Node.js本身提供的核心功能。
继续在你的电脑上安装[Node.js运行时]。
Node.js自带核心模块,如HTTP。有了HTTP,我们就可以获得接收和发送服务器请求的所有功能。通过以下步骤,一个Node.js服务器将被设置。
- 设置服务器
导入HTTP模块。通过HTTP,你可以执行不同的服务器请求,如GET、POST、PUT或DELETE。创建一个变量来存储返回的HTTP实例,并包括一个主机和服务器端口。在这个例子中,我们使用的是localhost,它的IP地址是127.0.0.1 ,监听端口是3000。
http = require("http");
const hostname = "127.0.0.1";
const port = 3000;
- 创建一个HTTP服务器。
使用createServer() 方法来创建一个服务器实例。它需要一个回调函数作为它的第二个参数。该回调函数的参数是:响应和请求。
请求对象包含关于客户端请求的信息,比如说URL。响应对象返回客户端请求的数据。
const server = http.createServer();
server.on("request", (request, res) => {
res.end("Hello World! This is my first pure Node.js server");
});
- 使用
listen()方法监听服务器。
如果服务器连接已经建立,该方法将返回true,意味着服务器现在正在监听已建立的连接。
server.listen(port, hostname, () => {
console.log(`Server running at http://${hostname}:${port}/`);
});
通过运行node app.js ,测试服务器。

并且它正在工作。访问http://127.0.0.1:3000/ ,获得服务器的响应。

你已经完成了。你已经创建了最简单、最纯粹的Node.js服务器。简单明了,对吗?
没有框架,没有NPM,只有原始的Node.js。
总结
学习vanilla Node.js的最好方法是建立一些实践项目,比如一个简单的Web服务器。
尝试构建简单的Web应用,建立一个简单的API或简单的服务器,或一个方便的小项目。这样,你就可以通读Node.js代码,掌握你所使用的软件包的幕后情况。
框架和vanilla Node.js都是很好的选择。这只是一个你想要什么和需要什么的问题。在开发一个应用程序时,根据技能和时间,使用最有效的方法。
然而,学习纯Node.js是非常有用的。这样做使你比拥有基本Node.js技能的普通开发人员领先一步。你将能够解决一个没有原始Node.js技能的人无法解决的问题。潜入,学习,并实践纯Node.js的力量。