0

我不知道这是一个错误还是缺乏理解。我不明白 pnpm 商店在 Windows 上的工作方式。

比如说,我在 C: 上使用了一个文件夹“test”——存储 (.pnpm-store) 是在 %USERPROFILE% 中创建的。当我在另一个驱动器上有这个文件夹“test”时,存储是在“test”中创建的。此外,当该驱动器上还有另一个文件夹“test2”时,将在“test2”中创建另一个新存储。IMO,这个(其他 - 不是c)驱动器上的“test”和“test2”应该使用这个驱动器根目录中的存储(是的,我的用户可以在那里创建一个文件夹),不应该。

然后,假设我有一个文件夹“test”,里面有一个名为“package1”的包文件夹,我通过“pnpm init -y”创建了 package.json。现在我添加一个包,例如“pnpm add debug”。IMO 应引用此驱动器上的商店。但它不是:

C:\test\package1>dir /s | findstr JUNCTION
10.10.2019  13:25    <JUNCTION>     debug [C:\test\package1\node_modules\.pnpm\registry.npmjs.org\debug\4.1.1\node_modules\debug]
10.10.2019  13:25    <JUNCTION>     ms [C:\test\package1\node_modules\.pnpm\registry.npmjs.org\ms\2.1.2\node_modules\ms]
10.10.2019  13:25    <JUNCTION>     ms [C:\test\package1\node_modules\.pnpm\registry.npmjs.org\ms\2.1.2\node_modules\ms]

那么有什么问题呢?

4

1 回答 1

1

驱动器应该使用该驱动器根目录中的存储(是的,我的用户可以在那里创建一个文件夹),不应该。

当您安装在用户目录所在的同一驱动器上时,将在用户目录中创建存储。当您在其他驱动器上安装时,将在驱动器的根目录创建存储(例如, at D:\.pnpm-store

应引用此驱动器上的存储。但它不是

您在项目中看到的那个包实际上与商店中的那个包相同。这是一个硬链接。来自pnpm 常见问题页面的更多详细信息:

pnpm 创建从全局存储到项目的 node_modules 文件夹的硬链接。硬链接指向磁盘上原始文件所在的相同位置。因此,例如,如果您的项目中有 foo 作为依赖项,并且它占用 1MB 空间,那么它看起来会在项目的 node_modules 文件夹中占用 1MB 空间,并且在全局存储中占用相同数量的空间。但是,这 1MB 是从两个不同位置寻址的磁盘上的相同空间。所以 foo 总共占用 1MB,而不是 2MB。

于 2019-10-10T23:58:58.033 回答