Quiero saber la diferencia exacta entre las notaciones semver en package.json. alguien me puede explicar
La notación Semver no se used específicamente en package.json .
Si se sigue (*1), ayuda a los desarrolladores a comprender qué esperar de cualquier actualización en particular. Imagine que desea cambiar la versión de una biblioteca y ve que la diferencia está en la major parte de la versión (n en n.*.* ). Esto puede señalar las posibles repercusiones de actualizar el paquete, según la MAJOR version when you make incompatible API changes, .
*1 No siempre lo siguen los desarrolladores. Un ejemplo destacado es React Native. Los desarrolladores nunca han lanzado una versión principal y tratan a MINOR como MAJOR
Creo que la documentación de npm lo explica bien: https://docs.npmjs.com/cli/v6/using-npm/semver#advanced-range-syntax
Dado que están sucediendo muchas cosas, tal vez una breve explicación de los dos más comunes:
El modificador de intercalación (^) pasará automáticamente a la versión secundaria y de parche más alta, a menos que la versión principal sea 0. En este caso, solo se actualizará la versión de parche.
El modificador de tilde (~) solo irá a la versión de parche más alta. Entonces ~ y ^ son iguales cuando la versión principal es 0.
Obtuve esto de la documentación del nodo js. Hay una explicación bastante buena para la pregunta.
https://nodejs.dev/learn/the-package-lock-json-file
En package.json puede establecer a qué versiones desea actualizar (parche o menor), utilizando la notación semver, por ejemplo: