Ubuntu 下高效搭建 Node.js 开发环境 – wiki基地


在 Ubuntu 下高效搭建 Node.js 开发环境:从零到生产就绪

前言:开启全栈开发之旅

在当今高速迭代的数字世界中,Node.js 已然成为后端开发领域的一股强大力量。它基于 Google Chrome V8 引擎,以其非阻塞I/O、事件驱动的特性,在构建高性能、可扩展的网络应用(如实时聊天、API服务、微服务架构等)方面展现出无与伦比的优势。与此同时,Ubuntu 作为广受开发者喜爱的 Linux 发行版,以其稳定性、强大的社区支持以及对各种开发工具的良好兼容性,成为了搭建开发环境的理想选择。

本篇文章将为您提供一份详尽的指南,旨在帮助您在 Ubuntu 操作系统上高效、稳健地搭建 Node.js 开发环境。我们将不仅仅停留在简单的安装步骤,更会深入探讨最佳实践、常用工具的配置以及性能优化的策略,力求让您的开发环境从一开始就具备专业性和生产就绪性。

第一章:准备工作与系统基础配置

在着手安装 Node.js 之前,确保您的 Ubuntu 系统处于最新状态是至关重要的。这不仅能修复潜在的安全漏洞,还能确保软件包依赖的完整性,避免因版本不匹配导致的问题。

1.1 系统更新与升级

打开您的终端(快捷键 Ctrl + Alt + T),输入以下命令:

bash
sudo apt update # 更新软件包列表,获取最新可用的软件包信息
sudo apt upgrade -y # 升级所有已安装的软件包到最新版本,-y 选项表示自动确认
sudo apt autoremove -y # 移除不再需要的依赖包,清理系统

执行这些命令可能需要一些时间,具体取决于您的网络速度和上次更新的时间。完成后,您的系统将拥有最新的核心组件和库。

1.2 安装必要的构建工具

许多 Node.js 模块(特别是那些包含 C++ 扩展的模块,如 node-sasssqlite3 等)在安装时需要编译。因此,安装 build-essential 包是必不可少的,它包含了 GCC 编译器、Make 等基本开发工具。

bash
sudo apt install build-essential -y

同时,为了方便地从互联网下载安装脚本或资源,curlwget 也是常用的工具,通常系统会自带,但检查并安装一遍更为保险。

bash
sudo apt install curl wget -y

1.3 安装 Git (版本控制系统)

Git 是现代软件开发中不可或缺的版本控制系统。您的 Node.js 项目将高度依赖它来管理代码、协作开发。

bash
sudo apt install git -y

安装完成后,配置您的 Git 用户名和邮箱,这将用于提交记录:

bash
git config --global user.name "Your Name"
git config --global user.email "[email protected]"

第二章:Node.js 版本管理与安装(核心)

Node.js 的版本迭代速度非常快,不同的项目可能依赖于不同版本的 Node.js。直接通过 Ubuntu 的 apt 包管理器安装 Node.js 虽然简单,但通常提供的版本较旧,且难以管理多个版本。因此,我们强烈推荐使用 Node Version Manager(NVM)来安装和管理 Node.js。

2.1 为什么选择 NVM?

  • 多版本管理:NVM 允许您在同一台机器上安装和切换多个 Node.js 版本,这对于维护旧项目或测试新特性至关重要。
  • 灵活升级:您可以轻松安装最新版本的 Node.js 或回滚到特定版本。
  • 权限管理:NVM 安装的 Node.js 和 npm 包通常不会引起权限问题,因为它安装在用户的主目录下,而非系统全局。
  • 隔离性:不同版本的 Node.js 环境相互独立,避免了全局包的冲突。

2.2 安装 NVM

NVM 的安装非常简单,通常通过 curl 或 wget 脚本完成。请访问 NVM 的 GitHub 仓库获取最新安装脚本地址(通常是 https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh,请根据实际情况更新版本号)。

“`bash

使用 curl 下载并执行安装脚本

curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash

或者使用 wget

wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash

“`

安装完成后,您需要重新加载终端的配置文件(如 .bashrc, .zshrc.profile),使 NVM 命令生效。最简单的方法是关闭并重新打开终端,或者手动执行:

