三亩地 三亩地SAN MU DI · CODE DIARY
ARTICLE DETAIL

日记详情

真实记录编程学习的某一天,欢迎挑你感兴趣的翻一翻。

TypeScript与Node.js开发环境搭建:从安装到部署的完整指南

TypeScript与Node.js开发环境搭建:从安装到部署的完整指南

1. 从“能跑起来”开始:为什么基础环境安装是第一个要过的坎

很多人在接触 TypeScript、Node.js 或者任何需要本地开发环境的技术栈时,最容易卡住的地方不是代码逻辑,而是第一步——环境安装。你可能已经看过很多教程,但依然会遇到node -v不识别、npm install报错、或者 TypeScript 编译后找不到模块这类问题。这通常不是因为教程错了,而是因为每个人的操作系统、权限和历史安装残留都不一样,教程很难覆盖所有情况。

这篇文章不打算罗列所有可能的安装命令,而是想分享一套更稳妥的思路:把环境安装看作一个可验证、可排查的工程问题,而不是一个“照着做就行”的步骤。无论你是要搭建一个 TypeScript + Node.js 的后端服务,还是要连接数据库、使用 CLI 工具,甚至是部署 Web API,第一步都是让基础环境在你的机器上“活”起来。我会从 Node.js 安装这个最核心的环节开始,拆解其中的关键决策点、验证方法和常见坑位,确保你不仅能执行命令,还能理解为什么这么做,以及出了问题该往哪个方向看。

2. 核心决策:Node.js 安装路径、版本与包管理器

安装 Node.js 远不止是下载一个安装包。你需要决定三件事:安装在哪里、装哪个版本、以及用哪个包管理器。这三个决定会直接影响后续所有工具的兼容性和你的开发体验。

2.1 安装位置:全局路径与用户目录

在 Windows 上,默认安装会建议放到C:\Program Files\nodejs。在 macOS 或 Linux 上,通过官网 pkg 或 apt 安装也通常是全局路径。这听起来很正规,但会带来一个经典问题:权限

当你全局安装一个 CLI 工具(比如npm install -g @vue/cli)时,可能需要管理员权限。在 Linux/macOS 上,你可能会频繁使用sudo,这可能导致后续由sudo安装的包,在普通用户环境下无法访问或修改,引发一系列诡异的权限错误。

更稳妥的做法是使用 Node 版本管理器(如 nvm 或 nvs)。它的核心价值在于:

  1. 隔离性:将 Node.js 安装在你的用户目录下(例如~/.nvm),完全避免系统级路径的权限纠缠。
  2. 多版本共存:可以轻松切换不同项目所需的 Node.js 版本,比如老项目用 Node 16,新项目用 Node 20。
  3. 干净卸载:切换或卸载版本时,不会在系统目录留下碎片。

对于纯粹的新手,如果只是想快速体验,使用系统安装包也可以。但如果你计划长期进行 Node.js 开发,我强烈建议从版本管理器开始。这相当于为你的开发环境建立了一个“沙箱”,后续90%的路径和权限问题都会消失。

2.2 版本选择:LTS 还是 Current?

Node.js 官网会提供两个主要版本:LTS(长期支持版)和 Current(当前最新版)。对于学习和生产,无脑选择 LTS 版本

LTS 版本经过更长时间的测试,拥有更稳定的 API 和更完善的安全补丁,是绝大多数生产环境的选择。Current 版本包含最新的特性,但可能不稳定,且一些第三方库的兼容性可能还没跟上。比如,如果你看到错误信息提到node.js v24.19.0 is not yet released,这就是在尝试安装一个尚未正式发布或不是 LTS 的版本,版本管理器或安装脚本可能无法正确识别。

验证安装成功的唯一标准是命令行。安装后,打开终端(Windows 用 PowerShell 或 CMD,macOS/Linux 用 Terminal),输入:

node -v npm -v

这两条命令应该分别打印出你安装的 Node.js 版本号和 npm 版本号,没有任何错误。如果提示“不是内部或外部命令”,说明系统 PATH 环境变量没有配置正确,这是安装后第一个要排查的点。

2.3 包管理器:npm, yarn, 还是 pnpm?

Node.js 自带 npm。但社区还有 yarn 和 pnpm 等选择。对于初学者,在安装好 Node.js 后,暂时完全使用自带的 npm 即可,不要一开始就引入更多变量。

有些教程会让你安装@vue/clicreate-react-app这类脚手架,它们通常通过npm install -g来全局安装。这里有一个关键细节:-g代表全局安装,安装后的命令可以在任何目录下执行。如果安装失败,除了网络问题,首要怀疑对象就是权限(在非版本管理器安装方式下)和代理配置

注意:如果遇到npm install -g @vue/cli报错,先不要急着搜索具体错误码。第一步,尝试不加-g在本地项目安装,或者使用npx(npm 自带的工具)来临时执行命令,如npx @vue/cli create my-project。这能帮你判断是否是全局安装路径的权限问题。

