在从事 Python 开发多年之后,我正在重新投入 JS/TS 进行 Shopify 应用程序开发。他们的入门模板是一个带有 Remix 的 TypeScript/JavaScript 应用程序,以 npm、yarn 或 pnpm 作为构建工具。我选择了 pnpm,因为我了解到它具有性能优势,因为下载过程中的并行性更高,并且有一个中央存储,它硬链接到而不是复制文件。
为了拥有可重复的开发环境,我正在使用 docker-compose 创建一个包含 3 个容器(应用程序、PostgreSQL、MariaDB)的 devcontainer。
当我在主机(Mac OS)上执行
pnpm i
时,所有内容都会安装到 /Users/$USER/Library/pnpm/store/v3 中。
对于 docker devcontainers,我的项目文件夹上方的文件夹作为 /workspaces 挂载到 docker 容器中(例如 /User/$USER/a/b/c/project,c 挂载为 /workspaces),而我的项目文件夹是 /工作空间/项目。
当我现在在项目文件夹中
pnpm i
时,存储会在主机上的/workspaces/.pnpm-store中创建,该存储位于主机上/User/$USER/a/b/c/.pnpm-store
到目前为止,一切都很好。但我意识到,某些依赖项可能需要不同版本的 devcontainer 操作系统。不同版本的 devcontainer 操作系统会导致不同版本的已编译依赖项(我知道,因为至少有一个无法在 1-18-bookwork 中的安装上构建)。
我当前项目的 Dockerfile 是 FROM mcr.microsoft.com/devcontainers/javascript-node:1-18-bullseye
当我迁移其他应用程序时,我可能需要另一个 Debian 版本。这将导致包位于同一目录中。 pnpm 会检测到这个吗?还是我最终会痛苦?
据我所知,没有办法影响商店路径。因此,分离 .npm 存储的唯一方法是按操作系统和版本在不同的文件夹中分离项目,这完全违背了 pnpm 的整个共享存储概念。
类似这样的:
不久前,但后来我发现:确实,pnpm 不会检测 npm 包构建的操作系统的差异。你将会在痛苦中结束。