我尝试将所有全局包(包括NPM本身)更新到当前主版本的最新次版本(如current_major.x.x)。npm upgrade -g --force将强制升级所有全局软件包,包括主要版本,但这肯定会破坏一些东西。我知道我可以升级所有知道当前主要版本的软件包,但是我想自动化这个过程。
current_major.x.x
npm upgrade -g --force
2exbekwf1#
这将为我做到这一点,虽然,它将重新安装现有的软件包,即使没有版本的变化。
npm_global_packages=($(npm list -g --depth 0 | awk '/ /{print $2}')) for val in "${npm_global_packages[@]}"; do npm i -g --force $(echo $val | tr "." "\n" | head -1) done
--force选项是为了避免符号链接问题。离开它不会解决不必要的重新安装。我想知道是否有一个更聪明的方法,但这是我现在要去的。深入了解
--force
npm_global_packages
npm@6.14.12 npx@10.2.2 pm2@5.2.0 rimraf@3.0.2
tr "." "\n" | head -1
.
npm i -g --force npm@6
npm i -g --force npx@10
7uzetpgm2#
这和我遇到的问题是一样的,我尝试了所有我能找到的解决方案,但最后在文档中找到了答案。您可以通过以下方式更新所有软件包,而不会产生任何副作用:
npm install npm@latest -g
您可以找到更多详细信息here。
2条答案
按热度按时间2exbekwf1#
这将为我做到这一点,虽然,它将重新安装现有的软件包,即使没有版本的变化。
--force
选项是为了避免符号链接问题。离开它不会解决不必要的重新安装。我想知道是否有一个更聪明的方法,但这是我现在要去的。深入了解
npm_global_packages
将是一个类似npm@6.14.12 npx@10.2.2 pm2@5.2.0 rimraf@3.0.2
的数组。tr "." "\n" | head -1
会将每个值按.
拆分,并只返回第一个段,因此脚本实际上会运行npm i -g --force npm@6
、npm i -g --force npx@10
...,这将在相同的主版本上重新安装所有软件包,尽管是最新的次版本。7uzetpgm2#
这和我遇到的问题是一样的,我尝试了所有我能找到的解决方案,但最后在文档中找到了答案。您可以通过以下方式更新所有软件包,而不会产生任何副作用:
您可以找到更多详细信息here。