workbuddy node.js 每次会在 项目目录上安装 \node_modules 而不是把他放到node.js的安装目录 或者系统的path 中导致 类似的功能 都要载入 安装 程序包 很慢你的问题核心是npm 默认把包安装在项目本地node_modules每次新建项目都要重新npm install耗时且冗余。这是 npm 的设计哲学问题我来解释清楚并提供解决方案。为什么 npm 不把包装在全局npm 的设计原则是依赖隔离方式优点缺点项目本地安装默认版本隔离A项目用lodash4B项目用lodash3互不冲突每个项目重复下载磁盘空间占用大安装慢全局安装一次安装到处使用版本冲突噩梦项目不可移植换个机器就跑不起来所以 npm 选择了前者——保证可复现性优先于磁盘/时间效率。但这确实很慢怎么办方案一换用 pnpm / yarn推荐这是目前最实际的解法。它们共享一个全局硬链接缓存同一版本的包下载一次后跨项目直接硬链接不再重复下载工具特点安装pnpm硬链接省磁盘全局 store安装极快npm i -g pnpmyarn有全局缓存~/.yarn/cache离线安装npm i -g yarn以 pnpm 为例在F:\WorkBuddy_work\下执行# 全局安装一次npminstall-gpnpm# 之后用 pnpm 代替 npmcdF:\WorkBuddy_work\2026-06-07\apptainer-videopnpminstall效果第一次下载 lodash 到全局 store如C:\Users\Administrator\AppData\Local\pnpm\store之后 10 个项目用同一版本 lodash 时全部硬链接秒级完成。方案二利用 npm 自身缓存npm 也有缓存机制%APPDATA%/npm-cache命中缓存时可以跳过下载# 查看缓存位置npmconfig get cache# 优先使用缓存已经是默认行为但可确认npminstall--prefer-offline但这只减少网络下载不会减少 node_modules 的物理复制磁盘空间照样重复占用。方案三设置全局 node_modules 并 link不推荐仅了解npminstall-glodashnpmlinklodash# 在项目中创建符号链接问题版本冲突、不可移植开发中极少用。总结建议你的场景多项目频繁安装相同依赖最适合pnpmnpm install -g pnpm # 之后所有项目用 pnpm install一次下载永久复用它能解决你两个痛点安装快— 全局 store 缓存跨项目硬链接省磁盘— 不是复制是硬链接实际只存一份简单说npm 的node_modules不能直接搬进全局缓存因为它和 pnpm 的存储格式不兼容。但不用慌你的包已经下过一次了有办法不浪费这份下载。实际情况图解你现在的状态 npm 全局缓存 (%APPDATA%/npm-cache) ← 已有 lodash 等包的 .tgz 压缩包下载后自动存的 项目 node_modules/ ← 解压后的实际文件这一份没法复用 想要的状态 pnpm 全局 store ← 所有包只存一份原始文件 项目A node_modules/ ← 硬链接0字节额外占用 项目B node_modules/ ← 硬链接0字节额外占用正确做法一步切换到 pnpm# 1. 全局安装 pnpm只需一次npminstall-gpnpm# 2. 进入你的项目复用现有 node_modules 生成锁文件避免重新解析依赖树cdF:\WorkBuddy_work\2026-06-07-13-01-17\apptainer-videopnpmimportpnpm import会读取你现有的node_modules生成pnpm-lock.yaml然后# 3. 删掉旧的 node_modules这是 npm 格式的pnpm 用不了rm-rfnode_modules# 4. 用 pnpm 重新安装pnpminstall这次安装虽然会重新下载但只有这一次。之后所有项目用同样版本的包pnpm 直接从全局 store 硬链接不再重复下载。不想重新下载还有一个取巧的办法如果真的一秒都不想多等可以用--offline强制 npm 用本地缓存安装不联网然后让 pnpm 复用cdF:\WorkBuddy_work\2026-06-07-13-01-17\apptainer-video# npm 离线重装从 %APPDATA%/npm-cache 取不联网npminstall--prefer-offline# 然后 pnpm import 切换pnpmimportrm-rfnode_modulespnpminstall--prefer-offline# pnpm 也会尝试用自身缓存但说实话不如直接联网跑一次pnpm install因为包已经在你本机 npm cache 里了pnpm 再从 registry 拉一次很快大部分包就是几 MB。一句话总结你现在要做的命令装 pnpmnpm i -g pnpm进项目生成锁文件pnpm import删旧 node_modulesrm -rf node_modules重新装一次pnpm install**只痛这一次以后全自动复用。不是自动的。pnpm和npm是两个独立的命令你调用哪个就用哪个你输入行为npm install还是走 npm包复制到项目node_modulespnpm install走 pnpm硬链接到全局 store所以将来你手动创建项目时记得用pnpm代替npm就行pnpm init# 代替 npm initpnpm add react# 代替 npm install reactpnpm install# 代替 npm install想让 WorkBuddy 也自动用 pnpm这就涉及 WorkBuddy 的使用习惯了。我可以帮你记一条规则以后 Node.js 项目都用 pnpm 管理依赖这样每次 WorkBuddy 帮你搭项目或装包时会自动调用pnpm而不是npm。告诉workbudyy这个偏好 pnpm输入对话框 :把这个偏好记下来以后你在任何项目里让我装 npm 包我都会走 pnpm。
workbuddy ,node.js 每次会在 项目目录上安装 node_modules,能不能一次安装多次使用,为什么 npm 不把包装在全局
发布时间:2026/6/7 20:47:21
workbuddy node.js 每次会在 项目目录上安装 \node_modules 而不是把他放到node.js的安装目录 或者系统的path 中导致 类似的功能 都要载入 安装 程序包 很慢你的问题核心是npm 默认把包安装在项目本地node_modules每次新建项目都要重新npm install耗时且冗余。这是 npm 的设计哲学问题我来解释清楚并提供解决方案。为什么 npm 不把包装在全局npm 的设计原则是依赖隔离方式优点缺点项目本地安装默认版本隔离A项目用lodash4B项目用lodash3互不冲突每个项目重复下载磁盘空间占用大安装慢全局安装一次安装到处使用版本冲突噩梦项目不可移植换个机器就跑不起来所以 npm 选择了前者——保证可复现性优先于磁盘/时间效率。但这确实很慢怎么办方案一换用 pnpm / yarn推荐这是目前最实际的解法。它们共享一个全局硬链接缓存同一版本的包下载一次后跨项目直接硬链接不再重复下载工具特点安装pnpm硬链接省磁盘全局 store安装极快npm i -g pnpmyarn有全局缓存~/.yarn/cache离线安装npm i -g yarn以 pnpm 为例在F:\WorkBuddy_work\下执行# 全局安装一次npminstall-gpnpm# 之后用 pnpm 代替 npmcdF:\WorkBuddy_work\2026-06-07\apptainer-videopnpminstall效果第一次下载 lodash 到全局 store如C:\Users\Administrator\AppData\Local\pnpm\store之后 10 个项目用同一版本 lodash 时全部硬链接秒级完成。方案二利用 npm 自身缓存npm 也有缓存机制%APPDATA%/npm-cache命中缓存时可以跳过下载# 查看缓存位置npmconfig get cache# 优先使用缓存已经是默认行为但可确认npminstall--prefer-offline但这只减少网络下载不会减少 node_modules 的物理复制磁盘空间照样重复占用。方案三设置全局 node_modules 并 link不推荐仅了解npminstall-glodashnpmlinklodash# 在项目中创建符号链接问题版本冲突、不可移植开发中极少用。总结建议你的场景多项目频繁安装相同依赖最适合pnpmnpm install -g pnpm # 之后所有项目用 pnpm install一次下载永久复用它能解决你两个痛点安装快— 全局 store 缓存跨项目硬链接省磁盘— 不是复制是硬链接实际只存一份简单说npm 的node_modules不能直接搬进全局缓存因为它和 pnpm 的存储格式不兼容。但不用慌你的包已经下过一次了有办法不浪费这份下载。实际情况图解你现在的状态 npm 全局缓存 (%APPDATA%/npm-cache) ← 已有 lodash 等包的 .tgz 压缩包下载后自动存的 项目 node_modules/ ← 解压后的实际文件这一份没法复用 想要的状态 pnpm 全局 store ← 所有包只存一份原始文件 项目A node_modules/ ← 硬链接0字节额外占用 项目B node_modules/ ← 硬链接0字节额外占用正确做法一步切换到 pnpm# 1. 全局安装 pnpm只需一次npminstall-gpnpm# 2. 进入你的项目复用现有 node_modules 生成锁文件避免重新解析依赖树cdF:\WorkBuddy_work\2026-06-07-13-01-17\apptainer-videopnpmimportpnpm import会读取你现有的node_modules生成pnpm-lock.yaml然后# 3. 删掉旧的 node_modules这是 npm 格式的pnpm 用不了rm-rfnode_modules# 4. 用 pnpm 重新安装pnpminstall这次安装虽然会重新下载但只有这一次。之后所有项目用同样版本的包pnpm 直接从全局 store 硬链接不再重复下载。不想重新下载还有一个取巧的办法如果真的一秒都不想多等可以用--offline强制 npm 用本地缓存安装不联网然后让 pnpm 复用cdF:\WorkBuddy_work\2026-06-07-13-01-17\apptainer-video# npm 离线重装从 %APPDATA%/npm-cache 取不联网npminstall--prefer-offline# 然后 pnpm import 切换pnpmimportrm-rfnode_modulespnpminstall--prefer-offline# pnpm 也会尝试用自身缓存但说实话不如直接联网跑一次pnpm install因为包已经在你本机 npm cache 里了pnpm 再从 registry 拉一次很快大部分包就是几 MB。一句话总结你现在要做的命令装 pnpmnpm i -g pnpm进项目生成锁文件pnpm import删旧 node_modulesrm -rf node_modules重新装一次pnpm install**只痛这一次以后全自动复用。不是自动的。pnpm和npm是两个独立的命令你调用哪个就用哪个你输入行为npm install还是走 npm包复制到项目node_modulespnpm install走 pnpm硬链接到全局 store所以将来你手动创建项目时记得用pnpm代替npm就行pnpm init# 代替 npm initpnpm add react# 代替 npm install reactpnpm install# 代替 npm install想让 WorkBuddy 也自动用 pnpm这就涉及 WorkBuddy 的使用习惯了。我可以帮你记一条规则以后 Node.js 项目都用 pnpm 管理依赖这样每次 WorkBuddy 帮你搭项目或装包时会自动调用pnpm而不是npm。告诉workbudyy这个偏好 pnpm输入对话框 :把这个偏好记下来以后你在任何项目里让我装 npm 包我都会走 pnpm。