设置 Node 开发环境

既然你已经了解了 Express 的用途,我们将向你展示如何在 Windows、Linux (Ubuntu) 或 macOS 上设置和测试 Node/Express 开发环境。对于所有这些操作系统,本文提供了开始开发 Express 应用所需的一切。

预备知识 了解如何打开终端/命令行。了解如何在开发计算机的操作系统上安装软件包。
目标 在你的计算机上设置 Express 开发环境。

Express 开发环境概述

NodeExpress 使设置你的计算机以开始开发 Web 应用程序变得非常容易。本节概述了所需的工具,解释了在 Ubuntu、macOS 和 Windows 上安装 Node(和 Express)的一些最简单的方法,并展示了如何测试你的安装。

什么是 Express 开发环境?

Express 开发环境包括在你本地计算机上安装 Nodejsnpm 包管理器 和(可选的)Express 应用程序生成器

Nodenpm 包管理器通过预编译的二进制包、安装程序、操作系统包管理器或从源代码(如下节所示)一起安装。然后,Express 通过 npm 作为你的各个 Express Web 应用程序的依赖项(以及其他库,如模板引擎、数据库驱动程序、身份验证中间件、用于提供静态文件的中间件等)进行安装。

npm 还可以用于(全局)安装 Express 应用程序生成器,这是一个方便的工具,用于创建遵循 MVC 模式的骨架 Express Web 应用程序。应用程序生成器是可选的,因为你不需要使用此工具来创建使用 Express 的应用程序,或者构建具有相同架构布局或依赖项的 Express 应用程序。但是,我们将使用它,因为它使入门变得更容易,并促进了模块化的应用程序结构。

注意:与其他一些 Web 框架不同,开发环境不包含单独的开发 Web 服务器。在 Node/Express 中,Web 应用程序创建并运行自己的 Web 服务器!

典型的开发环境中还有其他外围工具,包括用于编辑代码的文本编辑器或 IDE,以及用于安全管理代码不同版本的Git 等源代码管理工具。我们假设你已经安装了这些类型的工具(特别是文本编辑器)。

支持哪些操作系统?

Node 可以在 Windows、macOS、多种 Linux 发行版、Docker 等上运行。Node.js 下载页面上有完整列表。几乎任何个人电脑都应该具备在开发过程中运行 Node 所需的性能。ExpressNode 环境中运行,因此可以在任何运行 Node 的平台上运行。

本文提供了 Windows、macOS 和 Ubuntu Linux 的设置说明。

你应该使用哪个版本的 Node/Express?

Node 有许多版本——较新的版本包含错误修复、支持最新版本的 ECMAScript (JavaScript) 标准,以及 Node API 的改进。

通常你应该使用最新的 LTS(长期支持) 版本,因为它会比“当前”版本更稳定,同时仍然具有相对较新的功能(并且仍在积极维护中)。如果你需要 LTS 版本中不存在的功能,则应该使用 Current 版本。

对于 Express,你应该使用 Node 的最新 LTS 版本。

数据库和其他依赖项呢?

其他依赖项,例如数据库驱动程序、模板引擎、身份验证引擎等,是应用程序的一部分,并使用 npm 包管理器导入到应用程序环境中。我们将在以后的特定于应用程序的文章中讨论它们。

安装 Node

为了使用 Express,你必须在你的操作系统上安装 NodejsNode 包管理器 (npm)。为了简化此过程,我们将首先安装一个 Node 版本管理器,然后使用它来安装最新长期支持 (LTS) 版本的 Node 和 npm。

注意:你也可以使用 https://node.org.cn/en/ 上提供的安装程序安装 Nodejs 和 npm(选择下载“推荐给大多数用户”的 LTS 版本按钮),或者你可以使用操作系统的包管理器安装 (nodejs.org)。我们强烈建议使用 Node 版本管理器,因为它们可以更轻松地安装、升级和切换任何特定版本的 Node 和 npm。

Windows

Windows 有许多 Node 版本管理器。这里我们使用 nvm-windows,它在 Node 开发者中备受推崇。

nvm-windows/releases 页面使用你选择的安装程序安装最新版本。nvm-windows 安装完成后,打开命令提示符(或 PowerShell)并输入以下命令以下载最新 LTS 版本的 Nodejs 和 npm

