在使用 Yarn workspace 管理的 monorepo 项目中,子包执行依赖安装时,根目录的 preinstall 钩子未被触发。分析发现,使用 `yarn --cwd ../ preinstall` 命令因路径问题导致死循环。最终,通过将相对路径改为绝对路径,并使用 `git rev-parse --show-toplevel` 获取项目根目录,解决了该问题。
在团队开发中,统一使用同一包管理器(如npm、yarn)至关重要。为避免因不同包管理器导致的问题,可以使用pnpm的only-allow工具。通过在package.json中添加preinstall钩子,检测用户使用的包管理器并给出错误提示。最终实现了一个功能完整的npm包only-allow。
完成下面两步后,将自动完成登录并继续当前操作。