美文网首页
如何用nodejs写一个像hap-toolkit那样的命令行工具

如何用nodejs写一个像hap-toolkit那样的命令行工具

作者: 闲富北路的拉法 | 来源:发表于2018-05-14 15:06 被阅读0次

    当前在移动端开发多个典型问题的系统解决方案中,常常用nodejs来帮助开发一套辅助工具,以便于使用或者调试。

    我们在建设应用发布平台(热修复平台)的过程中,即用nodejs开发了一套apub工具(类似于快应用的hap-toolkit工具链),将本地编译输出结果,生成下载链接,以二维码的方式提供扫码下载。

    移动开发的一些典型问题(如:热修复问题、H5加速问题),除了应该有高效、核心的系统解决方案,还应该提供方便的工具链,以提升使用及开发效率。

    一、如何让npm安装时将此命令安装到系统路径?
    在项目的package.json中,创建“bin”这个key, 然后你要声明的命令及加载执行文件的路径,如:


    image.png

    基中, "apub"就是我的命令名称,“bin/apub”,会在当前项目的bin目录下寻找apub这个文件。当然这里的目录和名字都可你自己定义。
    当我执行npm install完成安装后,apub会被安装到系统nodejs的一个bin目录下(这个目录已被声明到$PATH变量),我们就可在命令行中使用它了。

    我的项目下bin目录的内容:


    image.png

    其中bin/apub只是引用相同目录下的index.js:

    #!/usr/bin/env node
    require('./index.js');
    

    关于package.json文件的更多配置项说明可参考:https://docs.npmjs.com/files/package.json#bin

    二、如何解析命令行参数?
    这里推荐commander这个解析库,自己去写还是要花很多时间的。这个库提供了非常方便地添加参数并解析的方式。

    const program = require('commander')
    const chalk = require('chalk')
    
     program
        .version(require('../package').version, '-v, --version')
        .usage('<command> [options]')
    
    program
        .command('server <file>')
        .description('create http server to allow downloading a file by scanning qr-code')
        .action((name, cmd) => {
            let apubServer = require('../lib/command/server')
            apubServer.onServer(name) // 此处根据传入参数解析结果,将执行转到了onServer这个方法
        })
    program.on('--help', () => {
        console.log()
        console.log(`  Run ${chalk.cyan(`apub <command> --help`)} for detailed usage of given command.`)
        console.log()
    })
    
    program.parse(process.argv)
    

    文中chalk库,能够对输出到标准输出的文字定制样式。

    三、如何将内容生成二维码?
    这里用到了qrcode-terminal这个库,将需要供扫码下载的文件,提供局域网内下载服务,将下载链接生成二维码打印即可:

    const qrcodeTerminal = require('qrcode-terminal')
    console.log(`\n${chalk.white("文件下载地址:" + downloadUrl)}`)
    qrcodeTerminal.generate(downloadUrl) // 生成并打印二维码
    

    相关文章

      网友评论

          本文标题:如何用nodejs写一个像hap-toolkit那样的命令行工具

          本文链接:https://www.haomeiwen.com/subject/gezddftx.html