“`bash
source ~/.bashrc # 如果您使用的是 Bash

source ~/.zshrc # 如果您使用的是 Zsh

source ~/.profile # 如果以上都不行,尝试这个

“`

验证 NVM 是否安装成功:

bash
nvm --version

如果显示版本号,则说明 NVM 已成功安装。

2.3 使用 NVM 安装 Node.js

现在,您可以使用 NVM 来安装您需要的 Node.js 版本。

  • 安装最新稳定版 (LTS – Long Term Support): 推荐用于生产环境。

    bash
    nvm install --lts

  • 安装最新版本:

    bash
    nvm install node

  • 安装指定版本: 例如,安装 Node.js 18.x.x。

    “`bash
    nvm install 18

    或者 nvm install 18.17.1 (指定精确版本)

    “`

  • 查看所有已安装版本:

    bash
    nvm ls

  • 切换 Node.js 版本:

    bash
    nvm use 18 # 切换到 18.x.x 版本
    nvm use node # 切换到最新版本

  • 设置默认 Node.js 版本: 每次打开新终端时自动使用该版本。

    bash
    nvm alias default 18

  • 卸载某个版本:

    bash
    nvm uninstall 16

安装并切换到您需要的版本后,验证 Node.js 和 npm 是否正确安装:

bash
node -v
npm -v

第三章:包管理器:NPM 与 Yarn

Node.js 生态系统之所以如此繁荣,很大程度上得益于其强大的包管理器。NPM (Node Package Manager) 是 Node.js 默认自带的包管理器,而 Yarn 是由 Facebook 开发的替代品,旨在解决 NPM 的一些痛点。

3.1 NPM (Node Package Manager)

NPM 随 Node.js 一同安装,无需额外配置。

  • 初始化项目: 在项目根目录创建 package.json 文件。

    bash
    npm init -y # -y 选项表示使用默认值快速初始化

  • 安装项目依赖: 安装 package.json 中列出的所有依赖。

    bash
    npm install

  • 安装单个包:

    bash
    npm install <package-name> # 安装到项目依赖 (dependencies)
    npm install <package-name> --save-dev # 安装到开发依赖 (devDependencies),简写 npm i -D <package-name>
    npm install -g <package-name> # 全局安装,通常用于命令行工具

  • 更新包:

    bash
    npm update <package-name>
    npm update # 更新所有依赖到最新兼容版本

  • 卸载包:

    bash
    npm uninstall <package-name>

  • 运行脚本: 执行 package.jsonscripts 字段定义的命令。

    bash
    npm run <script-name>

3.2 Yarn

Yarn 旨在提供更快的安装速度、更好的离线支持和更可靠的依赖管理(通过 yarn.lock 文件)。

  • 安装 Yarn:

    “`bash
    npm install -g yarn # 如果您使用 NVM,这是推荐的安装方式

    或者通过 apt 安装 (可能会安装较旧的版本):

    curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add –

    echo “deb https://dl.yarnpkg.com/debian/ stable main” | sudo tee /etc/apt/sources.list.d/yarn.list

    sudo apt update && sudo apt install yarn -y

    “`

  • 验证 Yarn 安装:

    bash
    yarn --version

  • 初始化项目:

    bash
    yarn init -y

  • 安装项目依赖:

    “`bash
    yarn

    或者 yarn install

    “`

  • 安装单个包:

    bash
    yarn add <package-name>
    yarn add <package-name> --dev # 安装到开发依赖,简写 yarn add <package-name> -D
    yarn global add <package-name> # 全局安装

  • 更新包:

    bash
    yarn upgrade <package-name>
    yarn upgrade # 更新所有依赖

  • 卸载包:

    bash
    yarn remove <package-name>

  • 运行脚本:

    bash
    yarn <script-name> # 注意:Yarn 运行脚本时不需要 `run` 关键字

选择建议: 对于新项目,Yarn 往往能提供更快的安装体验和更稳定的依赖管理。然而,NPM 也在不断进步,新版 NPM (v7+) 引入了 package-lock.json 和工作区等功能,性能和稳定性都有显著提升。最终选择取决于个人偏好和团队约定。许多项目会同时支持两种包管理器。

