Node.js用途很廣,經常使用來開發服務、桌面應用等被開發者熟知,Node.js還有另一個很是實用的場景 - 命令行應用(後文統稱CLI)。node
本文可參考的源碼:github.com/youngjuning…git
建立一個youngjuning
目錄,並使用進入該目錄:github
$ mkdir youngjuning && cd youngjuning
複製代碼
在該目錄下新建 index.js:shell
#!/usr/bin/env node
console.log('Hello World')
複製代碼
使用 package.json
的 bin
項是用來指定各個內部命令對應的可執行文件的位置:npm
"bin": {
"youngjuning": "./bin/cli.js"
}
複製代碼
在命令行輸入 npn link
或 npm install -g
將當前項目安裝到全局環境,這樣就能夠直接使用 youngjuning
來運行文件了:json
node 爲咱們提供了 process.argv
來讀取命令行參數,這裏咱們對此不做介紹,有興趣能夠自行研究,我選擇了 tj 大神的 commander:微信
command
: 定義命令行指令,後面可跟上一個 name,用空格隔開,如 .command( 'app [name]')
alias
: 定義一個更短的命令行指令description
: 描述,它會在 help 裏面展現option
: 定義參數。它接受四個參數
-a
和長名字 –app
,使用 |
或者 ,
分隔,在命令行裏使用時,這兩個是等價的,區別是後者能夠在程序裏經過回調獲取到help
信息裏展現出來string
,有時候咱們須要一個命令行建立多個模塊,就須要一個回調來處理action
: 註冊一個 callback
函數,這裏需注意目前回調不支持 let 聲明變量parse
: 解析命令行const answers = await inquirer.prompt([
/* Pass your questions in here */
])
console.log(answers)
複製代碼
type
: 表示提問的類型,包括:input
, confirm
, list
, rawlist
, expand
, checkbox
, password
, editor
;name
: 存儲當前問題回答的變量;message
: 問題的描述;default
: 默認值;choices
: 列表選項,在某些 type 下可用,而且包含一個分隔符(separator);validate
: 對用戶的回答進行校驗;filter
: 對用戶的回答進行過濾處理,返回處理後的值;transformer
: 對用戶回答的顯示效果進行處理(如:修改回答的字體或背景顏色),但不會影響最終的答案的內容;when
: 根據前面問題的回答,判斷當前問題是否須要被回答;pageSize
: 修改某些 type
類型下的渲染行數;prefix
: 修改 message
默認前綴;suffix
: 修改 message
默認後綴。recursive-readdir
庫遞歸讀取項目全部文件handlebars
進行模板替換fs
模塊進行讀文件和寫文件操做const fs = require('fs')
const handlebars = require('handlebars')
const recursive = require('recursive-readdir')
const compile = (meta, file) => {
const content = fs.readFileSync(file).toString()
const result = handlebars.compile(content)(meta)
fs.writeFileSync(file, result)
}
module.exports = (meta, src) => {
recursive(src, (err, files) => {
files.forEach(file => {
compile(meta, file)
})
})
}
複製代碼
做者微信 | 知識星球 | 讚揚做者 |
---|---|---|
![]() |
![]() |
![]() |