Nodejs的项目会带一个package.json文件,里面列举了此项目依赖的各种包(通常安置在node_modules目录下可以找到),并且每个包要指明其版本号。包的版本号使用Semantic Versioning的方式命名,参考 About semantic versioning,下面是文档中带的例子:
- Patch releases: 1.0 or 1.0.x or ~1.0.4
- Minor releases: 1 or 1.x or ^1.0.4
- Major releases: * or x
默认情况下,package.json里面指定的都是Minor releases,比如:
"postcss": "^7.0.18",
上面指定的postcss的版本其实是一个范围,可以匹配(>= 7.0.18)以及(<8.0.0)的范围内的版本。 这里面指定的范围说实话有点大。版本范围过大有可能会导致软件包的依赖出现问题(比如这个问题。
另外,在使用yarn等软件包管理工具的时候,会生成yarn.lock文件。在package.json中指定过大的版本范围,会导致一种情况,那就是yarn.lock中的软件bao版本升级了,而package.json却没有动静。使用
yarn upgrade
或者yarn upgrade --latest
之类的命令都不起效果。
Why Running yarn upgrade
Does Not Update My package.json
这篇文章对这个问题有较深入的探讨,指出的办法是使用:
$ yarn upgrade react@^
# 或者
$ yarn upgrade package@[version]
另一篇文章yarn upgrade
does not update package.json | SOLUTION所指出的办法是:
# 先执行
yarn upgrade react react-dom jest-dom css-loader
# 后执行
yarn add react react-dom jest-dom css-loader
此外,还可以使用yarn-upgrade-all来解决这个问题。它的办法是先删除包,再添加。
其他参考
2022-06-07更新
可以关停数据上报:yarn config set enableTelemetry 0
在ubuntu安装yarn和nodejs:
- https://linuxize.com/post/how-to-install-yarn-on-ubuntu-20-04/
- https://github.com/nodesource/distributions/blob/master/README.md#deb
(完)