PNPM库离线安装方案

以下是几种可行的方案,推荐优先使用方案一


方案一:使用离线镜像(Offline Mirror) - 最优雅、最PNPM的方式

这是 PNPM 官方推荐的处理离线环境的方式。它会在内网电脑上创建一个所有依赖包的压缩文件(tarball)的本地存储库(镜像),然后你可以将这个镜像目录拷贝到外网电脑上使用。

步骤:

  1. 在内网机器上配置和创建离线镜像

    # 1. 在项目根目录或全局配置pnpm,指定离线镜像的路径(例如放在项目下的 .pnpm-store 文件夹)
    pnpm config set store-dir ./.pnpm-store
    # 如果你希望全局使用,可以加 --global 标志# 2. 告诉pnpm将包文件链接到镜像(重要!)
    pnpm config set package-import-method copy# 3. 在内网环境下执行安装,此时所有包(包括私有包)的 tarball 都会被下载并拷贝到 ./.pnpm-store 目录中
    pnpm install
    
  2. 将整个项目文件夹(包括 pnpm-store 目录)拷贝到外网机器

    • 压缩项目目录(包括 node_modules, .pnpm-store, pnpm-lock.yaml 等所有文件)。
    • 通过U盘、移动硬盘或其他方式将压缩包转移到外网电脑。
  3. 在外网机器上配置并使用离线镜像

    # 1. 解压项目
    # 2. 进入项目根目录,配置pnpm使用当前目录下的离线镜像
    pnpm config set store-dir ./.pnpm-store
    pnpm config set package-import-method copy# 3. 执行安装。此时pnpm不会再尝试从网络下载,而是直接从本地的 .pnpm-store 镜像中提取包文件。
    pnpm install --offline
    # `--offline` 参数强制pnpm不使用网络,只使用本地缓存和镜像。
    

优点:

  • 官方支持,最符合 PNPM 的设计理念。
  • 不仅解决了私有包问题,而是缓存了所有依赖包,适合完全离线的开发环境。
  • 可靠性高,不会出现文件链接错误。

缺点:

  • 需要额外的磁盘空间来存储压缩包(store-dir)。

方案二:使用 pnpm pack 手动打包私有依赖

如果私有包的数量不多,且你很清楚是哪些包,可以手动将它们打包。