3. TypeScript 环境:编译工具链与配置

安装好 Node.js 后,TypeScript 环境的搭建就变成了一个“项目管理”问题,而不是“系统安装”问题。TypeScript 本身是一个编译器,你需要把它作为项目依赖来管理。

3.1 本地安装与全局安装

和 Vue CLI 不同,TypeScript 编译器(tsc我建议在项目中本地安装

# 进入你的项目目录 mkdir my-ts-project && cd my-ts-project # 初始化 package.json (一路回车或按需填写) npm init -y # 本地安装 TypeScript 和 Node.js 类型定义 npm install typescript @types/node --save-dev

--save-dev表示这是开发依赖,不会被打包到生产代码中。本地安装的好处是,每个项目可以独立使用不同版本的 TypeScript,避免全局版本冲突。安装后,你可以通过npx tsc --version来检查项目中使用的 tsc 版本。

3.2 初始化配置:tsconfig.json

TypeScript 的行为由一个叫tsconfig.json的文件控制。生成它:

npx tsc --init

这个命令会在当前目录下生成一个包含大量注释的tsconfig.json文件。对于新手,你只需要关注并修改其中几个关键配置:

{ "compilerOptions": { "target": "ES2020", // 编译生成的 JavaScript 版本 "module": "commonjs", // 模块系统,Node.js 环境常用 commonjs "outDir": "./dist", // 编译后的输出目录 "rootDir": "./src", // TypeScript 源代码的根目录 "strict": true, // 开启所有严格的类型检查 "esModuleInterop": true, // 改善对 CommonJS/ES Module 的互操作 "skipLibCheck": true // 跳过库文件的类型检查,可加快编译速度 }, "include": ["src/**/*"] // 指定需要编译的文件路径 }

把上面的配置覆盖到你的tsconfig.json里。然后创建src目录和src/index.ts文件,写一句console.log('Hello TS')。最后运行:

npx tsc

如果配置正确,你会看到生成了一个dist目录,里面有一个index.js文件。用node dist/index.js可以执行它。这个“编辑 ts -> 编译成 js -> 运行 js”的循环,就是 TypeScript 开发的基础流程。

3.3 处理装饰器与实验性语法

如果你在使用一些框架(如 NestJS)或看到@inject这类装饰器语法,可能会遇到错误:装饰器在此处无效。这是因为装饰器在 TypeScript 中仍是实验性特性。在tsconfig.json中,你需要显式启用它:

{ "compilerOptions": { // ... 其他配置 "experimentalDecorators": true, "emitDecoratorMetadata": true } }

另外,如果你使用 Vite 作为构建工具,并且遇到装饰器问题,需要注意 Vite 底层使用 esbuild 进行转译,而esbuild 默认不支持 TypeScript 的装饰器语法。这时,你通常需要借助插件(如@vitejs/plugin-react的特定配置)或换用其他支持装饰器的编译流程(如tscswc)。

4. 数据库与 CLI 工具:理解“环境”的延伸

“基础环境”不仅仅指 Node.js 和 TypeScript。当你的项目需要连接数据库、使用特定的 CLI 工具(如 Prisma、Drizzle ORM 的 CLI)或调用外部 API 时,这些依赖也构成了环境的一部分。

4.1 数据库连接工具

无论是 MySQL、PostgreSQL、SQLite 还是国内的达梦、人大金仓,在 Node.js 中操作它们通常都需要一个驱动(driver)ORM(对象关系映射)库。例如:

  • MySQL:npm install mysql2
  • PostgreSQL:npm install pg
  • SQLite:npm install better-sqlite3
  • ORM (如 Prisma):npm install prisma --save-dev,然后npx prisma init

这些包都是通过 npm 安装在项目本地的。关键在于,安装这些包之前,你的机器上需要已经有数据库客户端库或运行时。例如,pg(PostgreSQL 客户端)可能依赖系统级的libpq库;better-sqlite3在安装时会从源码编译,需要你的系统有 C++ 编译工具链(比如 Windows 上的windows-build-tools,macOS 上的 Xcode Command Line Tools)。

对于达梦、人大金仓这类数据库,通常需要从官网下载特定的驱动程序(.jar 文件或 .dll/.so 文件),并放置在项目或系统路径中,然后在 Node.js 里通过 ODBC 或特定 SDK 连接。用 Docker 运行数据库(如人大金仓数据库docker)是一个很好的隔离方式,但 Docker 本身也是你需要安装的“基础环境”。

4.2 CLI 工具生态

codex cli,trae cli,claude cli这类工具,本质是一个可以通过 npm 全局安装的命令行程序。安装它们的方式通常是:

npm install -g @工具名/cli # 或 npm install -g 工具名

安装后,通常可以通过工具名 --help来验证是否安装成功。如果失败,请回到第 2.1 节检查全局安装的权限问题。对于在 WSL(Windows Subsystem for Linux)中安装 CLI 工具,你需要确保是在 WSL 的 Linux 环境中使用对应的 Linux 版 Node.js 和 npm 进行安装,而不是在 Windows 环境下。

4.3 Web API 与服务器部署

“前端写完了如何通过node.js部署”是一个典型的后续步骤。Node.js 可以作为静态文件服务器,也可以作为 API 服务器。一个最简单的部署方式是:

  1. 将你的 TypeScript 代码编译成 JavaScript(输出到dist)。
  2. 在服务器上安装 Node.js 环境(同样建议用版本管理器)。
  3. dist目录、package.jsonnode_modules(或通过npm ci在服务器上重新安装)上传到服务器。
  4. 使用pm2systemd等进程管理工具来启动你的dist/index.js,并设置成后台服务。

对于 Web API,无论是你调用别人的 API(如获取steam web api key),还是提供 API 给别人,在 Node.js 里通常使用expresskoaFastify这类框架。它们的安装同样是项目级的npm install express

5. 系统性排查:当安装命令出错时

安装过程出错是常态。面对一长串错误日志,不要慌,按以下顺序排查,可以解决大部分问题:

5.1 网络与镜像问题

npm install失败最常见的原因是网络超时或包镜像问题。症状可能是ETIMEDOUTECONNRESET

  • 换源:将 npm registry 切换到国内镜像。
    npm config set registry https://registry.npmmirror.com/
  • 检查代理:如果你在公司网络或使用了网络工具,可能需要配置或清空 npm 的代理设置。
    npm config delete proxy npm config delete https-proxy
  • 使用npm cache clean --force:清除 npm 缓存,然后重试。

5.2 权限问题

在 macOS/Linux 上,避免使用sudo npm install -g。如果已经用了导致权限混乱,可以尝试:

  1. 重新安装 Node.js(通过 nvm 最省心)。
  2. 手动修正 npm 全局目录的权限:
    sudo chown -R $(whoami) ~/.npm sudo chown -R $(whoami) /usr/local/lib/node_modules
    (注意:第二条命令路径可能因安装方式而异)

5.3 依赖编译失败

sqlite3bcrypt等包含原生 C++ 扩展的模块,在安装时需要编译。这要求系统有编译环境。

  • Windows:安装windows-build-tools(一个 npm 包)或 Visual Studio Build Tools。
  • macOS:安装 Xcode Command Line Tools (xcode-select --install)。
  • Linux:安装build-essential(Ubuntu/Debian) 或base-devel(Arch) 等基础开发包。

错误信息中如果出现gypERR!C++ compiler等关键词,基本就是这个问题。

5.4 版本不兼容

错误信息可能直接提示某个包需要 Node.js 版本>=18.0.0,而你的版本是 16。这就是为什么使用 nvm 切换版本如此方便。同样,TypeScript 版本与某些装饰器语法也可能不兼容,可以尝试升级或降级 TypeScript 版本:

npm install typescript@latest --save-dev # 或安装特定版本 npm install typescript@4.9.5 --save-dev

5.5 项目特定配置冲突

有时问题不在全局环境,而在项目本身。package.json中依赖版本冲突、存在锁文件(package-lock.jsonyarn.lock)不一致、或者node_modules目录损坏都会导致问题。

  • 删除重装:最彻底的方法是删除node_modules和锁文件,然后重新npm install
    rm -rf node_modules package-lock.json npm install
  • 检查脚本package.json中的scripts命令是否写错了路径或参数。

6. 从安装到“准备好开发”:一个清单

最后,提供一个简单的清单,用于验证你的 TypeScript + Node.js 基础环境是否真正就绪:

  1. Node.js & npmnode -vnpm -v能正确输出,且版本符合预期(建议 LTS)。
  2. 项目初始化:有一个清晰的项目目录,内含package.json文件。
  3. TypeScript 编译:项目内已本地安装 TypeScript (typescript),并存在一个配置好的tsconfig.json文件。执行npx tsc能成功将.ts文件编译到dist目录。
  4. 运行测试:可以编写一个简单的src/index.ts,编译后通过node dist/index.js成功运行。
  5. 依赖管理:知道如何通过npm install <package-name>添加项目依赖(如express),以及通过--save-dev添加开发依赖(如@types/express,jest)。
  6. 基础工具:根据项目需要,已安装或知道如何安装数据库驱动、ORM CLI、构建工具(如 Vite、Webpack)或代码格式化工具(如 Prettier、ESLint)。

完成以上六点,你的“基础环境”才算真正搭建完毕,可以安心地进入业务代码开发阶段,而不是在后续每一步都回头处理环境报错。记住,环境搭建的目标不是一次成功,而是建立一套遇到问题能快速定位和修复的确定性方法。

← 返回列表