You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在树莓派等单板计算机上部署NestJS项目的依赖问题咨询

问题根因

执行nest build时,Nest CLI只会将开发者编写的TypeScript业务代码编译为JavaScript输出到dist目录,不会把@nestjs/core等第三方依赖打包进编译产物,因此仅迁移dist目录启动时,Node会因找不到依赖模块抛出报错。

最小迁移文件清单

不需要迁移src源码目录、TS配置、ESLint配置、测试用例等开发阶段文件,仅需同步以下内容到树莓派:

  • nest build生成的完整dist目录
  • 项目根目录的package.json
  • 依赖锁文件:使用npm对应package-lock.json、yarn对应yarn.lock、pnpm对应pnpm-lock.yaml
  • 运行时依赖的非代码资源:比如生产环境.env配置文件、自定义的json/yaml配置、静态资源目录等,这类文件不会被编译进dist目录
低体积部署方案(无需安装800M全量依赖)

你遇到的800M体积是包含了devDependencies开发依赖的全量node_modules大小,生产环境完全不需要安装这类开发阶段的工具包,可根据需求选以下方案:

方案1:生产环境精简依赖安装

将上述最小文件清单上传到树莓派后,在项目根目录执行对应包管理器的生产依赖安装命令即可:

  • npm执行:npm ci --omit=dev(旧版npm可使用npm install --production)
  • yarn执行:yarn install --production
  • pnpm执行:pnpm install --prod

该命令会自动跳过所有开发依赖(包括TypeScript、Nest CLI、代码检查工具、测试工具等占空间的包),仅安装运行必需的生产依赖,最终node_modules体积通常仅为全量安装的20%-40%,大部分NestJS项目的生产依赖体积在100M-200M区间,远低于800M。

方案2:单文件打包(完全无需在树莓派安装node_modules)

可以在本地构建阶段将所有生产依赖和业务代码打包为单个独立JS文件,部署时仅需传输单文件+运行时配置即可启动,全程不需要在树莓派安装任何依赖:

  1. 本地开发环境安装打包工具:npm i -D @vercel/ncc
  2. 在package.json的scripts字段中新增生产打包命令:
"build:pi": "nest build && ncc build dist/main.js -o dist-pi --minify"
  1. 本地执行npm run build:pi,生成的dist-pi目录下的index.js就是包含所有依赖的压缩后单文件,整体体积通常仅为10M-50M
  2. 将index.js和你的运行时配置文件(比如生产环境.env)传到树莓派,直接执行node index.js即可启动服务

注意:如果项目依赖了带系统原生二进制的包(比如bcrypt、sharp等),建议直接在树莓派同架构环境下执行打包,避免跨架构打包导致原生依赖运行异常。

方案3:本地预构建精简依赖直接传输

如果你本地开发机和树莓派的系统架构、Node大版本完全一致(比如都是arm64架构、Node 18.x版本),可以直接在本地提前安装好精简生产依赖,随其他文件一起传输,省去树莓派上的依赖安装步骤:

  1. 本地项目根目录执行npm ci --omit=dev安装生产依赖
  2. 将生成的精简版node_modules目录、dist目录、package.json、运行时配置一并传到树莓派
  3. 直接执行node dist/main即可启动

注意:不要直接传输本地开发环境带devDependencies的全量node_modules,不仅体积大,跨架构传输时原生依赖会直接运行报错。

内容的提问来源于stack exchange,提问作者Davide Ferrero

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 16:18:21