更新 Node 版本 Ubuntu2025年3月17日 | 阅读 12 分钟 Node.js 是一个开源的 JavaScript 运行时环境。由于 Node.js 拥有活跃的用户社区,每隔几周就会出现小的软件更新。无论我们使用 Node.js 作为 Mean 栈的底层,还是在独立的 JS 框架中使用,都可以确保每天更新 Node.js 以维护系统安全。 安装 NPM 和 Node.js 有多种方法。同样,根据我们机器上使用的操作系统,也有多种方法来更新我们的 Node.js 版本。 Node.js 是一个著名的跨平台、开源的服务器端平台,用于构建强大的应用程序。由于拥有充满活力的贡献者社区的支持,该平台不断更新,引入新的安全补丁、功能和其他性能改进。 因此,更新到最新版本的 Node.js 可以帮助我们充分利用这项技术。我们可以选择实现最新的 LTS(长期支持)版本,该版本具有最新的特性。 LTS 通常推荐给大多数用户,因为它是一个稳定的版本,可以实现可预测的版本更新,并引入较慢的重大更改。 Node.js 无论是在功能还是稳定性方面,都比其早期版本有了显著的改进。它如今非常受欢迎,因为它具有以下特性:
Node.js 概述Node.js 允许使用 JavaScript 和一组管理许多核心功能的“模块”来创建网络工具和 Web 服务器。这些模块提供数据流、加密功能、二进制数据(缓冲区)、网络(UDP、TLS/SSL、TCP、HTTP 或 DNS)、文件系统 I/O 和其他核心功能。Node.js 的模块使用 API 来简化服务器应用程序的指定。 JavaScript 是 Node.js 原生支持的唯一语言,但也有几种可编译为 JS 的语言。因此,Node.js 应用程序可以用 ClojureScript、TypeScript、Dart、CoffeeScript 等语言编写。 主要而言,Node.js 用于构建网络程序,如 Web 服务器。PHP 和 Node.js 之间的一个重要区别是,PHP 中的几乎所有函数在完成之前都会阻塞(命令只有在旧命令完成后才会运行),而 Node.js 中的函数是非阻塞的(命令同时或并行运行,并使用回调来指示失败或完成)。 官方支持 Node.js 的操作系统包括 macOS、Linux,以及 Microsoft Windows 和 Server 2012 的 8.1 版本,同时为 IBM AIX、SmartOS 提供二级支持,并支持 FreeBSD。OpenBSD 也可用,并且 IBM i (AS/400) 提供 LTS 版本。此外,可以在第三方修改或官方支持的操作系统上构建给定的源代码,以支持 Unix 服务器和 NonStop OS 等其他系统。 平台架构Node.js 采用事件驱动的 Web 服务器编程,从而能够使用 JavaScript 快速开发 Web 服务器。所有开发者都可以通过应用简化的事件驱动编程模型(使用许多回调来指示任务完成)来构建可伸缩的服务器,而无需使用线程。Node.js 可以将 JavaScript(一种脚本语言)与 Unix 网络编程的强大功能结合起来。 Node.js 是基于 Google 的 V8 JavaScript 引擎 开发的,它基于 BSD 许可证开源。它实现了 TCP、DNS 和 HTTPS 等 Internet 基础协议。此外,JavaScript 是一种非常流行的语言,使得 Node.js 能够被所有 Web 开发社区所使用。 行业支持Node.js 有许多开源库,其中大部分都托管在 npm 网站上。有许多开发者活动和会议支持 Node.js 社区,包括 Node Summit、Node Interactive、NodeConf 以及一些区域性活动。 开源社区改进了 Web 框架,以加速应用程序开发。这些框架包括 Derby、Meteor、Sails.js、Hapi.js、Koa.js、Feathers.js、Socket.IO、Express.js、Connect 等。此外,还开发了许多包来与 Microsoft.Net 或其他语言等运行时环境进行交互。 最新的桌面 IDE 为 Node.js 应用程序提供了调试和编辑功能。这些 IDE 包括 Visual Studio Code、Nodeclipse Enide Studio(基于 Eclipse)、NetBeans、Microsoft Visual Studio(使用 TypeScript 定义或 Node.js 工具 for Visual Studio)、JetBrains WebStorm、Brackets 和 Atom。Node.js 在多个云托管平台上得到支持,如 Jelastic、Joyent、AWS Elastic Beanstalk、Google Cloud Platform 等。 此外,各种在线 Web IDE 也支持 Node.js,如 Koding、Cloud9 IDE、Codenvy、Codeanywhere 和 Node-RED 中的可视化流程编辑器。 Node.js 版本发布Node.js 的新主要版本每 6 个月从 GitHub master 分支发布一次。奇数版本在 10 月发布,偶数版本在 4 月发布。当发布新的奇数版本时,旧的偶数版本将过渡到 LTS(长期支持),该版本从其指定 LTS 日期开始提供 18 个月的积极支持。LTS 版本在 18 个月后还将获得额外的 12 个月维护支持。 活跃版本会在几周后将非破坏性更改回溯到最新版本。维护版本仅接收文档更新和关键修复。长期支持工作组与 Node.js 基金会的技术指导委员会合作处理策略和战略。 Node.js 技术细节Node.js 是一个 JavaScript 运行时环境,可以循环处理(传入)请求,这被称为 事件循环。 ![]() 内部结构Node.js 在底层使用 libuv 来处理异步事件。libuv 可以被描述为 POSIX(如 Unix、Linux、OSS on NonStop 和 macOS)和 Windows 系统上文件系统和网络功能的抽象层。 线程Node.js 通过许多非阻塞 I/O 调用在单线程事件循环上工作,这使其能够在不产生线程上下文切换开销的情况下支持多个并发连接。共享一个线程处理每个请求的这种安排采用了观察者模式,旨在构建(高度并发)应用程序,其中实现 I/O 的函数必须使用回调。 Node.js 使用 libuv 库来支持单线程事件循环,该循环使用(固定大小的)线程池来管理一些非阻塞异步 I/O 操作。 线程池在 Node.js 中管理并行任务执行。主线程将任务调用发布到分布式任务队列,线程池中的线程可以从中提取并执行。本质上,网络等非阻塞系统函数会转换为内核侧(非阻塞)套接字,而文件 I/O 等阻塞系统函数则在其自己的线程上以阻塞方式执行。
V8V8 是一个 JavaScript 执行引擎,最初由 Google 为 Google Chrome 开发。它于 2008 年由 Google 开源。它使用 C++ 编写。它可以在执行时将 JavaScript 源代码编译成本地机器码。此外,截至 2016 年,它还包含一个字节码解释器和 ignition。 统一 APINode.js 可以与支持 JSON 数据(如 CouchDB、MongoDB 或 Postgres)的数据库和浏览器协调,将 JSON 数据集成到统一的 JavaScript 开发堆栈中。 Node.js 允许在服务器端和客户端之间保留类似的服务和模型接口,而服务器端开发模式(如 MVVM、MVP、MVC 等)则略有不同。 包管理npm 是 Node.js 服务器平台预装的包管理器。它通过 npm 注册表安装 Node.js 程序,负责管理和安装第三方 Node.js 程序。在 npm 注册表中,包的范围可以从像 Lodash 这样的常规辅助库到像 Grunt 这样的任务运行器。 事件循环Node.js 可以向操作系统注册,以便操作系统通知它有关连接和事件,并由回调处理。所有连接都在 Node.js 运行时内进行管理。传统上,重量级的操作系统线程和进程会相对地管理所有连接。 Node.js 采用事件循环模式来实现可伸缩性,而不是使用线程或进程。Node.js 的事件循环不需要显式调用其他服务器(事件驱动)。而是指定回调,服务器会在回调定义完成后自动进入事件循环。如果不再有其他回调需要执行,Node.js 将退出事件循环。 WebAssemblyNode.js 从 Node 14 开始支持 WebAssembly,并实验性支持 WASI 和 WebAssembly 系统接口。 原生绑定Node.js 提供了一种通过称为 N-API 的(C 语言)API 来创建 “插件” 的方式,该 API 可用于使用 C/C++ 中定义的源代码生成可导入的(可加载的).node 模块。该模块可以直接导入到内存中,并在 JS 环境中作为普通的 CommonJS 模块运行。 N-API 实现依赖于内部的 C++/C Node.js 和 V8 对象,需要用户将 Node.js 特定的头文件导入到原生源代码中。它可能会因新版本而发生更改,有时可能会被破坏(因此需要针对特定 Node.js 版本编译模块才能正确实现),因为 Node.js 平台不断派生 API 兼容性。 第三方在 API 之上定义了开源的(C++/C)包装器,部分缓解了这个问题。它们阐明了接口,但作为副作用,它们也可能增加所有维护者都需要处理的复杂性。尽管如此,Node.js 的核心功能仍驻留在 JavaScript 内置库中,而用 C++ 编写的模块可以用于增强功能并提高所有应用程序的性能。 要生成此类模块,需要具备必要的头文件和合适的 C++ 编译器(后者通常与 Node.js 本身一起安装):clang、gcc 或 MSVC++。 N-API 类似于 Java Native Interface。 前提条件本文假设我们使用的是 Ubuntu 20.04 版本。在开始之前,我们应该有一个具有 sudo 权限的非 root 用户账户。 使用 APT 从默认存储库安装 Node.jsUbuntu 20.04 版本在其默认存储库中包含一个 Node.js 版本,可以为多个系统提供合理的使用体验。 注意:Ubuntu 20.04 版本中包含的 Node.js 版本 10.19 现已无人维护且不受支持。不应在生产环境中使用它,而应参考其他部分来安装更新的 Node 版本。我们将使用包管理器 apt 来获取 Node 版本。首先,我们需要通过输入以下命令来刷新本地包索引: ![]() 输入上述命令后,我们将使用以下命令安装 Node.js 版本: ![]() 通过检查 node 的版本号,我们将验证安装是否成功: ![]() 如果存储库中的软件包满足我们的需求,那么获取 Node.js 就完成了。 在大多数情况下,我们也会希望安装 Node.js 包管理器 (npm)。我们可以通过 apt 命令安装 npm 包来实现: ![]() 上面的命令将允许我们安装包和模块以用于 Node.js。 更新 Node 版本的其他方法所有 Node.js 版本都提供有关运行时兼容性、集成和应用程序功能的信息,这些对于开发者至关重要。重要的是不要依赖特定的 Node.js 版本,而是要不断更新我们的 Web 服务器到最新的 Node.js 发行版,以确保网络安全。 使用 NVM (Node Version Manager) 更新 Node.jsNVM 或 Node Version Manager 是更新 Node.js 的最佳技术之一。我们将需要 C++ 编译器、libssl-dev 包和 build-essential。我们需要先更新 NVM 并安装最新的 Node.js 包来更新我们的 Web 服务器平台。 要更新最新的 NVM 版本,我们可以使用 curl 获取安装脚本: 我们需要先关闭并重新启动终端,但我们可以通过 'nvm -v' 命令检查安装是否成功。如果一切正常,此命令将显示最新的 NVM 版本。 我们可以使用 'nvm ls' 命令查看服务器上安装了哪些版本,并使用 'nvm ls-remote' 命令查看可以从公共存储库获取哪些版本。 使用 NPM (Node Package Manager) 更新 Node.js如果 NVM 对您不起作用,包管理器是我们的下一个最佳方法。NPM 或 Node 包管理器帮助我们发现、分发和使用代码,并在应用程序开发中管理依赖关系。NPM 包含超过 80 万个代码包,供所有开发者使用。 Node.js 会预装 npm,尽管管理器框架的更新通常比 Node.js 更频繁。我们可以按照以下步骤使用此技术进行更新:
我们需要使用 npm 的 n 模块来更新 Node.js。我们可以运行以下命令来安装 n,清除 npm 缓存,并更新到最新的稳定 Node.js 版本: 我们可以在上述命令中将 'n latest' 替换为要获取的最新版本。或者,我们可以运行此命令并指定任何具体的 Node.js 版本号来安装特定版本,以进行沙盒测试或软件兼容性检查。使用二进制包更新 Node.js使用二进制包在 Web 服务器上更新 Node.js 可能会有些复杂。如果我们必须采用此技术,我们可以访问 Node.js 下载页面来获取 Linux 的 64 位或 32 位二进制文件。我们可以通过浏览器下载 Linux 文件,但我们建议使用控制台。请记住,Node.js 版本可能会随着更新的发布而变化。 最佳 Node.js 托管提供商如果我们的应用程序或网站托管在不支持 Node.js 的 Web 主机上,更新 Node.js 可能不会带来太大好处。我们可以找到一些免费的 Node.js 托管。然而,总体最佳的 Web 托管会支持预装的框架,并在新版本发布时自动更新到最新版本。
下一主题WhatsApp Ubuntu |
我们请求您订阅我们的新闻通讯以获取最新更新。