pnpm install离线包
时间: 2025-06-07 10:04:51 浏览: 17
### 如何创建和使用 pnpm 离线安装包
#### 创建 pnpm 禉线安装包
为了在离线环境中成功使用 `pnpm`,可以通过以下方式创建离线安装包:
1. **在联网设备上准备依赖项**
使用 `pnpm store export` 命令导出项目的依赖关系及其对应的存储路径。这一步会在指定目录生成一个 `.tgz` 文件,其中包含了所有需要的依赖项。
```bash
pnpm install # 确保项目依赖已完全安装
pnpm store export --json > dependencies-lock.json
tar -czf offline-store.tgz $(cat dependencies-lock.json | jq -r '.[]')
```
上述命令中的 `dependencies-lock.json` 是由 `pnpm store export` 自动生成的一个 JSON 文件,记录了当前项目所需的所有依赖项以及它们的具体版本号[^1]。
2. **打包 pnpm 工具本身**
如果目标机器尚未安装 `pnpm`,还需要将其一并打包。可以在联网设备上全局安装 `pnpm` 后,复制其所在的 `node_modules/pnpm` 目录至目标机器。
```bash
npm i pnpm --install-strategy=shallow
cp -r ./node_modules/pnpm /path/to/offline/directory/
tar -czf pnpm-offline.tar.gz /path/to/offline/directory/pnpm
```
#### 在离线环境下使用 pnpm 和安装包
将上述两个压缩文件传输到离线环境后,按照如下方法操作即可完成依赖恢复:
1. **安装 pnpm**
将之前打包好的 `pnpm-offline.tar.gz` 解压,并通过以下命令进行全局安装:
```bash
mkdir pnpm && tar -xzf pnpm-offline.tar.gz -C pnpm
cd pnpm
npm i . -g
```
2. **导入依赖项**
利用 `pnpm store import` 导入先前保存的依赖数据:
```bash
tar -xzf offline-store.tgz -C .
pnpm store import dependencies-lock.json
```
3. **验证安装状态**
最终可通过运行以下命令确认 `pnpm` 是否正常工作及依赖是否加载完毕:
```bash
pnpm -v
pnpm list
```
以上流程能够有效支持离线场景下的开发需求,确保即使在网络受限的情况下也能顺利完成项目的构建与部署[^2]。
```python
# 示例 Python 脚本用于自动化部分过程(可选)
import os
import subprocess
def create_pnpm_offline_package(output_dir):
try:
subprocess.run(["pnpm", "install"], check=True)
subprocess.run(["pnpm", "store", "export", "--json", f">{output_dir}/dependencies-lock.json"], shell=True, check=True)
with open(f"{output_dir}/dependencies-lock.json") as lockfile:
content = lockfile.read()
paths = ' '.join(content.splitlines())
subprocess.run([f"tar -czf {output_dir}/offline-store.tgz {paths}"], shell=True, check=True)
subprocess.run(["npm", "i", "pnpm", "--install-strategy=shallow"], check=True)
subprocess.run([f"cp -r ./node_modules/pnpm {output_dir}/"], shell=True, check=True)
subprocess.run([f"tar -czf {output_dir}/pnpm-offline.tar.gz {output_dir}/pnpm"], shell=True, check=True)
except Exception as e:
print(f"Error during package creation: {e}")
create_pnpm_offline_package("/path/to/output")
```
阅读全文
相关推荐

















