当前在移动端开发多个典型问题的系统解决方案中,常常用nodejs来帮助开发一套辅助工具,以便于使用或者调试。
我们在建设应用发布平台(热修复平台)的过程中,即用nodejs开发了一套apub工具(类似于快应用的hap-toolkit工具链),将本地编译输出结果,生成下载链接,以二维码的方式提供扫码下载。
移动开发的一些典型问题(如:热修复问题、H5加速问题),除了应该有高效、核心的系统解决方案,还应该提供方便的工具链,以提升使用及开发效率。
一、如何让npm安装时将此命令安装到系统路径?
在项目的package.json中,创建“bin”这个key, 然后你要声明的命令及加载执行文件的路径,如:
基中, "apub"就是我的命令名称,“bin/apub”,会在当前项目的bin目录下寻找apub这个文件。当然这里的目录和名字都可你自己定义。
当我执行npm install完成安装后,apub会被安装到系统nodejs的一个bin目录下(这个目录已被声明到$PATH变量),我们就可在命令行中使用它了。
我的项目下bin目录的内容:
其中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) // 生成并打印二维码