一直对pnpm如何保存文件的不是很清楚,虽然知道都放在全局store,但是生成的那一堆文件也不知道代表什么意思,下午刚好看到一篇文章解释了它,这里记录一下以免遗忘。
pnpm version
v7.29.2
首先,获取全局的pnpm store目录;
# /Users/xx/Library/pnpm/store/v3
pnpm store path
这里为了测试起见,我清空了整个folder,接下来在自己项目中执行pnpm add dayjs@1.11.8
下载完成后check store/v3/files下的目录,果不其然,一堆奇奇怪怪的folder
虽然不知道这些文件干啥的但也可以猜到是pnpm用来保存dayjs的, 咱们接着往下看。
访问registry.npmjs.org/dayjs/1.11.… 可以获得dayjs的metadata,注意这个shasum,
接着咱们去/Users/xx/Library/pnpm/store/v3/files目录下执行find . -name "*.json"
xx@laptop files % find . -name "*.json"
./42/82f139c8c19dd6d0c7bd571e30c2d0ba7698ea-index.json
发现了没有,这个文件名是不是跟shasum一样?打开这个文件看看
files文件跟node_modules安装目录中的files一模一样
可以看到第一个file是editorconfig,integrity是sha512-sfvp9cUpFF0Y2OptB8JkiYUkJ2gbcPDd8fViVe8NHDwbGhzHgY1Q8GckYLTb2/yNQ4cG2gBbjyQ7XuurEP8ipA==
将sfvp9cUpFF0Y2OptB8JkiYUkJ2gbcPDd8fViVe8NHDwbGhzHgY1Q8GckYLTb2/yNQ4cG2gBbjyQ7XuurEP8ipA==转为hex得到b1fbe9f5c529145d18d8ea6d07c26489852427681b70f0ddf1f56255ef0d1c3c1b1a1cc7818d50f0672460b4dbdbfc8d438706da005b8f243b5eebab10ff22a4
这个时候,咱们去找
files/b1/fbe9f5c529145d18d8ea6d07c26489852427681b70f0ddf1f56255ef0d1c3c1b1a1cc7818d50f0672460b4dbdbfc8d438706da005b8f243b5eebab10ff22a4文件,
还真有。
打开这个文件,里面保存的就是library的文件内容。
最后还有个问题,pnpm install的时候是将全局store中存储的内容复制到咱们自己项目的node_modules中吗?先说答案,不是。
还是上面的editorconfig的例子,
在store/v3/files/b1下执行ls -li fbe9f5c529145d18d8ea6d07c26489852427681b70f0ddf1f56255ef0d1c3c1b1a1cc7818d50f0672460b4dbdbfc8d438706da005b8f243b5eebab10ff22a4
得到
然后咱们进去自己项目的node_modules目录,执行ls -li .editorconfig
看到最前面的node数字没,都是19586421,说明指向同一块地址,所以是pnpm帮我们创建了硬链接,并不是简单的copy