命令行工具,即 Cli(command-line interface)。是在圖形用戶界面獲得普及以前使用最爲普遍的用戶界面,它一般不支持鼠標,用戶經過鍵盤輸入指令,計算機接收到指令後,予以執行。在學習這篇教程以前,你須要先了解NodeJs,NPM和一些經常使用的shell命令!javascript
對於前端開發者來講,用NodeJs開發命令行工具是最方便和快速的,藉助於 npm,能夠方便的進行調試和發佈。前端
NodeJs的命令行使用以下圖所示:java
那麼怎麼從零開始寫一個命令行工具呢?node
首先,咱們建立一個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" }
咱們在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!');
cli.js
爲執行文件咱們須要在package.json
中,指定bin
字段將cli.js
做爲咱們的執行文件。
{ "bin": "cli.js" }
或者:
{ "bin": { "cli-demo": "cli.js" } }
咱們全局安裝一個cli包後,能夠全局調用這個命令行工具。那咱們在開發調試的時候, 就要用到npm link
這個命令了。
在npm包文件夾下執行npm link
命令,會建立一個符號連接,連接全局文件夾{prefix}/lib/node_modules/<package>
和你執行npm link
的包文件夾。注意:
package-name
是package.json
中的name
, 而不是文件夾名。詳細的解釋在這兒: https://docs.npmjs.com/cli/link
咱們在cli-demo
文件夾下執行npm link
命令後,就能夠全局使用cli-demo
命令了。
$ cli-demo Hello world!
在咱們寫命令行工具的時候,使用一些輔助工具會讓咱們開發更高效。如下是一些我用過的一些輔助工具:
修改咱們的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!
單純的發佈包到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