pnpm
pnpm
常用命令
查看全局配置
# long
pnpm config list --global
# short 失败 未识别出来 可能是和pnpm v7 v8 的cli区别。
pnpm c ls -g
# 失败
pnpm config ls -g
# 有效
pnpm config list -g
存储在 C 盘的内容并迁移清理
发现 C:\Users\ruanzhongnan\AppData\Local 文件夹里面存在 pnpm-state 和 pnpm-cache 两个文件夹。如下图所示:
同时发现这三个文件夹,在文档内有涉及到配置:
相关文档如下:
准备迁移目录
先全局查询配置:
pnpm config list -g
结果如下:
HOME=D:\dev-evn\pnpm
cache=D:\dev-evn\node-store\node_cache
disturl=https://npm.taobao.org/dist
global=true
https-proxy=null
prefix=D:\dev-evn\node-store\node_global
proxy=null
registry=https://registry.npm.taobao.org/
store-dir=D:\.pnpm-store
user-agent=pnpm/8.2.0 npm/? node/v16.19.0 win32 x64
打算按照以下命令来统一设置 global-dir、global-bin-dir、state-dir、cache-dir 这 4 个目录:
pnpm config set global-dir D:\store\pnpm\global-dir -g
pnpm config set global-bin-dir D:\store\pnpm\global-bin-dir -g
pnpm config set state-dir D:\store\pnpm\state-dir -g
pnpm config set cache-dir D:\store\pnpm\cache-dir -g
ERROR The configured global bin directory XXX is not in PATH
出现预期之外的错误:
ERROR The configured global bin directory "D:\store\pnpm\global-bin-dir" is not in PATH
通过检查 C:\Users\ruanzhongnan\AppData\Local\pnpm\config\rc 的文件,发现仅有两条被配置了。
运行命令 pnpm config list -g
之后,还是出现该错误。
尝试处理
尝试按照以下方案:
- 检查 ~/AppData/Local/pnpm/config/rc 文件,手动移除掉内容的全部配置。
- 路径增加双引号。
- 故意去除某个命令。
pnpm config set global-dir "D:\store\pnpm\global-dir" -g
# 故意跳过此命令 不手动设置
pnpm config set global-bin-dir "D:\store\pnpm\global-bin-dir" -g
pnpm config set state-dir "D:\store\pnpm\state-dir" -g
pnpm config set cache-dir "D:\store\pnpm\cache-dir" -g
再次查看全局配置,可以看到已经被配置的目录。然后手动迁移文件。
### ERR_PNPM_UNEXPECTED_STORE Unexpected store location
尝试运行以下命令,检查全局依赖包是否可用:
pnpm i -g typescript ts-node
报错如下:
PS C:\Windows\system32> pnpm i -g typescript ts-node
ERR_PNPM_UNEXPECTED_STORE Unexpected store location
The dependencies at "D:\store\pnpm\global-dir\5\node_modules" are currently linked from the store at "C:\Users\ruanzhongnan\AppData\Local\pnpm\store\v3".
pnpm now wants to use the store at "D:\.pnpm-store\v3" to link dependencies.
If you want to use the new store location, reinstall your dependencies with "pnpm install".
You may change the global store location by running "pnpm config set store-dir <dir> --global".
(This error may happen if the node_modules was installed with a different major version of pnpm)
尝试处理
运行 pnpm install -g
重新使用依赖存储位置。
重新安装:
C:\Windows\system32>\store\pnpm\global-dir\5\node_modules\pnpm\bin\pnpm.cjs" i -g typescript ts-node
系统找不到指定的路径。
最后经过检查,可以安装并看到全局依赖。
管理全局依赖
先用 pnpm i -g typescript ts-node
安装全局依赖
再用 pnpm ls -g
查看全局依赖
最后 pnpm up -g
升级本机的全局依赖
安装后无法被识别到
PS E:\code\rzn\personal-proj\RPGMV-dev-notes> pnpm -v
pnpm : 无法将“pnpm”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果包括路径,请确保路径正确,然后再试一次。
所在位置 行:1 字符: 1
+ pnpm -v
+ ~~~~
+ CategoryInfo : ObjectNotFound: (pnpm:String) [], CommandNotFoundException
+ FullyQualifiedErrorId : CommandNotFoundException
参考资料 https://juejin.cn/post/7189174073899876409
cmd 无权限
PS C:\Windows\system32> pnpm -v
pnpm : 无法加载文件 E:\dev-evn\node-store\node_global\pnpm.ps1,因为在此系统上禁止运行脚本。有关详细信息,请参阅 https:
/go.microsoft.com/fwlink/?LinkID=135170 中的 about_Execution_Policies。
所在位置 行:1 字符: 1
+ pnpm -v
+ ~~~~
+ CategoryInfo : SecurityError: (:) [],PSSecurityException
+ FullyQualifiedErrorId : UnauthorizedAccess
参考资料 https://blog.csdn.net/weixin_46212682/article/details/121784020
在 vscode 终端内运行失败
vscode 设置为管理员权限运行
https://blog.csdn.net/qq_41701363/article/details/113992144综合解决方案
https://blog.csdn.net/weixin_41563986/article/details/121183842
override.newPref.startsWith is not a function
如下图所示,这里的 pnpm 想要实现全局依赖管理,就要先切换到 node16。在 node14 下是找不到全局依赖的。
值得注意的版本差
注意到在不同的 node 环境下,pnpm 有着不同的版本。
node16
PS C:\Windows\system32> node -v
v16.19.0
PS C:\Windows\system32> pnpm -v
8.2.0
node14
PS C:\Windows\system32> node -v
v14.20.1
PS C:\Windows\system32> pnpm -v
7.22.0
猜测
不知道是为什么,pnpm 作为全局包,在不同的 node 环境下,有着不同的版本。不知道是不是 nvm 本身的 node 导致全局包的存储全部混乱了。
使用 corepack 安装
corepack use pnpm@latest
这里会给 package.json 加上 packageManager。
升级 pnpm
之前的升级方式是,pnpm 原地升级。
pnpm up -g pnpm@latest
现在的升级方式改了,变成要依赖于 corepack 的升级方式了。
corepack install -g pnpm@latest
经过实验,直接使用 corepack install 安装全局版本的 pnpm 有点问题,目前比较稳妥的全局安装和切换版本的命令如下:
corepack prepare pnpm@9.7.0 --activate