设置 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 版本中没有的功能,则应使用 当前 版本。

对于 Express,您应该始终使用最新版本。

数据库和其他依赖项呢?

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

安装 Node

为了使用 Express,您必须在操作系统上安装 NodejsNode 包管理器 (npm)。为了简化此操作,我们将首先安装一个 Node 版本管理器,然后我们将使用它来安装最新版本的 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)并输入以下命令以下载最新版本的 nodejs 和 npm

bash
nvm install lts

在撰写本文时,nodejs 的 LTS 版本为 20.11.0。您可以使用以下命令将其设置为 当前版本

bash
nvm use 20.11.0

注意:如果您收到“拒绝访问”警告,则需要在具有管理员权限的提示符中运行此命令。

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

Ubuntu 和 macOS

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

安装 nvm 后,打开一个终端,输入以下命令以下载最新版本的 nodejs 和 npm

bash
nvm install --lts

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

bash
nvm use 20.11.0

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

测试 Nodejs 和 npm 安装

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

bash
> node -v
v20.11.0

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

bash
> npm -v
10.2.4

作为更有趣的测试,让我们创建一个非常基本的“纯 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 分别获取每个需要的包。通常,我们使用名为 package.json 的纯文本定义文件来管理依赖项。此文件列出了特定 JavaScript “包”的所有依赖项,包括包的名称、版本、描述、要执行的初始文件、生产依赖项、开发依赖项、它可以使用的 Node 版本等。package.json 文件应包含 npm 获取和运行应用程序所需的一切(如果您要编写可重用的库,则可以使用此定义将您的包上传到 npm 存储库,并使其可供其他用户使用)。

添加依赖项

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

注意:这里我们展示了获取和安装 Express 包的说明。稍后,我们将展示如何使用 Express 应用程序生成器 为我们预先指定此包和其他包。提供本节是因为了解 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",
      "description": "",
      "main": "index.js",
      "scripts": {
        "test": "echo \"Error: no test specified\" && exit 1"
      },
      "author": "",
      "license": "ISC"
    }
    
  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": "^4.17.1"
      }
    }
    
  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://127.0.0.1:3000/。如果一切正常,浏览器应该显示字符串 "Hello World!"。

开发依赖项

如果依赖项仅在开发期间使用,则应将其保存为 "开发依赖项"(这样您的包用户就不必在生产环境中安装它)。例如,要使用流行的 JavaScript 代码质量检查工具 ESLint,您可以像下面这样调用 npm

bash
npm install eslint --save-dev

然后,以下条目将被添加到您的应用程序的 **package.json** 中

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

注意: "代码质量检查工具" 是执行软件静态分析以识别和报告是否符合某些编码最佳实践的工具。

运行任务

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

注意: 诸如 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

> [email protected] start D:\GitHub\expresstests\helloworld
> node ./bin/www

  helloworld:server Listening on port 3000 +0ms

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

Express - Generated App Default Screen

当我们开始介绍生成框架应用程序的文章时,我们将详细讨论生成的应用程序。

总结

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

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

另请参阅