How to consolidate various package versions in yarn.lock?

30 Views Asked by At

After updating packages in a monorepo (using Turborepo by Vercel) so that all match the same versions, I noticed that there are still differing versions for many packages in yarn.lock file. For instance see what I get in yarn.lock for tailwindcss:

tailwindcss@^3.2.4:
  version "3.3.3"
  resolved "https://registry.yarnpkg.com/tailwindcss/-/tailwindcss-3.3.3.tgz#90da807393a2859189e48e9e7000e6880a736daf"
  integrity sha512-A0KgSkef7eE4Mf+nKJ83i75TMyq8HqY3qmFIJSWy8bNt0v1lG7jUcpGpoTFxAwYcWOphcTBLPPJg+bDfhDf52w==
  dependencies:
    ...

tailwindcss@^3.3.0:
  version "3.4.1"
  resolved "https://registry.yarnpkg.com/tailwindcss/-/tailwindcss-3.4.1.tgz#f512ca5d1dd4c9503c7d3d28a968f1ad8f5c839d"
  integrity sha512-qAYmXRfk3ENzuPBakNK0SRrUDipP8NQnEY6772uDhflcQz5EhRdD7JNZxyrFHVQNCwULPBn6FNPp9brpO7ctcA==
  dependencies:
    ...

tailwindcss@^3.3.1:
  version "3.3.2"
  resolved "https://registry.yarnpkg.com/tailwindcss/-/tailwindcss-3.3.2.tgz#2f9e35d715fdf0bbf674d90147a0684d7054a2d3"
  integrity sha512-9jPkMiIBXvPc2KywkraqsUfbfj+dHDb+JPWtSJa9MLFdrPyazI7q6WX2sUrm7R9eVR7qqv3Pas7EvQFzxKnI6w==
  dependencies:
    ...

From my understanding of semver ^ for non-zero versions, all these should match the same package, so why does that not happen? This actually creates a mess in my app that sometimes result in mismatching packages being used at the same time.

Type 'import("...").ReactNode' is not assignable to type 'import("...").ReactNode'.

How can I consolidate all the different packages to make all matching references use the same physical installed package like this?

tailwindcss@^3.2.4, tailwindcss@^3.3.1, tailwindcss@^3.4.1:
  version "3.4.1"
  resolved "https://registry.yarnpkg.com/tailwindcss/-/tailwindcss-3.4.1.tgz#f512ca5d1dd4c9503c7d3d28a968f1ad8f5c839d"
  integrity sha512-qAYmXRfk3ENzuPBakNK0SRrUDipP8NQnEY6772uDhflcQz5EhRdD7JNZxyrFHVQNCwULPBn6FNPp9brpO7ctcA==
  dependencies:
    ...

How can I make this the default behavior when installing/updating anything? In other words, when two package.json records use different version string (e.g. xyz@^3.2.4 and xyz@^3.3.0), but both of them match the same newer version, to have the old records in yarn.lock deleted and consolidated.


Edit: Another mindless example is this. Why on earth does this even happen?

"@types/[email protected]":
  version "20.11.24"
  resolved "https://registry.yarnpkg.com/@types/node/-/node-20.11.24.tgz#cc207511104694e84e9fb17f9a0c4c42d4517792"
  integrity sha512-Kza43ewS3xoLgCEpQrsT+xRo/EJej1y0kVYGiLFE1NEODXGzTfwiC6tXTLMQskn1X4/Rjlh0MQUvx9W+L9long==
  dependencies:
    undici-types "~5.26.4"

"@types/node@^20":
  version "20.11.20"
  resolved "https://registry.yarnpkg.com/@types/node/-/node-20.11.20.tgz#f0a2aee575215149a62784210ad88b3a34843659"
  integrity sha512-7/rR21OS+fq8IyHTgtLkDK949uzsa6n8BkziAKtPVpugIkO6D+/ooXMvzXxDnZrmtXVfjb1bKQafYpb8s89LOg==
  dependencies:
    undici-types "~5.26.4"

Desired

"@types/react@*", "@types/[email protected]", "@types/react@>=16", "@types/react@^18":
  version "18.2.57"
  resolved "https://registry.yarnpkg.com/@types/react/-/react-18.2.57.tgz#147b516d8bdb2900219acbfc6f939bdeecca7691"
  integrity sha512-ZvQsktJgSYrQiMirAN60y4O/LRevIV8hUzSOSNB6gfR3/o3wCBFQx3sPwIYtuDMeiVgsSS3UzCV26tEzgnfvQw==
  dependencies:
    ...
0

There are 0 best solutions below