npm离线安装依赖的核心是绕过网络请求,全部指向本地资源:可用本地缓存(推荐整项目)、单个.tgz包(适合补漏)、私有仓库(适合团队长期使用),慎用直接复用node_modules。

npm 在离线环境下安装依赖包,核心思路是**绕过网络请求,让所有包来源都指向本地资源**。它不靠“强行断网重试”,而是依赖提前准备好的本地缓存、压缩包或私有仓库。只要路径对、版本准、依赖链完整,离线安装就能稳定运行。
用本地缓存安装(推荐用于整项目)
npm 默认会把每个下载过的包(包括所有子依赖)存进缓存目录,比如 Linux/macOS 下是 ~/.npm/_cacache,Windows 下是 %AppData%\npm-cache。这个缓存就是离线安装的“弹药库”。
- 在有网机器上,先进入项目目录,执行 npm install ——这会把 package-lock.json 里所有包全下进缓存
- 用 npm config get cache 查到缓存路径,然后打包整个缓存文件夹(如 tar -czf npm-cache.tgz ~/.npm)
- 把压缩包拷到离线机器,解压到目标路径(比如 /opt/offline-cache)
- 在离线机器上运行:npm install --offline --cache /opt/offline-cache
这个方法能自动解析整棵依赖树,适合部署完整项目,但缓存体积可能较大。
安装单个 .tgz 压缩包(适合补漏或紧急修复)
每个 npm 包在 registry 上都有一个对应 .tgz 文件,本质就是打包好的源码+元数据。直接拿这个文件安装,最轻量、最可控。
- 有网时,用 npm pack lodash 生成 lodash-4.17.21.tgz;或从官网复制 tarball 链接用 curl 下载
- 把 .tgz 文件传到离线机,比如放在 ./deps/ 目录下
- 执行:npm install ./deps/lodash-4.17.21.tgz
注意:如果该包本身有依赖(比如依赖 is-number),这些依赖不会自动装——得手动把它们也下好、传过去、再一起装。
搭本地私有仓库(适合团队长期离线开发)
像 Verdaccio 这类轻量私有 registry,能在内网起一个“迷你 npm 淘宝”,既支持上传私有包,也能缓存公共包,一劳永逸。
- 在外网打包好 verdaccio 及其依赖(npm pack verdaccio),连同配置文件一起移入内网
- 离线机上全局安装:npm install -g ./verdaccio-5.32.0.tgz
- 启动服务:verdaccio,并确保配置中 uplinks: 被注释掉(防止连外网)
- 把 npm 源切到本地:npm config set registry http://localhost:4873/
之后所有 npm install 都走本地服务,还能配合 CI/CD 自动同步热门包。
用 node_modules 文件夹直接复用(慎用)
有人会直接把整个 node_modules 打包传过去,再 npm install ——这看似简单,但容易出问题。
- 不同系统(Linux/Windows/macOS)下编译型包(如 bcrypt、sqlite3)无法通用
- package-lock.json 和实际 node_modules 版本可能不一致,导致后续 npm ci 失败
- 没处理 postinstall 脚本或二进制下载逻辑,某些包启动就报错
除非是纯 JS 包、且确认跨平台兼容,否则不建议作为主力方案。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











