资讯专栏INFORMATION COLUMN

制作可全局执行的NPM包:批量清理github仓库

junnplus / 2582人阅读

摘要:各种开头的项目,还有些空仓库,啥都没写的。具体的代码,调用,实在简单,看看就好打包发布就这样打包,肯定不会有全局执行文件滴。然后在中,敲下如下代码说明全局执行命令叫是执行文件。

不知什么时候开始,自家github堆满了仓库代码。。。各种demo开头的项目,还有些空仓库,啥都没写的。自然,程序员写的最差的代码就是以前写的代码了,为了维护心中美好的光辉形象,我决定——————

不过,删除过程确实麻烦了些,身为“头脑简单,四肢发达” ,哦不对,“四肢简单,头脑发达”的程序员,怎么会甘心做苦力劳动呢?我决定搞个命令行批量执行下。

找到github API文档

要删除当然是要找API啦,不过,我开始想的是用puppeteer无头chrome搞的,后来发现直接有API,就直接用喽。
删除git仓库需要认证权限,我这里直接用Basic Auth验证,简单!Basic验证,简单说就是在请求头里,搞个Authorization:用户名:密码

命令行工具

必须是要美美的命令行优化工具啦,I pick这个inquirer。 有一些带颜色的终端字看着还是ok的,所以还带上了chalk这个库。

just do it

具体的代码,调用API,实在简单,看看就好:

#!/usr/bin/env node

var inquirer = require("inquirer");
var axios = require("axios");
var chalk = require("chalk");
var log = console.log;

var api = {
  user: async () => {
    return await axios({
      url: "https://api.github.com/user",
      method: "GET",
    });
  },
  repos: async () => {
    return await axios({
      url: "https://api.github.com/user/repos",
      method: "GET",
    });
  },
  deleteRepos: async (user, name) => {
    return await axios({
      method: "DELETE",
      url: `https://api.github.com/repos/${user}/${name}`,
    });
  },
  login: async () => {
    return await inquirer.prompt([
      {
        name: "username",
        message: "username?"
      },
      {
        name: "password",
        type: "password",
        message: "password?"
      }
    ]);
  },
  listRepos: async (repos) => {
    var list = [];
    repos.forEach(v => {
      var desc = v.description === null ? "" : v.description;
      list.push({name: v.full_name + " " + desc});
    });
    return await inquirer.prompt([
      {
        type: "checkbox",
        name: "rep",
        message: "select need cleared repos",
        choices: list
      }
    ]);
  }
};

(async () => {
  var inf = await api.login();
  var base64 = new Buffer.from(inf.username + ":" + inf.password).toString("base64");
  axios.interceptors.request.use(config => {
    config.headers = {
      Authorization: "Basic " + base64
    };
    return config;
  });
  var user = await api.user();
  log(`welcome ! ${chalk.green(user.data.name || user.data.login)}`);
  var repos = await api.repos();
  var selectRepos = await api.listRepos(repos.data);
  for (var j = 0; j < selectRepos.rep.length; j++) {
    var name = selectRepos.rep[j].indexOf(" ") === -1 ? selectRepos.rep[j] : selectRepos.rep[j].substring(0, selectRepos.rep[j].indexOf(" "));
    await api.deleteRepos(user.data.login, name);
  }
  log(chalk.green("successfull!"));
})();
npm打包发布

就这样打包,肯定不会有全局执行文件滴。

首先你需要在主执行的js的第一行写上
#!/usr/bin/env node

大家都知道,这是linux中指定文件执行解释器的意思,windows系统没用,但是配合上npm就有用啦,且先写着。

然后:在package.json中,敲下如下代码:
 "bin": {
    "ngit": "index.js"
  },

ngit说明全局执行命令叫ngit, index.js是执行文件。

ok,最后npm publish发布
npm install -g nodejs-github

再到cmd中,输入

ngit

就会直接执行代码啦,呼呼呼呼呼呼~~

github: https://github.com/chendonming/nodejs-github
npm: nodejs-github

各位看官阔以看下。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/104714.html

相关文章

  • 使用hexo+github搭建免费个人博客详细教程

    摘要:如果实在不会安装可以去网上找教程。打开,跳转到刚刚创建的文件夹位置,运行命令然后会在你的文件夹中搭建好了环境配置配置修改一些你的博客名字描述作者等。基于我的个人经验,建议都开启开启标签页命令,在博客目录添加元数据开启分类页命令,在博 Windows环境下Git安装、配置SSH key、安装node.js npm、安装Hexo及配置、发布博客 前言 使用github pages服务搭建博客的...

    番茄西红柿 评论0 收藏0
  • 在 Ubuntu 14.04 服务器上部署 Hexo 博客

    摘要:本文将介绍如何在一台的云服务器上快速部署博客站点,如何快速发布一篇博文并通过云服务器上的私有仓库部署到服务器目录下。此外,还要在云服务器上安装和两个必备的软件包。在服务器上部署博客以下为文章正文。 推荐理由:Hexo 是用 Node.js 开发的一个静态站点生成器(Static Site Generator),支持 Markdown 语法写作,有着强大的插件系统,而且性能优异。下面我推...

    cyqian 评论0 收藏0
  • [译]npm入门指南

    摘要:博客地址这篇文章是我在众成翻译翻译的一篇文章,一篇的入门指南,原文链接的出现使得用写服务端应用成为可能。你可以看到,这个过程也安装了其他的模块,它们都是的所依赖的模块。但是,得到的输出信息会很冗长,我们可以加上来精简一下输出。 github 博客地址: https://github.com/zengxiaota... 这篇文章是我在 众成翻译 翻译的一篇文章,一篇 npm 的入门指南,...

    mrcode 评论0 收藏0
  • Maven学习笔记

    摘要:学习笔记先生,您在写代码吗不,我们正在完成一项伟大的工程。于是打算重新学习一下。中央仓库镜像为了分担中央仓库的流量,提升用户的访问速度。生成项目报告,站点,发布站点。修改源码后也需要逐个手动进行操作。 maven学习笔记 先生,您在写代码吗? 不,我们正在完成一项伟大的工程。 前言 在刚学maven时,我就把maven当作一个引入jar包的工具而已,以前是自己下载jar包,现在是只用...

    tomlingtm 评论0 收藏0

发表评论

0条评论

junnplus

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<