第四章:集成开发环境 (IDE) / 代码编辑器

一个高效的代码编辑器能极大地提升开发效率。Visual Studio Code (VS Code) 是目前最受欢迎的 Node.js 开发编辑器,它轻量、功能强大且拥有庞大的扩展生态系统。

4.1 安装 Visual Studio Code

VS Code 可以通过 Snap Store 或直接下载 .deb 包安装。推荐使用 Snap,因为它能自动管理更新。

方法一:通过 Snap 安装 (推荐)

bash
sudo snap install code --classic

方法二:通过 .deb 包安装

  1. 访问 VS Code 官方网站下载适用于 Debian/Ubuntu 的 .deb 包:https://code.visualstudio.com/download
  2. 下载完成后,在终端中进入下载目录,然后执行:

    bash
    sudo dpkg -i code_*.deb
    sudo apt install -f # 修复依赖问题

安装完成后,您可以在 Ubuntu 的应用程序菜单中找到并启动 Visual Studio Code。

4.2 VS Code 常用扩展推荐

以下是一些能显著提升 Node.js 开发体验的 VS Code 扩展:

  • ESLint: 代码风格检查和自动修复。
  • Prettier – Code formatter: 自动代码格式化,保持代码风格一致。
  • DotENV: 突出显示 .env 文件中的环境变量。
  • GitLens: 增强 Git 功能,如代码作者信息、提交历史等。
  • Path Intellisense: 文件路径自动补全。
  • Docker: Dockerfile 和 Docker Compose 支持,方便容器化开发。
  • REST Client (或 Thunder Client): 直接在编辑器中发送 HTTP 请求,测试 API。
  • Live Server: 适用于前端开发,实时预览 HTML/CSS/JS 变更。
  • Material Icon Theme / Atom One Dark Theme: 美化图标和主题,提升视觉体验。
  • JavaScript (ES6) code snippets: 常用 JavaScript 代码片段快速生成。

安装扩展: 在 VS Code 中,点击左侧边栏的“Extensions”图标 (或按 Ctrl+Shift+X),搜索并安装这些扩展。

4.3 配置 VS Code

  • 设置同步: 登录 GitHub 或 Microsoft 账户,开启设置同步,这样您的配置和扩展可以在不同设备间同步。
  • 集成终端: VS Code 内置的终端非常方便,您可以在其中直接运行 Node.js 命令。
  • 工作区 (Workspaces): 对于包含多个子项目的复杂应用(如 Monorepo),使用工作区可以更好地组织和管理代码。

第五章:数据库集成(常用选择)

多数 Node.js 应用都需要与数据库进行交互。根据您的项目需求,可以选择关系型数据库或非关系型数据库。以下是 Node.js 社区中最受欢迎的几个数据库及其在 Ubuntu 上的安装方法。

5.1 MongoDB (NoSQL 文档数据库)

MongoDB 是一个流行的 NoSQL 数据库,以其灵活的文档模型、高可扩展性和易用性而闻名,尤其适合处理大量非结构化数据。Mongoose ODM 是 Node.js 中操作 MongoDB 的常用库。

安装步骤:

  1. 导入 MongoDB 公钥:

    bash
    curl -fsSL https://www.mongodb.org/static/pgp/server-6.0.asc | \
    sudo gpg --dearmor | sudo tee /etc/apt/trusted.gpg.d/mongodb-org-6.0.gpg > /dev/null

    注意:请根据 MongoDB 官方文档检查最新版本和对应的公钥 URL。上述示例使用的是 6.0 版本。

  2. 为 MongoDB 创建列表文件:

    bash
    echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu focal/mongodb-org/6.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-6.0.list

    注意:focal 是 Ubuntu 20.04 的代号,请根据您的 Ubuntu 版本(如 22.04 LTS 对应 jammy)修改。

  3. 更新 apt 索引并安装 MongoDB:

    bash
    sudo apt update
    sudo apt install -y mongodb-org

  4. 启动 MongoDB 服务并设置开机自启:

    bash
    sudo systemctl start mongod
    sudo systemctl enable mongod

  5. 验证服务状态:

    bash
    sudo systemctl status mongod

    如果显示 active (running),则表示服务已成功启动。

  6. Node.js 中使用:

    “`bash
    npm install mongodb # 官方驱动

    或者 npm install mongoose # 更常用的 ODM

    “`

