美文网首页
开发命令行工具CLI

开发命令行工具CLI

作者: 钱学敏 | 来源:发表于2019-02-21 11:57 被阅读0次

    最近开发了一些命令行工具,准备在团队分享一下开发经验,顺便写了篇文章。

    什么是命令行?

    Command Line Interface,一种通过命令行来交互的工具或者应用。
    比如:mkdir、cd、scp、vue-cli、webpack、npm、gulp等。

    使用CLI的好处?

    减少低级重复劳动、提高开发效率、规范develop workflow

    开始发车,4步完成CLI开发!

    1. 编写脚本、测试运行
      新建index.js内容如下
    const os = require("os")
    const ip = os.networkInterfaces().en0[1].address
    const options = process.argv.slice(2)
    if (options[0] === '-v') {
        console.log('v1.0.0')
    } else {
        console.log(`your ip is: ${ip}`)
    }
    

    执行node index.js测试代码执行结果如下

    image.png
    1. 设置运行时
      在小黑窗执行which env,将返回结果设置到第1步脚本的第一行,指定脚本的解释程序(env可以在系统的PATH目录中查找脚本解释器安装目录)
      image.png
      然后,你的代码就变成了下面这样
    #!/usr/bin/env node
    
    const os = require("os")
    const ip = os.networkInterfaces().en0[1].address
    const options = process.argv.slice(2)
    if (options[0] === '-v') {
        console.log('v1.0.0')
    } else {
        console.log(`your ip is: ${ip}`)
    }
    
    1. 分配执行权限
      执行chmod +x index.js给你编写的脚本分配可执行权限,分配完后直接执行一下index.js,发现可以执行了,有木有

      image.png
    2. 设置环境变量
      执行$PATH找环境变量

      image.png

    小知识:usr 指 Unix System Resource,而不是User
    通常/usr/bin下面的都是系统预装的可执行程序,会随着系统升级而改变
    /usr/local/bin目录是给用户放置自己的可执行程序的地方,推荐放在这里,不会被系统升级而覆盖同名文件
    如果两个目录下有相同的可执行程序,谁优先执行受到PATH环境变量的影响,比如我的电脑PATH变量为/usr/local/mongodb/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:“/usr/libexec/java_home”::/platform-tools:/tools:“/usr/libexec/java_home”:“/usr/libexec/java_home”/bin:/usr/local/mongodb/bin:/Users/qianxuemin/bin/
    这里/usr/local/bin优先于/usr/bin

    link可执行脚本到环境变量ln index.js /usr/local/bin/qianxuemin-ip,然后就可以找到自定义的命令了

    image.png

    当然,也可以使用自定义的命令qianxuemin-ip了


    image.png

    技巧

    1. 收集参数,使用api:process.argv
    2. 输出彩色文字及背景:
      \033[30m 至 \033[37m 设置前景色
      \033[40m 至 \033[47m 设置背景色
      比如
    console.log("\033[34m\033[40m我是彩色\033[30m\033[47m")
    
    image.png
    3.删除刚刚开发的命令行工具 rm "which qianxuemin-ip"
    4.开发命令行工具常用的库
    commander 参数解析
    chalk 文字加颜色
    shelljs 运行shell命令
    Inquirer 交互信息收集

    通过npm项目来开发命令行工具

    有了上面的知识,下面分享一下通过npm项目来开发命令行工具的步骤
    1、npm init -y初始化项目,
    目录如下

    .
    ├── index.js
    ├── package-lock.json
    └── package.json
    

    index.js还是上面描述的文件、package.json设置bin字段

    {
      "name": "qianxuemin-ip-01",
      "version": "1.0.0",
      "description": "",
      "main": "index.js",
      "bin": {
        "qianxuemin-ip-01": "./index.js"
      },
      "scripts": {
        "test": "echo \"Error: no test specified\" && exit 1"
      },
      "keywords": [],
      "author": "",
      "license": "ISC"
    }
    

    2、 执行npm link link到npm root -g对应的目录下
    3、然后执行qianxuemin-ip-01效果如下

    image.png
    4、npm login + npm publish发布npm包

    完工~

    相关文章

      网友评论

          本文标题:开发命令行工具CLI

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