为何使用pnpm时,@vercel/style-guide无需安装依赖ESLint插件?
核心原因是@vercel/style-guide的依赖配置设计、ESLint对共享配置的解析规则,再结合pnpm的依赖管理特性共同作用的结果:
@vercel/style-guide的依赖声明策略:它没有把eslint-plugin-react这类插件设为
peerDependencies,而是直接将它们作为自身的dependencies。当你在项目中安装@vercel/style-guide时,pnpm会自动把这些插件下载到@vercel/style-guide包自身的node_modules子目录,或者通过pnpm的虚拟存储机制关联到对应插件。ESLint对共享配置的解析规则:ESLint加载
extends字段指定的共享配置时,会切换到该共享配置包的目录上下文去解析它依赖的插件。也就是说,当@vercel/style-guide的配置文件引用plugin:react/recommended这类规则集时,ESLint会去@vercel/style-guide自己的依赖目录里找eslint-plugin-react,而非强制要求你的项目根目录安装该插件。pnpm的依赖结构适配:虽然pnpm默认采用嵌套式
node_modules结构,但它的虚拟存储(virtual store)机制会为每个包建立依赖的硬链接,同时ESLint的模块解析逻辑会沿着包的依赖链查找,完全适配这种结构,不会出现模块找不到的问题。
简言之:@vercel/style-guide自行承担了插件的安装责任,ESLint会顺着它的目录查找插件,pnpm的结构也支持这种跨包模块查找,因此你无需额外安装底层插件。
内容的提问来源于stack exchange,提问作者Magnus