bash
nvm install lts

在撰写本文时,Nodejs 的 LTS 版本是 22.17.0。你可以使用以下命令将其设置为要使用的当前版本

bash
nvm use 22.17.0

注意:如果出现“Access Denied”警告,你需要在具有管理权限的提示符中运行此命令。

使用命令 nvm --help 查找其他命令行选项,例如列出所有可用的 Node 版本和所有已下载的 NVM 版本。

Ubuntu 和 macOS

Ubuntu 和 macOS 有许多 Node 版本管理器。nvm 是其中一个更受欢迎的,并且是 nvm-windows 所基于的原始版本。请参阅 nvm > 安装和更新脚本以获取在终端中安装最新版 nvm 的说明。

nvm 安装完成后,打开终端并输入以下命令以下载最新 LTS 版本的 Nodejs 和 npm

bash
nvm install --lts

在撰写本文时,Nodejs 的 LTS 版本是 22.17.0。命令 nvm list 显示已下载的版本集和当前版本。你可以使用以下命令将特定版本设置为当前版本(与 nvm-windows 相同)

bash
nvm use 22.17.0

使用命令 nvm --help 查找其他命令行选项。这些选项通常与 nvm-windows 提供的选项相似或相同。

测试你的 Nodejs 和 npm 安装

一旦你将 nvm 设置为使用特定的 Node 版本,你就可以测试安装了。一个很好的方法是在终端/命令提示符中使用“version”命令,并检查是否返回了预期的版本字符串

bash
> node -v
v22.17.0

Nodejs 包管理器 npm 也应该已经安装,并且可以用相同的方式进行测试

bash
> npm -v
10.9.2

作为一个稍微更有趣的测试,让我们创建一个非常基本的“纯 Node”服务器,当你访问浏览器中的正确 URL 时,它会在浏览器中打印“Hello World”

  1. 将以下文本复制到一个名为 hellonode.js 的文件中。这使用纯 Node 功能(不包含 Express 的任何内容)

    js
    // Load HTTP module
    const http = require("http");
    
    const hostname = "127.0.0.1";
    const port = 3000;
    
    // Create HTTP server and listen on port 3000 for requests
    const server = http.createServer((req, res) => {
      // Set the response HTTP header with HTTP status and Content type
      res.statusCode = 200;
      res.setHeader("Content-Type", "text/plain");
      res.end("Hello World\n");
    });
    
    // Listen for request on port 3000, and as a callback function have the port listened on logged
    server.listen(port, hostname, () => {
      console.log(`Server running at http://${hostname}:${port}/`);
    });
    

    代码导入了“http”模块,并使用它创建了一个服务器(createServer()),该服务器在端口 3000 上监听 HTTP 请求。然后,脚本会向控制台打印一条消息,说明你可以使用哪个浏览器 URL 来测试服务器。createServer() 函数接受一个回调函数作为参数,该函数将在收到 HTTP 请求时调用——它返回一个 HTTP 状态码为 200(“OK”)和纯文本“Hello World”的响应。

    注意:如果现在还不完全理解这段代码在做什么,也不用担心!我们将在开始使用 Express 后更详细地解释我们的代码!

  2. 通过在命令提示符中导航到与 hellonode.js 文件相同的目录,并调用 node 以及脚本名称来启动服务器,如下所示

    bash
    node hellonode.js
    

    服务器启动后,你将看到控制台输出,指示服务器运行的 IP 地址

    Server running at http://127.0.0.1:3000/
    
  3. 导航到 URL http://127.0.0.1:3000。如果一切正常,浏览器应该显示字符串“Hello World”。

使用 npm

除了 Node 本身,npm 是使用 Node 应用程序最重要的工具。npm 用于获取应用程序开发、测试和/或生产所需的任何包(JavaScript 库),也可以用于运行开发过程中使用的测试和工具。

注意:从 Node 的角度来看,Express 只是另一个你需要使用 npm 安装并在自己的代码中引用的包。

