首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

当使用nvm时,为什么pnpm有两个存储?

pnpm 使用两个存储,主要是为了提高性能和磁盘空间利用率。这两个存储分别是:

  1. 全局存储(Global Store):这是一个全局的存储区域,用于存储所有项目共享的依赖包。当你使用 pnpm install 安装一个依赖包时,pnpm 首先会检查全局存储中是否已经存在该依赖包。如果存在,pnpm 会直接从全局存储中链接该依赖包,而不是重新下载和安装。这样可以节省磁盘空间和安装时间。
  2. 项目存储(Project Store):这是一个针对每个项目的存储区域,用于存储项目特定的依赖包。当你使用 pnpm install 安装一个依赖包时,如果全局存储中不存在该依赖包,pnpm 会下载并安装该依赖包到项目存储中。这样可以确保每个项目都有自己独立的依赖包版本,避免了版本冲突的问题。

当你使用 nvm 管理 Node.js 版本时,每个 Node.js 版本都有自己的 pnpm 配置和存储。这样可以确保不同版本的 Node.js 和 pnpm 之间不会相互干扰。

总之,pnpm 使用两个存储的主要原因是为了提高性能和磁盘空间利用率,同时确保每个项目都有自己独立的依赖包版本。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

php使用zookeeper扩展,zookeeper节点挂掉PHP会报错

公司网站用zookeeper 管理配置文件,php 用 zookeeper扩展 从ZK 获取配置文件,平时使用没问题。...本周的时候监控脚本报警,部分网页提示500错误,查看日志显示zk连接失败,telnet 各个zk节点,发现2个zk 节点当机,让OP启动zk节点,网站恢复正常。...先解决了线上的报错,开始查找问题,在开发机装了zookeeper,启动3个zk节点,建立了一个伪集群,停掉其中一个节点,刷新页面偶尔报500错误,现在可以确定zk节点挂掉 ,网站就会出问题。...可是如果zk 节点挂掉,扩展应该自动去尝试另外一个节点,为什么脚本不会自动重新连接呢 第一个想法是php的zk 扩展版本太低,BUG, 原来zk扩展用的是 0.5.0 , 看了下 pecl https

