文章页正文上
这篇文章主要介绍“怎么开发一个node切换源小工具”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“怎么开发一个node切换源小工具”文章能帮助大家解决问题。 思路1,调用命令 设置源
npmconfigsetregistry源地址
思路2 使用查看命令获取源地址
npmconfiggetregistry
主要就是这两步操作代码实现commander
commander
是一个nodejs
的模块可以解析我们输入的命令,常用于各种脚手架如vue vite等,例如 xxx -V
查看版本 xxx use
执行脚本 xxx -h
查看帮助 等都可以使用 commander
实现inquirer
inquirer
也是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如何判断网络通不通”吧! 使用ping命令检测在Node.js中,可以使用child_process模…
文章页内容下