你可以手动使用 npm 单独获取每个所需的包。通常,我们 instead 使用名为 package.json 的纯文本定义文件来管理依赖项。此文件列出了特定 JavaScript“包”的所有依赖项,包括包的名称、版本、描述、要执行的初始文件、生产依赖项、开发依赖项、可以使用的 Node 版本等。package.json 文件应包含 npm 获取和运行你的应用程序所需的一切(如果你正在编写一个可重用库,你可以使用此定义将你的包上传到 npm 仓库并供其他用户使用)。

添加依赖项

以下步骤展示了如何使用 npm 下载包,将其保存到项目依赖项中,然后在 Node 应用程序中引用它。

注意:这里我们展示了获取和安装 Express 包的说明。稍后我们将展示如何使用 Express Application Generator 为我们指定此包和其他包。提供本节是因为理解 npm 的工作原理以及应用程序生成器创建了什么很有用。

  1. 首先为你的新应用程序创建一个目录并导航到它

    bash
    mkdir myapp
    cd myapp
    
  2. 使用 npm init 命令为你的应用程序创建 package.json 文件。此命令会提示你输入许多信息,包括应用程序的名称和版本以及初始入口文件(默认为 index.js)的名称。现在,只需接受默认值即可

    bash
    npm init
    

    如果你显示 package.json 文件 (cat package.json),你将看到你接受的默认值,以许可证结尾。

    json
    {
      "name": "myapp",
      "version": "1.0.0",
      "main": "index.js",
      "scripts": {
        "test": "echo \"Error: no test specified\" && exit 1"
      },
      "author": "",
      "license": "ISC",
      "description": ""
    }
    
  3. 现在在 myapp 目录中安装 Express,并将其保存在你的 package.json 文件的依赖项列表中

    bash
    npm install express
    

    你的 package.json 的依赖项部分现在将出现在 package.json 文件的末尾,并将包含 Express

    json
    {
      "name": "myapp",
      "version": "1.0.0",
      "description": "",
      "main": "index.js",
      "scripts": {
        "test": "echo \"Error: no test specified\" && exit 1"
      },
      "author": "",
      "license": "ISC",
      "dependencies": {
        "express": "^5.1.0"
      }
    }
    
  4. 要使用 Express 库,你需要在 index.js 文件中调用 require() 函数以将其包含在你的应用程序中。现在在“myapp”应用程序目录的根目录中创建此文件,并为其提供以下内容

    js
    const express = require("express");
    
    const app = express();
    const port = 3000;
    
    app.get("/", (req, res) => {
      res.send("Hello World!");
    });
    
    app.listen(port, () => {
      console.log(`Example app listening on port ${port}!`);
    });
    

    这段代码展示了一个最小的“HelloWorld”Express Web 应用程序。它使用 require() 导入“express”模块,并用它来创建一个服务器(app),该服务器在端口 3000 上监听 HTTP 请求,并向控制台打印一条消息,解释你可以使用哪个浏览器 URL 来测试服务器。app.get() 函数只响应带有指定 URL 路径 ('/') 的 HTTP GET 请求,在这种情况下,它会调用一个函数来发送我们的 Hello World! 消息。

    注意:`Example app listening on port ${port}!` 中的反引号允许我们将 $port 的值插入到字符串中。

  5. 你可以通过在命令提示符中调用带有脚本的 Node 来启动服务器

    bash
    node index.js
    

    你将看到以下控制台输出

    Example app listening on port 3000
    
  6. 导航到 URL https://:3000/。如果一切正常,浏览器应该显示字符串“Hello World!”。

开发依赖项

如果依赖项仅在开发期间使用,则应将其保存为“开发依赖项”(这样你的包用户在生产环境中就不必安装它)。例如,要使用流行的 JavaScript Linting 工具 ESLint,你可以按如下方式调用 npm

bash
npm install eslint --save-dev

然后,以下条目将添加到你的应用程序的 package.json

json
{
  "devDependencies": {
    "eslint": "^9.30.1"
  }
}

注意:Linter”是执行软件静态分析的工具,用于识别和报告是否遵循某些编码最佳实践。

运行任务

