大家好,我是零一。前端很多 cli 工具,比如著名的 vue-cli,這些工具大多數都是作用於快速創建對應框架的模版代碼,讓開發者可以不用從0開始配置項目,可以專注於項目本身的業務邏輯開發,從而快速創建項目。
然而,這樣的步驟走下來,雖然形成了一個 cli 工具,但是創建 cli 項目本身的過程,還是挺繁瑣的。後來我發現有個 oclif框架,就是相當於是創建命令行工具項目的模版代碼的一個腳手架,非常好用,給大家推薦一下。下面詳細說一下使用過程。
cli 類型oclif 有2種 cli 類型,單個命令模式和多個命令模式。單個 cli 命令,例如 ls 、cat,它可以接收參數和標誌符,單個命令的 cli 可以是一個單文件。它的文件目錄結構為:
package.json
src/
└── index.ts多個 cli 命令,例如 git,它還有子命令,而它的子命令本身就是單個的 cli 。它在 package.json 有個 oclif.commands 的欄位,指向一個包含所有命令的目錄。
package.json
"oclif": {
"commands": "./lib/commands",
}
src/
└── commands/
├── create.ts
└── destroy.ts簡言之,就是創建的命令行項目可以是單個命令的或多個命令的。
使用// 建議全局安裝
npm i oclif -g執行npx oclif multi testMul,創建一個多命令的項目:
得到項目後,執行對應的腳本命令,初始化時得到的是 hello 命令,因此執行 ./bin/run hello:
這樣,就跑起來啦。其中的run方法就是對應腳本的入口,你的腳本邏輯就可以直接在run方法中調用了。
調試全局使用當你想在其他項目中測試腳本時,可以使用npm link,然後就可以直接用 cli 的名字要執行對應的腳本啦,例如本例中的 testMul hello!
import {Command, flags} from '@oclif/command'
export default class Hello extends Command {
static description = 'describe the command here'
static examples = [
`$ testMul hello
hello world from ./src/hello.ts!
`,
]
static flags = {
help: flags.help({char: 'h'}),
// flag with a value (-n, --name=VALUE)
name: flags.string({char: 'n', description: 'name to print'}),
// flag with no value (-f, --force)
force: flags.boolean({char: 'f'}),
}
static args = [{name: 'file'}]
async run() {
this.log('---run 方法就是執行入口---')
const {args, flags} = this.parse(Hello)
const name = flags.name ?? 'world'
this.log(`hello ${name} from ./src/commands/hello.ts`)
if (args.file && flags.force) {
this.log(`you input --force and --file: ${args.file}`)
}
}
}其中,有靜態屬性description,examples,flags,args,解釋一下其中的含義:
description:描述當前腳本的作用、用法等。什麼時候能看到這個描述呢,就是運行命令testMul--help的時候。examples:它是一個數組,你可以把怎麼使用這個命令的例子寫在這裡。flags:它是一個字符串,這條命令的基本使用,可以填寫一條常用的命令在這裡。oclif 框架功能特性參數解析,沒有參數解析的 cli 工具是不完整的,oclif 構建了一個自定義參數的CLI,通過簡單的寫法定義和參數,靈活處理用戶輸入,以至用戶能夠以他們期望的方式使用。性能好, 運行 oclif cli 命令的開銷幾乎沒有。此外,只有僅需要執行的命令被node加載。因此,包含許多命令的大型CLI將與使用單個命令的小型CLI一樣快地加載。cli 模版生成器, 快速初始化一個命令行項目模版,快速進行開發。單元測試方便,生成器將自動創建腳手架測試使命令更易於測試和模擬 stdout/stderr。自動文檔,默認情況下,您可以傳遞--help給CLI以獲取幫助,例如標誌選項和參數信息。每當發布CLI的npm軟體包時,此信息也將自動放置在README.md中。插件,使用插件,CLI的用戶可以使用新功能對其進行擴展,CLI可以拆分為模塊化組件,並且可以在多個CLI之間共享功能。鉤子,使用生命周期掛鈎可在CLI啟動時或在自定義觸發器上運行功能。每當需要在CLI的各個組件之間共享自定義功能時,可以使用。TypeScript,支持TS,在初始化項目的時候可以選擇JS或者TS,oclif的框架內部代碼也是使用TS。常用命令oclif single <NAME>:在當前目錄中創建一個單命令項目oclif multi <NAME>:在當前目錄中創建一個多命令項目oclif command <NAME>:添加一條命令oclif hook <NAME> --event=<hook>:新建一個鉤子oclif plugin <pluginName>:新建一個插件參考文檔https://oclif.io/docs/introductionhttps://github.com/oclif/oclif我是零一,分享技術,不止前端,下期見~
最後,歡迎加我的微信,拉你進上百人的前端交流群
創作不易,加個點讚、在看 支持一下哦!