手把手教你发布一个NPM包!分享一键下载保存任意掘金作者的所有文章为Markdown文件的插件

2022-03-03 12:16:39 浏览数 (1)

前言

在大家的支持下,今年参加掘金的人气作者排行榜,最后获得了2021年度人气作者第7的成绩,再次感谢各位朋友们的鼎力支持。但没想到最后被狠狠的恶心了一把,除了排名揭晓时当天的直播外,官方至今没有再推送人气排行榜的任何信息。

所以我特别生气,一怒之下写了篇文章表达不满

不过,过去的事就不再啰嗦了,反正不爱了。

这篇文章主要是介绍一下我写的一个小插件juejin-posts-backup,可以一键备份下载某用户全部的掘金文章为markdown文件。

另外也想通过这篇文章,来分享一下如何发布一个自己的npm包 或基于node的命令行工具。

获取参数

首先你当然要实现自己这个应用的逻辑,当用户在使用你工具的时候,可以通过下面的方式来获得参数

代码语言:javascript复制
node index.js 123213213

然后你在代码中通过

代码语言:javascript复制
process.argv.slice(2)

就能获取到传参的内容,不过本文里我要分享一个inquirer.js的插件,它可以帮助我们的应用在node命令行中实现用户交互,比如可以等待用户输入,可以引导用户选择一些选项。就像vuecli一样

我分享一下我代码中的用法,其他用法大家自己去看它的文档吧,非常简单

inquirer.js文档:https://github.com/sboudrias/Inquirer.js

代码语言:javascript复制
async function letUserInput(){
    let jj_userid,jj_username;
  
    //第一个等待用户输入的问题
    await inquirer.prompt([
    {
      name:"输入要备份的掘金用户ID",
      type:"number",//仅限输入数字
      required:true,//必填
      validate: function (input) {//校验输入
        var done = this.async();
  
        //我这里的校验是去获取掘金的用户信息,能获取到代表输入没问题
        getUserInfo(input,(res)=>{
          if(res.err_no!=0){
            done(res.err_msg);
          }else if(res.data.user_name){
            jj_userid = input;
            jj_username = res.data.user_name;
            done(null, true);
          }else done('没有找到对应用户');
          })
        }
      }
    ]);

    //第二个等待用户输入的问题,这是一个confirm形式的问题,需要用户输入y/n
    const res = await inquirer.prompt([
      {
        name:"确定要备份 " jj_username " 的全部文章吗?",
        type:"confirm",
        default:true
        }
    ]);

    //获取用户最后输入的结果
    if(Object.values(res)[0])getArticlesAfter(jj_userid);
}

忽略配置

添加 .npmignore来忽略一些目录下的项目,和 .gitignore 一样

全局包的配置和调试

最终我们希望用户通过全局命令来使用,所以我们要在package.json中添加

代码语言:javascript复制
"bin": {
  "jjbackup": "index.js"
}

这段配置代表了最终会生成一个名为jjbackup的bin文件,实际执行的node代码文件为index.js

index.js文件的第一行要加入

代码语言:javascript复制
#!/usr/bin/env node

这一行的意思是这个bin文件使用node来执行

接着使用npm link命令,将本地代码软链到系统命令中来模拟用户全局安装。

完成后你就可以使用jjbackup命令来试试看。

发布NPM包

测试都没问题后,你就可以准备发布你的npm包了。

  1. 注册npm账户(https://www.npmjs.com/)
  2. 使用npm login命令在终端中登录你的账户
  3. 使用npm publish发布的插件

在发布时,你可能会遇到一些问题。一般百度或Google都能找到解决方案。

但下面这个问题真是让我挠头了很久,后来在https://www.npmjs.com/ 账号里重新绑定一个新的邮箱,并完成邮箱的验证后就解决了。

最终效果

0 人点赞