40910
  • Windows WSL2安装Ubuntu搭建开发环境教程,2023年5月更新

    processors=6 # Sets amount of swap storage space to 16GB, default is 25% of available RAM # 将交换存储空间量设置为... output console showing contents of dmesg when opening a WSL 2 distro for debugging # 打开WSL 2发行版进行调试,...打开显示dmesg内容的输出控制台 debugConsole=true 配置代理 两个关键步骤: WSL2 中配置的代理要指向 Windows 的 IP; Windows 上的代理客户端需要允许来自本地局域网的请求...安装 nvm 安装或更新 nvm,执行下面的 curl 或 wget 命令: curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.3/...安装 nrm pnpm i nrm -g pnpm 报错 ERR_PNPM_NO_GLOBAL_BIN_DIR  Unable to find the global bin directory 使用

    2.5K51

    从npm发展历程看pnpm的高效

    因为在两个依赖包 C 的版本号不一致,只能保证一个在顶层,上图所示C v1.0.0 被提升了,v2.0.0 没有被提升,后续v2.0.0 还是会被重复下载,所以出现多重依赖,依然会出现重复安装的问题...举一个极端的例子,10个相同项目,npm 的node_modules 将达到2930M,将近3个G,而pnpm 依旧能保持 全局253M的体积,此时优势已经很明显了。...这个非常适合npm的安装包,一般来说,依赖包的更新都是向下兼容的,两个版本的包差别只是部分,而我们使用hash存储,会根据文件内容变化,只会存储变化的部分,相同的部分,生成的hash不会变,只存储一份就够了...我理解的是window下也是可以使用的,pnpm 已经帮我们做了兼容,只是没有使用软链接的方案。 pnpm 常见问题 为什么使用硬链接? 为什么不直接创建到全局存储的软链接?...安装软件包,其包含的所有文件都会硬链接自此位置,而不会占用额外的硬盘空间。pnpm 对于同一个包不同的版本也仅存储其增量改动的部分。

    2K40

    Vite前端项目搭建从0到1

    版本:node -v推荐 12.0.0 及以上版本,如果低于这个版本,推荐使用 nvm 工具切换 Nodejs 版本。...的替代方案),因为两者都存在比较严重的性能和安全问题,而这些问题在 pnpm 中得到了很好的解决,更多细节可以参考我的这篇博客: 关于现代包管理器的深度思考——为什么现在我更推荐 pnpm 而不是 npm...因此,包管理器方面我推荐使用 pnpm,安装方式非常简单,输入如下命令即可:npm i -g pnpm由于默认的镜像源在国外,包下载速度和稳定性都不太好,因此我建议你换成国内的镜像源,这样pnpm install...上述两个语句则分别代表了两个不同的请求,Vite Dev Server 会读取本地文件,返回浏览器可以解析的代码。...浏览器解析到新的 import 语句,又会发出新的请求,以此类推,直到所有的资源都加载完成。

    63480

    JavaScript 包管理器

    安装依赖,npm 将检查这些文件,以确保相同版本的依赖项在任何地方都得到安装。...安装依赖项pnpm 会在全局安装存储库中缓存所有依赖项的包。...Q: 为什么pnpm 这种 基于内容寻址 的方式对磁盘空间利用效率比较高 ? A: 1. 不会重复安装同一个包。...和 koa, 细心的你会发现这两个文件后面有一个箭头, 而这个箭头就是 pnpm 使用的 软连接 的方式指向了 .pnpm 文件真正的文件: 这些文件会在磁盘中统一存储,如果有依赖不同版本的时候,pnpm...移动或者删除原始文件,硬链接不会被破坏, 因为它所引用的是文件的物理数据而不是文件在文件结构中的位置。 硬链接记录的是目标的 inode。

    1K10

    扔掉 Electron,拥抱基于 Rust 开发的 Tauri

    Tauri 的前端实现也是基于 Web 系列语言,Tauri 的后端使用 Rust。Tauri 可以创建体积更小、运行更快、更加安全的跨平台桌面应用。 为什么选择 Rust?...Rust 也拥有出色的文档、友好的编译器和清晰的错误提示信息,还集成了一流的工具——包管理器和构建工具…… 基于此,让 Rust 成为不二之选,开发人员可以很容易的使用 Rust 扩展 Tauri 默认的...Node.js 建议使用 nvm 进行 node 版本管理: $ curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.35.2/install.sh...| bash 复制代码 $ nvm install node --latest-npm $ nvm use node 复制代码 强烈推荐安装 Yarn,用来替代 npm。...14.17.0 @tauri-apps/cli - 1.0.0-rc.2 @tauri-apps/api - 1.0.0-rc.0 Global packages npm - 6.14.13 pnpm

    1.4K20

    最高性能的包管理器-pnpm

    幻影依赖指的是 node_modules 中的依赖包在没有 package.json 中声明的情况下使用了其他包的依赖 依赖结构的不确定性。这里为什么是 D@2.0.0 提升,而不是 D@10.0?...两个不同的组件调用 require("library-f") ,它们可能会得到两个不同的库实例,这意味着可能会突然出现两个单例的实例(换言之,底层的 “global” 变量被分配到两个不同的闭包中)...Store pnpm在全局通过Store来存储所有的 node_modules 依赖,并且在 .pnpm存储项目的hard links 在使用 pnpm 对项目安装依赖的时候,如果某个依赖在 sotre...可以通过 pnpm import 的方式。参考[4] 只允许使用 pnpm。参考[5] 解决冲突。跟 npm 和 yarn 一样。...社区还没那么活跃 硬链接在 window 系统兼容性的问题 more… 总结 pnpm 通过巧妙硬链接 + 软链接结合的方式完全实现了依赖树结构的 node_modules,并且严格遵循了 Node.js

    1.7K20

    这些前端新技术你很难再忽视了 —— pnpm

    节省磁盘空间 使用 npm 或 Yarn ,如果你 100 个项目,并且所有项目都有一个相同的依赖包,那么, 你在硬盘上就需要保存 100 份该相同依赖包的副本。...然而,如果是使用 pnpm,依赖包将被 存放在一个统一的位置。 如果你对同一依赖包需要使用不同的版本,则仅有 版本之间不同的文件会被存储起来。...例如,如果某个依赖包包含 100 个文件,其发布了一个新 版本,并且新版本中只有一个文件修改,则 pnpm update 只需要添加一个 新文件到存储中,而不会因为一个文件的修改而保存依赖包的 所有文件...安装软件包,其包含的所有文件都会硬链接自此位置,而不会占用 额外的硬盘空间。 这让你可以在项目之间方便地共享相同版本的依赖包。 安装包速度快 安装包速度多快呢?...非扁平 node_module 结构 使用 npm 安装依赖包,所有软件包都将被提升到 node_modules 的 根目录下。

    1.3K20

    包管理工具

    这是通过 node_modules 层实现的,使用符号链接创建一个嵌套的依赖关系结构,其中文件夹中的每个包都是到存储的硬链接。 这是为什么 pnpm 会在快速和磁盘效率上有大幅提升的原因。...解决的不是平铺目录所带来的问题,而是解决 npm v3 版本之前的树结构的依赖问题 我们先创建两个目录进行比较,先建立一个 npm 的包管理项目,然后在建立一个 pnpm 包管理项目 npm init...安全 npm / yarn 的扁平依赖结构,一个非常严重的问题就是可以非法访问未声明的包 举个 我们使用 Antd 包,可以直接引用 Antd 内部实现包,例如 rc-table 那么 pnpm...Yarn Berry:把所有的文件下载到当前项目中,压缩成 zip 的形式存储 pnpm:把 tgz 解压为文件,以 hash 方式全局缓存, 同个包的不同版本的同个文件也能共享,再次安装直接硬链接过去...在对 npm / Yarn / Pnpm / Yarn Berry 做了简单的对比之后相信大家自己心里会有一定的判断 希望以后包管理工具可以一个标准规范吧,这样的话我们也不用去纠结使用哪些工具,对比他们的内部实现以及对业务上的支持等

    2.7K20

    【玩转 Cloud Studio】从0到1迁移至云上编程

    用户在使用 Cloud Studio 无需安装,随时随地打开浏览器就能使用。Cloud Studio 云开发体验与本地几乎无异,支持文件持久化,无需担心数据丢失。...【框架】的、基于【云原生】的、还有基于开发环境的【常用模板】。...图片 目前我采用了 All in One 模板, 该模板支持NVM切换NodeJs 版本并且内置了PNPM 图片 创建项目 不管是迁移还是新建,我们都可以在 RemoteWorking 目录下把 Git...项目克隆下来、或者自己创建项目目录,同时可以 Clone、创建 多个项目,然后进入项目目录安装依赖 cd 项目目录 pnpm install 以下是我的多项目截图 图片 如果在同一个空间里,前后端两个项目...图片 2.同时 Ubuntu 18.04 的模板下使用 NVM 切换 Node14 会触发编译,在默认的套餐【标准型 2C4G】下会触发提示内存不足。

    1.6K240

    精读《pnpm

    使用 pnpm 很容易,可以使用 npm 安装: npm i pnpm -g 之后便可用 pnpm 代替 npm 命令了,比如最重要的安装包步骤,可以使用 pnpm i 代替 npm i,这样就算把...为什么是三层,而不是两层或者四层呢?...41 my.txt 84976912 -rw-r--r-- 2 author staff 489 Jun 9 15:41 hard.txt 其中第三个参数 2 表示该文件指向的存储地址两个硬链接引用...之所以能采用这种存储方式,是因为 NPM 包一经发布内容就不会再改变,因此适合内容寻址这种内容固定的场景,同时内容寻址也忽略了包的结构关系,一个新包下载下来解压后,遇到相同文件 Hash 值就可以抛弃...但其苛刻的包管理逻辑,使我们单独使用 pnpm 管理大型 Monorepo 容易遇到一些符合逻辑但又觉得别扭的地方,比如如果每个 Package 对于同一个包的引用版本产生了分化,可能会导致 Peer

    91820

    一文全面了解pnpm、yarn、cnpm、npx、npm的使用(强烈建议收藏)

    为什么要有 npx?什么场景使用?...而在使用 pnpm ,依赖会被存储在内容可寻址的存储中,所以: 如果你用到了某依赖项的不同版本,只会将不同版本间差异的文件添加到仓库。...例如,如果某个包100个文件,而它的新版本只改变了其中1个文件。那么 pnpm update 只会向存储中心额外添加1个新文件,而不会因为仅仅一个文件的改变复制整新版本包的内容。...所有文件都会存储在硬盘上的某一位置。软件包被被安装,包里的文件会硬链接到这一位置,而不会占用额外的磁盘空间。这允许你跨项目地共享同一版本的依赖。...使用心得 https://zhuanlan.zhihu.com/p/546400909 关于现代包管理器的深度思考——为什么现在我更推荐 pnpm 而不是 npm/yarn?

    4.5K30

    非易失性数据库系统存储与恢复方法

    另外,一些固有的物理限制阻止DRAM容量扩展超出今天的水平。即使预留数据不经常使用,也需要阶段性将他刷写,所以使用大量DRAM也会消耗大量电量。...现在通过NV-DIMM替换DRAM成为可能,并无需更改现有存储架构即可运行NVM-only数据库管理系统。本文的结构:section 2:讨论NVM为什么数据库管理系统的存储架构需要重新评估。...引擎保持两个池中每个插槽的持久化状态,类似于NVM-InP引擎。 NVM-CoW引擎使用分配器接口存储非易失性copy-on-write  B+树的当前和脏目录。...系统重新启动,引擎可以安全地使用主记录访问当前目录,因为该目录保证处于一致状态。这是因为数据结构是只追加(append-only)的,存储在当前目录中的数据永远不会被覆盖。...MemTable的大小超过阈值NVM-Log引擎将其标记为不可变(immutable),并启动一个新的MemTable。

    1.4K00

    非易失性数据库系统存储与恢复方法

    另外,一些固有的物理限制阻止DRAM容量扩展超出今天的水平。即使预留数据不经常使用,也需要阶段性将他刷写,所以使用大量DRAM也会消耗大量电量。...现在通过NV-DIMM替换DRAM成为可能,并无需更改现有存储架构即可运行NVM-only数据库管理系统。本文的结构:section 2:讨论NVM为什么数据库管理系统的存储架构需要重新评估。...背景 下面综述出现的NVM技术并讨论本论文使用的硬件模拟平台。 动机 两类关系型数据库架构:面向磁盘和面向内存。...引擎使用分配器接口维护主记录以支持有效的更新。系统重新启动,引擎可以安全地使用主记录访问当前目录,因为该目录保证处于一致状态。...系统重新启动,它首先访问主记录(master record)以定位当前目录。之后,它可以开始处理交易。故障产生的脏目录占用的存储空间由NVM分配器异步回收。

    98330

    基于pnpm + lerna + typescript的最佳项目实践 - 理论篇

    为什么会出现pnpm?因为yarn的出现并没有满足作者的一些期待,反而有些失望。...尽管它使安装速度更快,并且具有一些不错的新功能,但它使用与npm相同的平面node_modules结构(自版本 3 起)。扁平化的依赖树带来了一系列问题(具体后面会讲) 为什么pnpm?...: package中经常创建太深的依赖树,这会导致 Windows 上的目录路径过长问题 一个package在不同的依赖项中需要,它会被多次复制粘贴并生成多份文件 Flat installation...又如何被项目中使用呢? 答案是Store + Links! Store pnpm资源在磁盘上的存储位置。...注意: 有时还有 semver 格式的“标签”或“扩展”,用于标记预发布或测试版(例如2.0.0-beta.3) 开发人员谈论两个 semver 版本彼此“兼容”,他们指的是向后兼容的更改(minor

    3.5K20
    领券