如何创建含包及依赖的NPM仓库?离线系统NPM包空投方案求助
嗨,我之前也碰到过一模一样的离线环境部署NPM包的问题,下面给你两套亲测有效的方案,分别解决你的两个需求:
一、创建包含指定包及其依赖项的本地NPM仓库
如果你需要一个可长期使用的本地仓库(比如供多台离线机器共享),推荐用轻量级私有仓库工具verdaccio来搭建,步骤如下:
在联网机器上准备依赖包
- 创建临时目录并进入:
mkdir temp-repo && cd temp-repo - 初始化项目:
npm init -y - 安装目标包(替换成你需要的包名,比如
react):npm install react --save - 收集所有依赖的tarball文件到单独目录:
# macOS/Linux mkdir ../local-packages && find node_modules -name "*.tgz" -exec cp {} ../local-packages/ \; # Windows PowerShell mkdir ../local-packages; Get-ChildItem node_modules -Recurse -Filter *.tgz | Copy-Item -Destination ../local-packages
- 创建临时目录并进入:
搭建并填充本地仓库
- 全局安装
verdaccio:npm install -g verdaccio - 启动仓库:直接运行
verdaccio,默认会在本地4873端口启动,控制台会显示存储目录路径 - 配置npm指向本地仓库:
npm set registry http://localhost:4873/ - 上传所有tarball到仓库:
cd ../local-packages for pkg in *.tgz; do npm publish $pkg --registry http://localhost:4873/; done
- 全局安装
迁移到离线环境
- 打包
verdaccio的存储目录(启动时控制台显示的路径) - 传到离线机器后,安装
verdaccio并替换默认存储目录,启动即可使用这个包含所有依赖的本地仓库。
- 打包
二、离线快速空投NPM包(无需搭建仓库)
如果只是临时给单台离线机器部署指定包,用缓存+锁文件的方案最快,步骤超简单:
在联网机器上缓存所有依赖
- 清理旧缓存(可选,减少冗余):
npm cache clean --force - 创建临时项目:
mkdir offline-pkg && cd offline-pkg && npm init -y - 安装目标包,让npm自动缓存所有依赖:
npm install your-target-package --save(替换为你的目标包名)
- 清理旧缓存(可选,减少冗余):
打包缓存与配置文件
- 找到npm缓存目录:
- Windows:
%AppData%\npm-cache - macOS/Linux:
~/.npm
- Windows:
- 打包缓存目录、
package.json和package-lock.json:# macOS/Linux tar -czf npm-offline-bundle.tar.gz ~/.npm package.json package-lock.json # Windows PowerShell Compress-Archive -Path $env:APPDATA\npm-cache, package.json, package-lock.json -DestinationPath npm-offline-bundle.zip
- 找到npm缓存目录:
在离线系统完成安装
- 把打包文件传到离线机器,解压缓存目录到对应系统的npm缓存位置
- 复制
package.json和package-lock.json到你的离线项目目录 - 运行
npm ci --offline,npm会直接从缓存读取所有依赖完成安装,全程无需联网
重要注意事项
- 尽量保证联网机器和离线系统的Node.js版本、操作系统一致,避免二进制依赖(比如
node-sass、sharp)出现兼容问题 - 如果需要安装私有包,记得在联网机器上先登录对应的私有仓库,确保依赖被缓存
- 优先用
npm ci --offline而非npm install,前者会严格按照package-lock.json安装,避免版本不一致问题
内容的提问来源于stack exchange,提问作者user1854350
相关产品推荐
相关产品推荐

