为何同版本@ember/optional-features的npm依赖树不一致?
以下是导致两个项目子依赖版本不一致的常见原因,以及对应的解决方式:
npm版本不一致:虽然你用了相同的nvm版本,但两个项目环境的npm版本可能不同。npm的依赖解析逻辑在不同大版本(比如npm 6 vs npm 7+)中有明显差异,锁文件格式、依赖树计算规则都不一样,会直接影响子依赖的安装版本。可以在两个项目里分别执行
npm -v确认版本是否一致,统一npm版本后重新安装。锁文件固定了旧版本:如果其中一个项目之前安装过依赖,
package-lock.json里已经记录了inquirer@7.1.0的版本信息,后续执行npm install会优先遵循锁文件的记录,而不是拉取^7.0.1范围内的最新版本。解决方法是删除项目根目录的package-lock.json和node_modules文件夹,然后重新执行npm install,此时npm会重新计算依赖并安装符合范围的最新版本。项目存在其他依赖冲突:两个项目的其他依赖可能对inquirer有不同的版本要求,npm为了满足所有依赖的约束,会选择一个能兼容所有要求的版本,或者在不同层级安装不同版本。你可以在两个项目里分别执行
npm ls inquirer,查看所有依赖对inquirer的版本限制,排查是否存在冲突的情况。npm缓存残留旧版本:npm本地缓存中可能存储了inquirer@7.1.0的旧包,安装时直接取用了缓存内容,没有去拉取最新的兼容版本。可以执行
npm cache clean --force清理本地缓存,再重新执行npm install。
内容的提问来源于stack exchange,提问作者Saurabh Batra

