package.json固定依赖的依赖的版本

772 阅读2分钟

今天遇到了一个问题,在项目里使用yarn reload的时候,出现一个报错,说commander12.0.0版本必须要node18以上才能用,否则不行。刚开始我以为又是版本切错了弄出来的问题,但是把项目版本切回16,再安装,无论是删了yarn.lock还是node_modules,都没用,还是有同样的报错。

解决方法是:

  1. 先查看commander这个包在哪里引用过:yarn why commander,显示它是mockjs这个包的依赖,而且mockjs的依赖里会把它升级到最新版本。于是它就升到12.0.0了,只能在node18以上用。这个就是错误。
// mock.js里的package.json里的配置
"dependencies": {
  "commander": "*"
},
  1. 在package.json里配置resolution属性,链接如下,可以控制mockjs里commander的版本。这样就把它控制在11.1.0版本。用node16也可以了。 所以resolution可以控制依赖的依赖的版本。 链接:<zhuanlan.zhihu.com/p/610271827>

  2. 还要注意一个问题,当yarn.lock存在的时候,使用yarn/yarn install只会首先从yarn.lock中获取版本。当yarn.lock没有的情况下,才会按package.json里的版本号去远程拉取版本。项目里yarn reload执行的时候把yarn.lock删了,然后重新yarn。所以会出现如上的问题。

yarn.lock的作用就是锁定依赖版本: yarn.lock 文件是一个用于锁定项目依赖版本的文件,它会确保在不同的环境和团队成员之间,安装的依赖版本保持一致,以避免因为不同的安装环境导致的问题。 当你运行 yarn 命令时,Yarn 会检查项目根目录下的 yarn.lock 文件,并按照其中指定的版本信息来安装依赖。这可以确保项目的不同副本或环境之间的一致性,从而提高项目的可维护性和稳定性。

所以如果package.json没什么改动的情况下,最好不要删了yarn.lock再安装。如果有某几个包确实要重新拉取,推荐使用yarn addyarn upgrade 等命令来操作,它们会自动更新 yarn.lock 文件,并确保依赖版本的一致性。