手把手教你寫命令行工具

命令行工具,即 Cli(command-line interface)。是在圖形用戶界面獲得普及以前使用最爲普遍的用戶界面,它一般不支持鼠標,用戶經過鍵盤輸入指令,計算機接收到指令後,予以執行。

在學習這篇教程以前,你須要先了解NodeJs,NPM和一些經常使用的shell命令!javascript

對於前端開發者來講,用NodeJs開發命令行工具是最方便和快速的,藉助於 npm,能夠方便的進行調試和發佈。前端

NodeJs的命令行使用以下圖所示:java

clipboard.png

那麼怎麼從零開始寫一個命令行工具呢?node

1、建立一個新項目

首先,咱們建立一個npm項目。git

$ mkdir cli-demo
$ cd cli-demo
$ npm init

經過以上步驟,咱們新建了一個cli-demo文件夾,而且在cli-demo文件夾中初始化了一個package.json文件。package.json的內容大概是這樣:github

{
  "name": "cli-demo",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "MIT"
}

2、新建一個可執行文件

咱們在cli-demo文件夾中,新建一個js文件,這裏咱們新建一個名爲cli.js的文件。shell

咱們在寫命令行工具的時候,須要指定一個可執行文件。在 package.json中, bin字段用來映射命令名和可執行文件。在經過 npm install -g全局安裝的時候,npm會 symlink可執行文件到 prefix/bin文件夾。
若是經過 npm install本地安裝的時候, npm會 symlink可執行文件到 ./node_modules/.bin/文件夾。

(完整的字段說明在這裏:https://docs.npmjs.com/files/...npm

如何讓一個js文件變成可執行文件?只須要在js文件的頭部加上一行代碼:json

#!/usr/bin/env node

稍微完善一下cli.js, 以下:segmentfault

#!/usr/bin/env node

console.log('Hello world!');

3、指定cli.js爲執行文件

咱們須要在package.json中,指定bin字段將cli.js做爲咱們的執行文件。

{
  "bin": "cli.js"
}

或者:

{
  "bin": {
    "cli-demo": "cli.js"
  }
}

4、調試

咱們全局安裝一個cli包後,能夠全局調用這個命令行工具。那咱們在開發調試的時候, 就要用到npm link這個命令了。

在npm包文件夾下執行 npm link命令,會建立一個符號連接,連接全局文件夾 {prefix}/lib/node_modules/<package>和你執行 npm link的包文件夾。

注意:package-namepackage.json中的name, 而不是文件夾名。

詳細的解釋在這兒: https://docs.npmjs.com/cli/link

咱們在cli-demo文件夾下執行npm link命令後,就能夠全局使用cli-demo命令了。

$ cli-demo

Hello world!

5、使用命令行輔助工具

在咱們寫命令行工具的時候,使用一些輔助工具會讓咱們開發更高效。如下是一些我用過的一些輔助工具:

修改咱們的cli.js,使用Commander.js作一些更復雜的操做。

首先,安裝commander.js:

npm i commander

cli.js代碼:

#!/usr/bin/env node

const program = require('commander');

program
  .version('0.1.0')
  .option('-n, --yourname [yourname]', 'Your name')
  .option('-g, --glad', 'Tell us you are happy')
  .parse(process.argv);

if (program.yourname) {
  console.log(`Hello, ${program.yourname}! ${program.glad ? 'I am very happy to see you!' : ''}`);
}

在命令行中使用:

$ cli-demo -h

  Usage: cli-demo [options]

  Options:

    -V, --version              output the version number
    -n, --yourname [yourname]  Your name
    -g, --glad                 Tell us you are happy
    -h, --help                 output usage information
$ cli-demo -n Jay

  Hello, Jay!
$ cli-demo -n Jay -g

  Hello, Jay! I am very happy to see you!

6、發佈

單純的發佈包到npm很是簡單,只須要一條命令:

npm publish

可是一個完善規範的發佈流程不只如此,還須要考慮版本號的規範(Semver),commit message的規範,tag等一系列因素。若是手動來搞的話,是挺麻煩的。

這裏推薦使用relix, 一步搞定!

npm i relix -g

進入cli-demo文件夾,而後:

relix --patch

會自動幫你生成新版本號,生成提交信息,打tag,推送提交和tag到github,發佈npm包!relix的詳細用法請看relix文檔。

本章完。

進階閱讀: 怎麼樣寫一個能告訴你npm包名字是否被佔用的工具

個人Github:https://github.com/PengJiyuan

相關文章
相關標籤/搜索