有没有工具或方法可打包Node.js后端代码,部署时无需下载node_modules?
Express 项目免部署node_modules的打包方案
以下是目前社区最常用的几种成熟方案,都可以实现将后端代码+纯JS依赖打包为单文件或少量文件,部署时无需安装/拷贝完整node_modules:
1. @vercel/ncc(最推荐,专门适配Node.js后端场景)
这是Vercel官方维护的Node.js打包工具,对后端场景的兼容做了大量优化,不需要复杂配置即可直接使用:
- 安装:执行
npm i @vercel/ncc -D在项目内安装依赖 - 打包:如果你的项目入口是
src/index.js,执行ncc build src/index.js -o dist即可 - 产物默认输出到dist目录,仅包含单个
index.js文件和自动识别到的静态资源,部署时直接将dist目录上传服务器,运行node dist/index.js即可启动服务
2. esbuild(打包速度最快)
基于Go开发的高性能打包工具,打包速度比ncc、webpack快10~100倍,适合大型项目使用:
- 安装:执行
npm i esbuild -D - 基础打包命令:
esbuild src/index.js --bundle --platform=node --outfile=dist/index.js - 复杂场景支持配置文件,可自定义静态资源复制、TS编译、代码压缩等规则
3. Webpack
你熟悉的Webpack也完全支持后端打包,只需要调整配置适配Node.js环境即可:
- 配置中指定
target: 'node',避免打包浏览器兼容逻辑 - 配置
externals排除Node.js内置模块(fs、path等)不需要打包 - 适合已经在项目中使用Webpack的场景,不需要额外引入新工具
4. pkg(打包为跨平台可执行文件,连Node环境都不需要)
如果希望服务器连Node.js运行环境都不用安装,可以用pkg直接将Node runtime、代码、依赖全部打包为对应平台的单可执行文件:
- 安装:
npm i pkg -D - 打包命令示例:
pkg src/index.js --targets node18-linux-x64 --output app - 产物是单个可执行文件,上传服务器后直接
./app即可运行,不需要任何前置依赖
注意事项
- 如果项目用到原生C++扩展依赖(比如bcrypt、sharp等),需要将这类依赖配置为外置不打包,部署时仅需拷贝对应平台编译好的原生模块即可,其余纯JS依赖无需处理
- 代码中如果有动态导入逻辑(比如
require(${path}/xxx))需要提前配置打包工具复制对应目录的文件,或者调整为静态导入写法,避免打包工具遗漏依赖 - 项目用到的静态资源目录(比如public、uploads等)需要手动同步到部署目录,调整代码中资源引用为相对打包入口文件的路径即可
内容的提问来源于stack exchange,提问作者radiorz
相关产品推荐
相关产品推荐

