分享更有价值
被信任是一种快乐

怎么开发一个node切换源小工具

文章页正文上

这篇文章主要介绍“怎么开发一个node切换源小工具”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“怎么开发一个node切换源小工具”文章能帮助大家解决问题。 思路1,调用命令 设置源

npmconfigsetregistry源地址

思路2 使用查看命令获取源地址

npmconfiggetregistry

主要就是这两步操作代码实现commandercommander是一个nodejs的模块可以解析我们输入的命令,常用于各种脚手架如vue vite等,例如 xxx -V查看版本 xxx use执行脚本 xxx -h查看帮助 等都可以使用 commander实现inquirerinquirer也是nodejs的一个模块,常用于命令交互,如vue的cli,vite等,react脚手架等例如这种选项,还有输入框,多选等registries.json这个文件里面放一些初始的源,从nrm的github偷的ping是我自己加的

{
"npm":{
"home":"https://www.npmjs.org",
"registry":"https://registry.npmjs.org/",
"ping":"https://registry.npmjs.org"
},
"yarn":{
"home":"https://yarnpkg.com",
"registry":"https://registry.yarnpkg.com/",
"ping":"https://registry.yarnpkg.com"
},
"tencent":{
"home":"https://mirrors.cloud.tencent.com/npm/",
"registry":"https://mirrors.cloud.tencent.com/npm/",
"ping":"https://mirrors.cloud.tencent.com/npm"
},
"cnpm":{
"home":"https://cnpmjs.org",
"registry":"https://r.cnpmjs.org/",
"ping":"https://r.cnpmjs.org"
},
"taobao":{
"home":"https://npmmirror.com",
"registry":"https://registry.npmmirror.com/",
"ping":"https://registry.npmmirror.com"
},
"npmMirror":{
"home":"https://skimdb.npmjs.com/",
"registry":"https://skimdb.npmjs.com/registry/",
"ping":"https://skimdb.npmjs.com/registry"
}
}

#!/usr/bin/envnode

const{program}=require('commander')
constPKG=require('../package.json')//引入packagejson
constregistries=require('../registries.json');//引入初始源
constinquirer=require('inquirer');
const{exec,execSync}=require('child_process')//子线程用于执行shell命令
constping=require('node-http-ping')//ping网址的一个库
constfs=require('fs')
constchalk=require("chalk");//console变颜色的一个库
constpath=require('path')
program.version(PKG.version)//设置版本默认命令-V--version

//读取源地址方便设置*
constgetOrigin=async()=>{
returnawaitexecSync('npmgetregistry',{encoding:"utf-8"})
}

//列出所有的源,如果当前有在使用前面加上*
program.command('ls').description('查看镜像').action(async()=>{

constres=awaitgetOrigin()

constkeys=Object.keys(registries)

constmessage=[]

//填充横线算法npm------yarn------
constmax=Math.max(...keys.map(v=>v.length))+3
keys.forEach(k=>{

constnewK=registries[k].registry==res.trim()?('*'+k):(''+k)
constArr=newArray(...newK)
Arr.length=max;
constprefix=Array.from(Arr).map(v=>v?v:'-').join('')

message.push(prefix+''+registries[k].registry)
})
console.log(message.join('n'))
})

//切换源
program.command('use').description('请选择镜像').action(()=>{
inquirer.prompt([
{
type:"list",
name:"sel",
message:"请选择镜像",
choices:Object.keys(registries)
}
]).then(result=>{

constreg=registries[result.sel].registry

exec(`npmconfigsetregistry${reg}`,null,(err,stdout,stderr)=>{

if(err){
console.error('切换错误',err)
}else{
console.log('切换成功')
}
})
})
})



//获取当前源
program.command('current').description('查看当前源').action(async()=>{
constreg=awaitgetOrigin()
constv=Object.keys(registries).find(k=>{
if(registries[k].registry===reg.trim()){
returnk;
}
})
console.log(chalk.blue('当前源:',v))
})

//ping源
program.command('ping').description('测试镜像地址速度').action(()=>{
inquirer.prompt([
{
type:"list",
name:"sel",
message:"请选择镜像",
choices:Object.keys(registries)
}
]).then(result=>{

consturl=registries[result.sel].ping.trim()

ping(url).then(time=>console.log(chalk.blue(`响应时长:${time}ms`)))
.catch(()=>console.log(chalk.red('GG')))

})
})

//添加源读写registries.json文件实现
program.command('add').description('自定义镜像').action(()=>{
inquirer.prompt([
{
type:"input",
name:"name",
message:"请输入镜像名称",
validate(answer){
constkeys=Object.keys(registries)
if(keys.includes(answer)){
return`不能起名${answer}跟保留字冲突`
}
if(!answer){
return'名称不能为空'
}
returntrue
}
},
{
type:"input",
name:"url",
message:"请输入镜像地址",
validate(answer){
if(!answer){
return`url不能为空`
}
returntrue
}
}
]).then(result=>{

constdel=(url)=>{
constarr=url.split('')
//本来想用at16以下不支持
returnarr[arr.length-1]=='/'?(arr.pop()&&arr.join('')):arr.join('')
}

registries[result.name]={
home:result.url.trim(),
registry:result.url.trim(),
ping:del(result.url.trim()),//去掉末尾/不然无法ping
}
fs.writeFileSync(path.join(__dirname,'../registries.json'),JSON.stringi免费云主机、域名fy(registries,null,4))
console.log(chalk.blue('添加完成'))
})
})



program.parse(process.argv)

使用方式

npmixmzs-g

安装完之后会有一个mmp 命令为什么不叫xmzs 别问问就是喜欢mmp

mmpls

列出所有的源

mmpuse

切换源 nrm是输入,我这儿是选择框方便一些

mmpcurrent

查看当前源

mmpping

测速

mapadd

自定义源mmp ls 查看关于“怎么开发一个node切换源小工具”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注云技术行业资讯频道,小编每天都会为大家更新不同的知识点。

相关推荐: nodejs如何判断网络通不通

这篇文章主要讲解了“nodejs如何判断网络通不通”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“nodejs如何判断网络通不通”吧! 使用ping命令检测在Node.js中,可以使用child_process模…

文章页内容下
赞(0) 打赏
版权声明:本站采用知识共享、学习交流,不允许用于商业用途;文章由发布者自行承担一切责任,与本站无关。
文章页正文下
文章页评论上

云服务器、web空间可免费试用

宝塔面板主机、支持php,mysql等,SSL部署;安全高速企业专供99.999%稳定,另有高防主机、不限制内容等类型,具体可咨询QQ:360163164,Tel同微信:18905205712

主机选购导航云服务器试用

登录

找回密码

注册