除了定义和获取依赖项之外,你还可以在 package.json 文件中定义命名脚本,并调用 npm 使用 run-script 命令执行它们。这种方法通常用于自动化运行测试和开发或构建工具链的一部分(例如,运行工具来缩小 JavaScript、压缩图像、LINT/分析你的代码等)。

注意:GulpGrunt 这样的任务运行器也可以用来运行测试和其他外部工具。

例如,要定义一个脚本来运行我们在上一节中指定的 eslint 开发依赖项,我们可以将以下脚本块添加到我们的 package.json 文件中(假设我们的应用程序源代码在文件夹 /src/js 中)

json
{
  "scripts": {
    // …
    "lint": "eslint src/js"
    // …
  }
}

进一步解释一下,eslint src/js 是我们可以在终端/命令行中输入的命令,用于对应用程序目录中 src/js 目录下的 JavaScript 文件运行 eslint。将上述内容包含在应用程序的 package.json 文件中,为该命令 lint 提供了一个快捷方式。

然后我们可以通过调用 npm 来运行 eslint

bash
npm run-script lint
# OR (using the alias)
npm run lint

这个示例可能看起来并不比原始命令短,但你可以在 npm 脚本中包含更大的命令,包括多个命令链。你可以识别一个 npm 脚本,一次运行所有测试。

安装 Express 应用程序生成器

Express 应用程序生成器工具生成一个 Express 应用程序“骨架”。使用 npm 安装生成器,如下所示

bash
npm install express-generator -g

注意:在 Ubuntu 或 macOS 上,你可能需要在这一行前面加上 sudo-g 标志全局安装该工具,以便你可以在任何地方调用它。

要使用默认设置创建名为“helloworld”的 Express 应用程序,请导航到要创建它的位置并按如下方式运行该应用程序

bash
express helloworld

注意:除非你使用的是旧版 Nodejs(< 8.2.0),否则你可以跳过安装,直接使用 npx 运行 express-generator。这与安装然后运行 express-generator 具有相同的效果,但不会在你的系统上安装该包

bash
npx express-generator helloworld

你还可以指定要使用的模板库和许多其他设置。使用 help 命令查看所有选项

bash
express --help

生成器将在你当前位置的子文件夹中创建新的 Express 应用程序,并在控制台上显示构建进度。完成后,该工具将显示你需要输入的命令以安装 Node 依赖项并启动应用程序。

新应用程序的根目录中将有一个 package.json 文件。你可以打开它查看安装了哪些依赖项,包括 Express 和模板库 Jade

json
{
  "name": "helloworld",
  "version": "0.0.0",
  "private": true,
  "scripts": {
    "start": "node ./bin/www"
  },
  "dependencies": {
    "cookie-parser": "~1.4.4",
    "debug": "~2.6.9",
    "express": "~4.16.1",
    "http-errors": "~1.6.3",
    "jade": "~1.11.0",
    "morgan": "~1.9.1"
  }
}

使用 npm 安装 helloworld 应用程序的所有依赖项,如下所示

bash
cd helloworld
npm install

然后运行应用程序(Windows 和 Linux/macOS 的命令略有不同),如下所示

bash
# Run helloworld on Windows with Command Prompt
SET DEBUG=helloworld:* & npm start

# Run helloworld on Windows with PowerShell
SET DEBUG=helloworld:* | npm start

# Run helloworld on Linux/macOS
DEBUG=helloworld:* npm start

DEBUG 命令会创建有用的日志记录,导致如下输出

bash
>SET DEBUG=helloworld:* & npm start

> helloworld@0.0.0 start D:\GitHub\express-tests\helloworld
> node ./bin/www

  helloworld:server Listening on port 3000 +0ms

打开浏览器并导航到 https://:3000/ 以查看默认的 Express 欢迎页面。

Express - Generated App Default Screen

当我们撰写生成骨架应用程序的文章时,我们将更多地讨论生成的应用程序。

总结

你现在已经拥有一个在你的计算机上运行的 Node 开发环境,可以用于创建 Express Web 应用程序。你还了解了如何使用 npm 将 Express 导入应用程序,以及如何使用 Express 应用程序生成器工具创建应用程序并运行它们。

在下一篇文章中,我们将开始通过教程使用此环境和相关工具构建一个完整的 Web 应用程序。

另见