pnpm store的文件保存结构

1,511 阅读2分钟

一直对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

image.png

虽然不知道这些文件干啥的但也可以猜到是pnpm用来保存dayjs的, 咱们接着往下看。

访问registry.npmjs.org/dayjs/1.11.… 可以获得dayjs的metadata,注意这个shasum,

image.png

接着咱们去/Users/xx/Library/pnpm/store/v3/files目录下执行find . -name "*.json"

xx@laptop files % find . -name "*.json"
./42/82f139c8c19dd6d0c7bd571e30c2d0ba7698ea-index.json

发现了没有,这个文件名是不是跟shasum一样?打开这个文件看看

image.png files文件跟node_modules安装目录中的files一模一样

image.png

可以看到第一个file是editorconfig,integrity是sha512-sfvp9cUpFF0Y2OptB8JkiYUkJ2gbcPDd8fViVe8NHDwbGhzHgY1Q8GckYLTb2/yNQ4cG2gBbjyQ7XuurEP8ipA==sfvp9cUpFF0Y2OptB8JkiYUkJ2gbcPDd8fViVe8NHDwbGhzHgY1Q8GckYLTb2/yNQ4cG2gBbjyQ7XuurEP8ipA==转为hex得到b1fbe9f5c529145d18d8ea6d07c26489852427681b70f0ddf1f56255ef0d1c3c1b1a1cc7818d50f0672460b4dbdbfc8d438706da005b8f243b5eebab10ff22a4 这个时候,咱们去找 files/b1/fbe9f5c529145d18d8ea6d07c26489852427681b70f0ddf1f56255ef0d1c3c1b1a1cc7818d50f0672460b4dbdbfc8d438706da005b8f243b5eebab10ff22a4文件, 还真有。 打开这个文件,里面保存的就是library的文件内容。

image.png

最后还有个问题,pnpm install的时候是将全局store中存储的内容复制到咱们自己项目的node_modules中吗?先说答案,不是。 还是上面的editorconfig的例子, 在store/v3/files/b1下执行ls -li fbe9f5c529145d18d8ea6d07c26489852427681b70f0ddf1f56255ef0d1c3c1b1a1cc7818d50f0672460b4dbdbfc8d438706da005b8f243b5eebab10ff22a4 得到

image.png

然后咱们进去自己项目的node_modules目录,执行ls -li .editorconfig

image.png

看到最前面的node数字没,都是19586421,说明指向同一块地址,所以是pnpm帮我们创建了硬链接,并不是简单的copy