步骤:

  1. 在内网机器上操作

    # 1. 进入私有包所在的目录(或者如果你有多个,需要每个都操作)
    cd path/to/your-private-package# 2. 使用 pnpm pack 命令打包。
    # 这会在当前目录生成一个 .tgz 文件,例如 your-private-package-1.0.0.tgz
    pnpm pack# 对每一个无法在外网安装的私有包执行上述操作。
    
  2. 转移包文件

    • 将生成的 .tgz 文件通过U盘等方式拷贝到外网电脑的项目根目录下(可以创建一个 offline-packages 文件夹来管理)。
  3. 修改外网电脑上的 package.json

    • 将对应私有包的版本号引用改为指向本地文件路径。
    {"dependencies": {// 修改前:"your-private-package": "workspace:*", // 或 "1.0.0"// 修改后:"your-private-package": "file:./offline-packages/your-private-package-1.0.0.tgz"}
    }
    
  4. 在外网电脑上重新安装

    # 执行安装,pnpm会从本地tgz文件安装依赖
    pnpm install
    

优点:

  • 非常直接,适合依赖数量少的场景。
  • 不需要复杂的配置。

缺点:

  • 手动过程繁琐,如果私有包多或有深层依赖,容易出错。
  • 需要修改 package.json,之后切回网络环境时还需要改回来,不方便。

方案三:整体复制 node_modulesstore 目录(不推荐,易出错)

这是一种“暴力”但往往有效的方法,但需要非常小心。

  1. 在内网机器上

    • 完整安装项目依赖 (pnpm install)。
    • 找到全局的 store 目录,默认位于:
      • Linux: ~/.local/share/pnpm/store
      • Windows: %USERPROFILE%\AppData\Local\pnpm\store
      • macOS: ~/Library/pnpm/store
    • 你也可以通过命令 pnpm store path 快速找到它。
  2. 复制文件

    • 将内网机器上的整个 全局 store 目录 和项目的 node_modules 目录 一起压缩。
  3. 在外网机器上

    • 解压项目文件到正确路径。
    • 将解压后的 store 目录内容覆盖到外网机器的全局 store 目录(路径同上)。
    • 将解压后的 node_modules 目录覆盖到项目下的 node_modules
  4. 验证

    • 在项目根目录运行 pnpm install。PNPM 会检查完整性,如果复制的文件完全正确,它会直接跳过安装,提示所有依赖都已链接。

为什么“不推荐”?

  • 平台相关性:如果内网和外网的系统不同(如 Windows 和 macOS),Store 中的二进制文件(node-gyp 编译的)可能不兼容。
  • 路径硬链接问题:PNPM 使用了硬链接,直接复制可能会破坏链接关系,导致文件体积巨大或链接失效。
  • 可靠性差:这是一个 Hack,并非官方支持的方式,可能随着 PNPM 版本更新而失效。

总结与建议

方案适用场景推荐度
方案一:离线镜像需要长期、稳定地在无网络环境工作;项目依赖复杂。⭐⭐⭐⭐⭐ 最佳
方案二:pnpm pack只有极少数私有包需要处理;临时、一次性的需求。⭐⭐⭐ 简单场景可用
方案三:复制目录临时应急,并且你清楚自己在做什么。不推荐,易出错

强烈建议你采用方案一(离线镜像),这是最彻底、最可靠且一劳永逸的方法,特别适合企业级项目的离线部署和开发。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/96050.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/96050.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[Wit]CnOCR模型训练全流程简化记录(包括排除BUG)

stepfile:step 00 创建数据集 目录结构 yourproject -data --myset ---images #存放训练图片 ---dev.tsv #测试标签 tsv格式 图片文件名\t内容 ---train.tsv #训练标签 tsv格式 图片文件名\t内容 -train_config.json -train_config_gpu.json -fix_cnocr_encoding.py step 01 创…

Sklearn(机器学习)实战:鸢尾花数据集处理技巧

1.数据集的使用:先使用load导入鸢尾花数据:from sklearn.datasets import load_iris然后定义一个函数来查看鸢尾花数据集:数据集的获取:iris load_iris()print(鸢尾花的数据集:\n,iris)使用iris[DESCR]来查看数据及里…

【企业微信】接口报错:javax.net.ssl.SSLHandshakeException

详细报错信息 javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target原因 关于qyapi…

光子芯片驱动的胰腺癌早期检测:基于光学子空间神经网络的高效分割方法

光子芯片驱动的胰腺癌早期检测:基于光学子空间神经网络的高效分割方法 1 论文核心概念 本文提出了一种基于集成光子芯片的光学子空间神经网络(Optical Subspace Neural Network, OSNN),用于胰腺癌的早期检测与图像分割。其核心思想是利用光子芯片的高并行性、低延迟和低能…

Scikit-learn Python机器学习 - 特征降维 压缩数据 - 特征提取 - 主成分分析 (PCA)

锋哥原创的Scikit-learn Python机器学习视频教程: 2026版 Scikit-learn Python机器学习 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili 课程介绍 本课程主要讲解基于Scikit-learn的Python机器学习知识,包括机器学习概述,特征工程(数据…

【Python】pytorch安装(使用conda)

# 创建 PyTorch 虚拟环境 conda create -n pytorch_env python3.10# 激活环境 conda activate pytorch_env# 安装 PyTorch(CPU版本) conda install pytorch torchvision torchaudio cpuonly -c pytorch# 或者安装 GPU 版本(如果有NVIDIA显卡&…

ThreeJS骨骼示例

<html lang"zh-CN"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>骨骼动画混合演示</title><style>body {margin: 0;padding: …

python + Flask模块学习 1 基础用法

目录 Flask 的主要作用 常用扩展 Flask 基本用法 1. 安装 Flask&#xff08;再安装个postman用来调试测试API哈 2. 最小化应用示例 3. 运行应用 Flask 是一个轻量级的 Python Web 框架&#xff0c;它简洁灵活&#xff0c;适合快速开发 Web 应用和 API。它被称为 "微…

python数据可视化之Matplotlib(8)-Matplotlib样式系统深度解析:从入门到企业级应用

作者&#xff1a;浪浪山齐天大圣 描述&#xff1a;深入探索Matplotlib样式系统的核心机制&#xff0c;掌握从基础样式到企业级样式管理的完整解决方案引言 在数据可视化的世界里&#xff0c;一个优秀的图表不仅要准确传达数据信息&#xff0c;更要具备专业的视觉效果。Matplotl…

3.HTTP/HTTPS:报文格式、方法、状态码、缓存、SSLTLS握手

HTTP/HTTPS&#xff1a;报文格式、方法、状态码、缓存、SSL/TLS握手 1. HTTP报文格式 1.1 HTTP请求报文(Request) GET /api/v1/users HTTP/1.1 // 请求行&#xff1a;方法、URI、协议版本 Host: api.example.com // 请求头 (Headers) User-Agent: Mozil…

【慢教程】Ollama4:ollama命令汇总

ℹ️教程说明 Ollama 是一款轻量级本地大模型部署工具&#xff0c;使用广泛&#xff0c;且容易上手&#xff0c;适合作为AI技术的入门。 &#x1f9e9;教程各部分链接&#xff1a; 第一课&#xff1a;ollama运行原理介绍及同类工具对比 ollama运行原理介绍及同类工具对比&am…

JAVA Predicate

简单来说&#xff0c;当我明确知道此次判断的逻辑时就可以直接使用if&#xff0c;但是我这次的判断逻辑可能会随着某个参数变化的时候使用Predicate比如当我想要判断某长段文字中是否包含list<String> 中的元素&#xff0c;并且包含的元素个数大于 list<String>最后…

什么是PFC控制器

一句话概括PFC控制器是一种智能芯片&#xff0c;它通过控制电路中的电流波形&#xff0c;使其与电压波形保持一致&#xff0c;从而减少电力浪费&#xff0c;提高电能的利用效率。PFC控制器IC的核心作用就是控制一颗功率MOSFET的开关&#xff0c;通过特定的电路拓扑&#xff08;…

【P03_AI大模型测试之_定制化 AI 应用程序开发】

git clone https://gitee.com/winner21/aigc-test.git 类似于joycoder的&#xff0c;可以安装在vscode上的通义灵码&#xff1a;https://lingma.aliyun.com/ 1、VSCODE上配置通义灵码 2、创建前后端文件&#xff0c;并引用AI编码代码 3、指定文件&#xff0c;利用AI进行代码优…

人工智能机器学习——决策树、异常检测、主成分分析(PCA)

一、决策树(Decision Tree) 决策树&#xff1a;一种对实例进行分类的树形结构&#xff0c;通过多层判断区分目标所属类别 本质&#xff1a;通过多层判断&#xff0c;从训练数据集中归纳出一组分类规则 优点&#xff1a; 计算量小&#xff0c;运算速度快易于理解&#xff0c;可…

服务器文件同步用哪个工具?介绍一种安全高效的文件同步方案

服务器作为企业核心数据和应用的载体&#xff0c;服务器文件同步已成为IT运维、数据备份、业务协同中不可或缺的一环。然而&#xff0c;面对多样的场景和严苛的需求&#xff0c;选择一个既高效又安全的服务器文件同步工具并非易事。本文将首先探讨服务器文件同步的常见场景、需…

LeetCode 004. 寻找两个正序数组的中位数 - 二分切分与分治详解

一、文章标题 LeetCode 004. 寻找两个正序数组的中位数 - 二分切分与分治详解 二、文章内容 1. 题目概述 题目描述&#xff1a;给定两个已按非降序排列的整数数组 nums1、nums2&#xff0c;设它们长度分别为 m 和 n&#xff0c;要求返回这两个数组合并后有序序列的中位数。…

预闪为什么可以用来防红眼?

打闪拍照红眼产生的原因 预闪可以用来防红眼&#xff0c;是基于人眼的生理特性和红眼现象的产生原理。在光线较暗时&#xff0c;人眼的瞳孔会放大。当使用闪光灯拍摄时&#xff0c;如果直接进行高强度闪光&#xff0c;由于瞳孔来不及缩小&#xff0c;闪光灯的光线会反射在眼球血…

Python程序使用了Ffmpeg,结束程序后,文件夹中仍然生成音频、视频文件

FFmpeg是一套可以用来记录、转换数字音频、视频&#xff0c;并能将其转化为流的开源计算机程序。采用LGPL或GPL许可证。它提供了录制、转换以及流化音视频的完整解决方案。它包含了非常先进的音频/视频编解码库libavcodec&#xff0c;为了保证高可移植性和编解码质量&#xff0…

模块与包的导入

077-模块-06-模块搜索顺序_哔哩哔哩_bilibili 080-包-01-包的概念以及建立包的方式_哔哩哔哩_bilibili 088-文件操作-01-文件操作套路以及Python中的对应函数和方法_哔哩哔哩_bilibili 注&#xff1a; 1.import math和 from math import *区别 2. 模块&#xff08;Module…