以编程方式安装或更新到最新版本的全局包的最快方法是啥?

Posted

技术标签:

【中文标题】以编程方式安装或更新到最新版本的全局包的最快方法是啥?【英文标题】:What is the fastest way to programatically install or update to the latest version a global package?以编程方式安装或更新到最新版本的全局包的最快方法是什么? 【发布时间】:2021-07-18 17:27:29 【问题描述】:

我有一个npx 脚本,它将全局安装/更新某个包到最新版本(如果还没有的话)。

运行npm i -g myPackage 以确保最新版本耗时过长。看起来它会检查所有包依赖项并检查它们的版本,即使所需的包已经是最新版本。

我想做这样的事情,但以编程方式。我已经使用execa 包来处理类似的东西,并且可能会适合它。:

npm list -g myPackage 检查安装包

如果已安装,请检查是否更新

npm outdated -g myPackage

如果未安装或过期,

npm i -g myPackage 安装/更新它。

是否有任何现成的解决方案或通过 npm 内置的方法?否则,如何以编程方式检查上述两个验证的结果?

【问题讨论】:

【参考方案1】:

这是我在 TS 中的做法,它正在工作。不确定这是否是最好的方法,但如果它已经更新,则比npm i -g myPackage 花费的时间更少:

import execa from 'execa';

async function checkGlobalPackageUpdate(packageName: string): Promise<'notInstalled' | 'outdated' | 'updated'> 
  console.log(`Checking if $packageName is installed and updated...`);

  // Check if it's installed
  try 
    await execa('npm', ['list', '-g', packageName]);
   catch 
    return 'notInstalled';
  

  // Check if it's updated
  const result = await execa('npm', ['outdated', '-g', packageName]);
  const updated = result.stdout === '';
  return updated ? 'updated' : 'outdated';

如果没有更好的选择,我可能会创建一个简单的 npm/npx 包来使用它,并提供更多配置。

【讨论】:

以上是关于以编程方式安装或更新到最新版本的全局包的最快方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章

以编程方式查找最新 Qt 版本号的最简单方法是啥?

求教:osx10.8.5如何升级到最新版本

Knex 以编程方式迁移最新版本

WiX:更新“添加/删除程序”中显示的版本号

如何以编程方式获取解决方案中使用的 NuGet 包的版本?

ionic 项目安装依赖出现以下错误