5.2 PostgreSQL (关系型数据库)

PostgreSQL 是一个功能强大的开源关系型数据库管理系统,以其数据完整性、丰富的功能集和高并发性能而受到推崇。

安装步骤:

  1. 安装 PostgreSQL 服务器:

    bash
    sudo apt install postgresql postgresql-contrib -y

  2. 切换到 postgres 用户并进入 psql 命令行界面:

    bash
    sudo -i -u postgres
    psql

  3. psql 中创建数据库用户和数据库:

    sql
    CREATE USER myuser WITH PASSWORD 'mypassword';
    CREATE DATABASE mydatabase OWNER myuser;
    \q # 退出 psql
    exit # 退出 postgres 用户

    注意:请替换 myusermypassword 为您自己的用户名和密码。

  4. Node.js 中使用:

    “`bash
    npm install pg # 官方 Node.js 驱动

    或者 npm install sequelize # 常用 ORM

    “`

5.3 MySQL / MariaDB (关系型数据库)

MySQL 和其分支 MariaDB 是世界上最流行的关系型数据库管理系统之一,广泛用于 Web 应用开发。

安装 MariaDB (与 MySQL 高度兼容):

  1. 安装 MariaDB 服务器:

    bash
    sudo apt install mariadb-server mariadb-client -y

  2. 运行安全安装脚本: 首次安装后,运行此脚本可以帮助您设置 root 密码、删除匿名用户、禁止 root 远程登录等。

    bash
    sudo mysql_secure_installation

    按照提示操作,设置强密码,并选择 Y/Yes 接受默认的安全设置。

  3. 登录 MariaDB shell 并创建用户和数据库(可选):

    bash
    sudo mysql -u root -p

    输入您刚才设置的 root 密码。

    sql
    CREATE DATABASE mydatabase;
    CREATE USER 'myuser'@'localhost' IDENTIFIED BY 'mypassword';
    GRANT ALL PRIVILEGES ON mydatabase.* TO 'myuser'@'localhost';
    FLUSH PRIVILEGES;
    EXIT;

  4. Node.js 中使用:

    “`bash
    npm install mysql2 # 推荐使用 mysql2,它提供更好的性能和 Promise 支持

    或者 npm install sequelize # 常用 ORM

    “`

第六章:进程管理与守护

在开发和部署 Node.js 应用时,确保应用在后台持续运行、自动重启以及管理多个进程是至关重要的。PM2 (Process Manager 2) 是一个功能丰富的 Node.js 进程管理器。

6.1 安装 PM2

PM2 是一个全局安装的 Node.js 包:

bash
npm install -g pm2

6.2 PM2 常用命令

  • 启动应用:

    bash
    pm2 start app.js # 启动一个名为 app.js 的应用
    pm2 start app.js --name "my-api" # 指定应用名称
    pm2 start app.js -i 4 # 启动 4 个实例 (集群模式),-i max 表示根据 CPU 核数自动决定实例数量

  • 查看应用列表:

    “`bash
    pm2 list

    或者 pm2 ls

    “`

  • 查看应用状态和日志:

    bash
    pm2 show <app-name|id> # 查看特定应用的详细信息
    pm2 logs # 查看所有应用的实时日志
    pm2 logs <app-name|id> # 查看特定应用的实时日志
    pm2 monit # 实时监控所有应用的 CPU/内存使用情况

  • 停止、重启、删除应用:

    bash
    pm2 stop <app-name|id>
    pm2 restart <app-name|id>
    pm2 delete <app-name|id>
    pm2 stop all # 停止所有应用
    pm2 restart all # 重启所有应用
    pm2 delete all # 删除所有应用

  • 配置开机自启: 确保服务器重启后应用能自动启动。

    “`bash
    pm2 startup systemd # 生成 systemd 启动脚本

    按照提示复制并执行生成的命令,例如:

    sudo env PATH=$PATH:/home/youruser/.nvm/versions/node/v18.17.1/bin /home/youruser/.nvm/versions/node/v18.17.1/lib/node_modules/pm2/bin/pm2 startup systemd -u youruser –hp /home/youruser

    pm2 save # 保存当前运行的应用列表,以便开机自启时加载
    “`

