以编程方式安装或更新到最新版本的全局包的最快方法是啥?
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 包来使用它,并提供更多配置。
【讨论】:
以上是关于以编程方式安装或更新到最新版本的全局包的最快方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章