6.3 使用 PM2 配置文件(ecosystem.config.js

对于更复杂的应用或多服务项目,使用配置文件管理 PM2 进程更为高效。

  1. 生成配置文件模板:

    bash
    pm2 ecosystem

    这会在当前目录生成一个 ecosystem.config.js 文件。

  2. 编辑 ecosystem.config.js

    javascript
    module.exports = {
    apps : [{
    name : "my-api", // 应用名称
    script : "./app.js", // 应用入口文件
    env_production: {
    NODE_ENV: "production"
    },
    env_development: {
    NODE_ENV: "development"
    },
    instances: 1, // 启动实例数量
    exec_mode: "fork", // 启动模式:fork (默认) 或 cluster
    watch: true, // 开启文件监控,文件变化时自动重启 (开发环境推荐)
    ignore_watch : ["node_modules", "logs"], // 忽略监控的目录
    max_memory_restart: "300M", // 内存超过此值时自动重启
    log_file: "logs/combined.log", // 合并日志文件
    error_file: "logs/error.log", // 错误日志文件
    out_file: "logs/out.log" // 标准输出日志文件
    }, {
    name : "my-websocket",
    script : "./websocket-server.js",
    instances: "max",
    exec_mode: "cluster"
    }]
    };

  3. 使用配置文件启动应用:

    “`bash
    pm2 start ecosystem.config.js

    或者 pm2 start ecosystem.config.js –env production # 使用生产环境配置

    “`

第七章:环境配置与安全性

在 Node.js 开发中,正确管理配置信息(如数据库凭据、API 密钥等)和环境变量至关重要,尤其是在开发和生产环境之间切换时。

7.1 使用 .env 文件和 dotenv

将敏感信息和环境相关的配置存储在 .env 文件中是最佳实践。这些文件不会被提交到版本控制系统(通过 .gitignore 忽略)。

  1. 创建 .env 文件: 在项目根目录创建 .env 文件。

    DB_HOST=localhost
    DB_PORT=5432
    DB_USER=myuser
    DB_PASS=mypassword
    API_KEY=your_secret_key
    NODE_ENV=development
    PORT=3000

  2. 安装 dotenv 包:

    bash
    npm install dotenv

  3. 在 Node.js 应用中加载 .env 文件: 在应用程序的入口文件(通常是 app.jsindex.js)的顶部添加:

    “`javascript
    require(‘dotenv’).config();

    const express = require(‘express’);
    const app = express();

    const PORT = process.env.PORT || 8080;
    const DB_USER = process.env.DB_USER;
    const DB_PASS = process.env.DB_PASS;

    console.log(Running in ${process.env.NODE_ENV} mode.);
    console.log(Database User: ${DB_USER});

    app.get(‘/’, (req, res) => {
    res.send(‘Hello Node.js from Ubuntu!’);
    });

    app.listen(PORT, () => {
    console.log(Server listening on port ${PORT});
    });
    “`

  4. 添加到 .gitignore 确保 .env 文件不被 Git 追踪。

    “`

    .gitignore

    .env
    “`

第八章:高级技巧与最佳实践

8.1 Shell 优化 (Zsh + Oh My Zsh)

默认的 Bash shell 已经很强大,但 Zsh 配合 Oh My Zsh 框架可以提供更强大的功能、更丰富的插件和主题,显著提升终端使用体验。

  1. 安装 Zsh:

    bash
    sudo apt install zsh -y

  2. 安装 Oh My Zsh:

    bash
    sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"

  3. 常用插件 (在 ~/.zshrc 中配置):

    • git: 提供大量 Git 别名和功能。
    • nvm: 自动加载 nvm。
    • zsh-autosuggestions: 基于历史命令的自动补全。
    • zsh-syntax-highlighting: 命令高亮。

    安装这些插件后,编辑 ~/.zshrc 文件,找到 plugins=(...) 行,添加插件名称。

    “`bash

    例如:

    plugins=(git nvm zsh-autosuggestions zsh-syntax-highlighting)
    “`

    保存文件后,重新加载 Zsh 配置:source ~/.zshrc

8.2 Linting 和 Prettier

  • ESLint: 代码质量检查工具,帮助您发现并修复代码中的问题,统一代码风格。
    • 安装:npm install -D eslint
    • 初始化:npx eslint --init
    • VS Code 扩展:ESLint。
  • Prettier: 强大的代码格式化工具,与 ESLint 配合使用可以实现代码风格的自动化。
    • 安装:npm install -D prettier eslint-config-prettier eslint-plugin-prettier
    • 配置:在 .eslintrc.js 中添加 Prettier 配置。
    • VS Code 扩展:Prettier – Code formatter。

8.3 测试框架

  • Jest: Facebook 开发的流行测试框架,零配置、功能强大,支持单元测试、集成测试、快照测试等。
    • 安装:npm install -D jest
    • package.json 中添加 test 脚本:"test": "jest"
  • Mocha & Chai: 灵活的测试框架组合,Mocha 提供测试运行器,Chai 提供断言库。
    • 安装:npm install -D mocha chai

8.4 Docker & Docker Compose (容器化)

虽然超出了本文的直接范围,但容器化是现代开发和部署的趋势。通过 Docker,您可以将 Node.js 应用及其所有依赖(包括数据库)打包成一个独立的、可移植的单元,确保开发、测试和生产环境的一致性。

  • 安装 Docker: 请参考 Docker 官方文档在 Ubuntu 上安装 Docker Engine。
  • 安装 Docker Compose: 同样参考 Docker 官方文档。
  • 益处: 避免“在我的机器上能运行”的问题,简化环境搭建和部署流程。

第九章:常见问题与故障排除

  • NPM / Yarn 权限错误 (EACCES):
    这通常发生在全局安装包时。使用 NVM 可以很大程度上避免此问题。如果仍然遇到,尝试修复 npm 的默认目录权限:
    bash
    npm config set prefix '~/.npm-global'
    echo 'export PATH=~/.npm-global/bin:$PATH' >> ~/.profile
    source ~/.profile
    # 然后清理 npm 缓存
    npm cache clean --force

    或者直接使用 sudo (不推荐用于全局包安装,除非您清楚自己在做什么)。
  • node-gyp 编译错误:
    通常是缺少 build-essential 包或 Python 2.x/3.x。确保您已安装 build-essential
    bash
    sudo apt install python3 -y # 或者 python2.7
  • 端口被占用 (EADDRINUSE):
    当您尝试启动应用但某个端口已被其他进程占用时会发生。
    bash
    sudo lsof -i :<PORT_NUMBER> # 例如:sudo lsof -i :3000

    找到占用端口的进程 ID (PID),然后使用 kill -9 <PID> 杀死该进程。
  • Node.js 或 NPM 版本过旧:
    使用 NVM 轻松切换或更新到最新版本。
    bash
    nvm install node # 安装最新版本
    nvm use node # 切换到最新版本
    npm install -g npm@latest # 更新 npm
  • 依赖安装缓慢:
    尝试更换 NPM/Yarn 的镜像源到国内镜像:
    bash
    # NPM 镜像
    npm config set registry https://registry.npmmirror.com
    # Yarn 镜像
    yarn config set registry https://registry.npmmirror.com

    您也可以使用 cnpm (淘宝 NPM 镜像的命令行工具),但通常更换 registry 更推荐。

结语:高效不止于安装

恭喜您!通过遵循本指南,您已在 Ubuntu 上搭建了一个强大、高效且生产就绪的 Node.js 开发环境。这不仅仅是 Node.js 运行时和包管理器的安装,更涵盖了从版本管理、IDE 配置、数据库集成到进程守护和环境安全的方方面面。

一个优质的开发环境是提升开发效率和项目质量的基石。希望本篇文章能帮助您在 Node.js 的全栈开发旅程中,少走弯路,更加专注于代码的编写和业务逻辑的实现。记住,技术栈持续演进,保持学习的心态,定期更新您的工具和知识,将使您始终处于前沿。祝您开发愉快!

发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注

滚动至顶部