日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

Node.js CLI 工具最佳实践

發(fā)布時(shí)間:2024/2/28 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Node.js CLI 工具最佳实践 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

為什么寫這篇文章?

一個(gè)糟糕的 CLI 工具會(huì)讓用戶覺(jué)得難用,而構(gòu)建一個(gè)成功的 CLI 需要密切關(guān)注很多細(xì)節(jié),同時(shí)需要站在用戶的角度,創(chuàng)造良好的用戶體驗(yàn)。要做到這些特別不容易。

在這個(gè)指南中,我列出了在各個(gè)重點(diǎn)領(lǐng)域的最佳實(shí)踐,都是與 CLI 工具交互最理想的用戶體驗(yàn)。

1 命令行的經(jīng)驗(yàn)

本節(jié)將會(huì)介紹創(chuàng)建美觀且高可用的 Node.js 命令行工具相關(guān)的最佳實(shí)踐。

1.1 尊重 POSIX

? 正確: 使用兼容 POSIX-compliant 命令行的語(yǔ)法,因?yàn)檫@是被廣泛接受的命令行工具的標(biāo)準(zhǔn)。

? 錯(cuò)誤: 當(dāng)用戶使用CLI,其命令行參數(shù)與他們過(guò)去的使用習(xí)慣不一致時(shí),會(huì)感覺(jué)很難適應(yīng)。

?? 細(xì)節(jié):

Unix-like 操作系統(tǒng)普及了命令行工具,比如awk,sed。這樣的工具已經(jīng)有效地標(biāo)準(zhǔn)化了命令行選項(xiàng)「options」(又名標(biāo)志「flags」),選項(xiàng)參數(shù)和其他操作的行為。

一些案例:

  • 在幫助「help」中將可選參數(shù)「option-arguments」標(biāo)記為方括號(hào)([]),以表示它們是可選的,或者使用尖括號(hào)(<>),表示它們是必需的。

  • 參數(shù)可以使用單字符縮寫,一般是?-?加上一個(gè)字母或數(shù)字。

  • 多個(gè)沒(méi)有值的選型可進(jìn)行組合,比如:?cli-abc?等價(jià)于?cli-a-b-c。

用戶一般都會(huì)希望你的命令行工具與其他Unix工具具有類似的約定。

1.2 構(gòu)建友好的 CLI

? 正確: 盡可能多的輸出一些信息以幫助用戶成功使用 CLI。

? 錯(cuò)誤: 由于 CLI 一直啟動(dòng)失敗,又沒(méi)有為用戶提供足夠的幫助,會(huì)讓用戶產(chǎn)生明顯的挫敗感。

?? 細(xì)節(jié):

命令行工具的界面一定程度上應(yīng)與 Web 用戶界面類似,盡可能的保證程序能正常使用。

構(gòu)建一個(gè)對(duì)用戶友好的 CLI 應(yīng)該盡可能的為用戶提供支持。作為實(shí)例,我們討論下 curl 命令的交互,該命令期望將 URL 作為主要的數(shù)據(jù)輸入,而用戶卻沒(méi)有提供 URL,這時(shí)候命令行會(huì)提示用戶通讀 curl--help 的輸出信息。但是,對(duì)用戶友好的 CLI 工具會(huì)顯示一個(gè)可交互式的提示,捕獲用戶的輸入,從而正常運(yùn)行。

1.3 有狀態(tài)的數(shù)據(jù)

? 正確: 在多次調(diào)用 CLI 的過(guò)程中,提供有狀態(tài)的體驗(yàn),記住這些數(shù)據(jù),以提供無(wú)縫的交互體驗(yàn)。

? 錯(cuò)誤: 用戶多次調(diào)用 CLI 重復(fù)提供相同的信息,會(huì)讓用戶感到厭煩。

?? 細(xì)節(jié):

你需要為 CLI 工具提供持續(xù)緩存,比如記住用戶名、電子郵件、token 或者是 CLI 多次調(diào)用的一些首選項(xiàng)。可以使用以下工具來(lái)保留用戶的這些配置。

  • configstore

  • conf

1.4 提供多彩的體驗(yàn)

? 正確: 在 CLI 工具中使用顏色來(lái)突出顯示一些信息,并且提供降級(jí)方案,進(jìn)行檢測(cè),自動(dòng)退出以免輸出亂碼。

? 錯(cuò)誤: 蒼白的輸出可能會(huì)讓用戶丟失重要的信息,尤其是文本較多的時(shí)候。

?? 細(xì)節(jié):

大多數(shù)的命令行工具都支持彩色文本,通過(guò)特定的 ANSI 編碼來(lái)啟用。

命令行工具輸出彩色文本可帶來(lái)更豐富的體驗(yàn)和更多的交互。但是,不受支持的終端可能會(huì)在屏幕上以亂碼信息的形式輸出。此外,CLI 也可能用于不支持彩色輸出的連續(xù)集成中。

  • chalk

  • colors

1.5 豐富的交互

? 正確: 提供除了文本輸入之外的其他交互形式,為用戶提供更加豐富的體驗(yàn)。

? 錯(cuò)誤: 當(dāng)輸入的信息是固定的選項(xiàng)(類似下拉菜單)時(shí),文本輸入的形式可能會(huì)給用戶帶來(lái)麻煩。

?? 細(xì)節(jié):

可以以提示輸入的方式引入更加豐富的交互方式,提示輸入比自由的文本輸入更高端。例如,下拉列表、單選按鈕切換、隱藏密碼輸入。豐富交互的另一個(gè)方面就是動(dòng)畫以及進(jìn)度條,在 CLI 執(zhí)行異步工作時(shí),都能為用戶提供更好的體驗(yàn)。

許多 CLI 提供默認(rèn)的命令行參數(shù),而無(wú)需用戶進(jìn)一步交互。不強(qiáng)迫用戶提供一些非必要的參數(shù)。

  • prompts

  • enquirer

  • ink

  • ora

1.6 無(wú)處不在的超鏈接

? 正確: URL(https://www.github.com)和源代碼( src/Util.js:2:75)使用格式正確的文本輸出,因?yàn)檫@兩者都是現(xiàn)代終端可點(diǎn)擊的鏈接。

? 錯(cuò)誤: 避免使用 git.io/abc之類的非交互式的鏈接,該鏈接需要用戶手動(dòng)復(fù)制和粘貼。

?? 細(xì)節(jié):

如果你要分享的信息在 Url 鏈接中,或者是某個(gè)文件的特定行列,則需要向用戶提供正確的格式的鏈接,用戶一旦點(diǎn)擊它們,就會(huì)打開瀏覽器或者在IDE跳到特定位置。

1.7 零配置

? 正確: 通過(guò)自動(dòng)檢測(cè)所需的配置和命令行參數(shù),達(dá)到即開即用的體驗(yàn)。

? 錯(cuò)誤: 如果可以以可靠的方式自動(dòng)檢測(cè)命令行參數(shù),并且調(diào)用的操作不需用戶顯式確認(rèn)(例如確認(rèn)刪除),則不要強(qiáng)制用戶交互。

?? 細(xì)節(jié):

旨在在運(yùn)行 CLI 工具時(shí)提供“即開即用”的體驗(yàn)。

  • The?Jest JavaScript Testing Framework

  • Parcel, a web application bundler

2 發(fā)布

本節(jié)介紹了如何以最佳方式分發(fā)和打包 Node.js CLI 工具的最佳實(shí)踐。

2.1 最小化的依賴

? 正確: 最大程度地減少生產(chǎn)環(huán)境的依賴項(xiàng),并且使用可替代的最小的依賴包,確保這是一個(gè)盡可能小的 Node.js 包。但是,也不能過(guò)于謹(jǐn)慎因此重復(fù)發(fā)明輪子而過(guò)度優(yōu)化依賴。

? 錯(cuò)誤: 應(yīng)用中依賴的大小將決定 CLI 的安裝時(shí)間,從而導(dǎo)致糟糕的用戶體驗(yàn)。

?? 細(xì)節(jié):

使用 npx 可以快速調(diào)用通過(guò) npm install 安裝的 Node.js CLI 模塊,這可提供更好的用戶體驗(yàn)。這有助于將整體的依賴關(guān)系和傳遞依賴關(guān)系保持在合理大小。

npm 全局安裝模塊,安裝過(guò)程會(huì)變得緩慢,這是一個(gè)糟糕的體驗(yàn)。通過(guò) npx 總是獲取當(dāng)前項(xiàng)目安裝的模塊(當(dāng)前文件夾的node_modules),因此使用 npx 來(lái)調(diào)用 CLI 可能會(huì)降低性能。

2.2 使用文件鎖

? 正確: 通過(guò) npm 提供的 package-lock.json 來(lái)鎖定安裝包,以確保用戶安裝的時(shí)候使用的依賴版本是準(zhǔn)確的。

? 錯(cuò)誤: 不鎖定依賴的版本,意味著 npm 將在安裝過(guò)程中自己解決他們,從而導(dǎo)致安裝依賴的版本范圍擴(kuò)大,這會(huì)引入無(wú)法控制的更改,可能會(huì)讓 CLI 無(wú)法成功運(yùn)行。

?? 細(xì)節(jié):

通常,npm 包在發(fā)布時(shí)只定義其直接的依賴項(xiàng)及其版本范圍,并且 npm 會(huì)在安裝時(shí)解析所有間接依賴項(xiàng)的版本。隨著時(shí)間的流逝,間接的依賴項(xiàng)版本會(huì)有所不同,因?yàn)橐蕾図?xiàng)隨時(shí)會(huì)發(fā)布新版本。

盡管維護(hù)人員已廣泛使用版本控制語(yǔ)義,但是 npm 會(huì)為安裝的包引入許多間接的依賴關(guān)系,這些間接依賴提升了破壞您的應(yīng)用程序的風(fēng)險(xiǎn)。

使用 package-lock.json 會(huì)帶給用戶更好的安全感。將要安裝的依賴項(xiàng)固定到特定版本,因此,即使這些依賴項(xiàng)發(fā)布了較新的版本,也不會(huì)安裝它們。這將讓您有責(zé)任保持對(duì)依賴項(xiàng)的關(guān)注,了解依賴項(xiàng)中任何安全相關(guān)的修復(fù),并通過(guò)定期發(fā)布 CLI 工具進(jìn)行安全更新。可以考慮使用Snyk 來(lái)自動(dòng)修復(fù)整個(gè)依賴性樹中的安全性問(wèn)題。注:我是Snyk的開發(fā)者開發(fā)者。參考:

  • Do you really know how a lockfile works for yarn and npm packages?

  • Yarn docs: Should lockfiles be committed to the repository?

3 通用性

本節(jié)將介紹使 Node.js CLI 與其他命令行工具無(wú)縫集成有關(guān)的最佳實(shí)踐,并遵循 CLI 正常運(yùn)行的約定。

本節(jié)將回答以下問(wèn)題:

  • 我可以導(dǎo)出 CLI 的輸出以便于分析嗎?

  • 我可以將 CLI 的輸出通過(guò)管道傳遞到另一個(gè)命令行工具的輸入嗎?

  • 是否可以將其他工具的結(jié)果通過(guò)管道傳輸?shù)酱?CLI?

3.1 接受 STDIN 作為輸入

? 正確: 對(duì)于數(shù)據(jù)驅(qū)動(dòng)的命令行應(yīng)用,用戶可以輕松的通過(guò)管道將數(shù)據(jù)輸入到 STDIN。

? 錯(cuò)誤: 其他的命令行工具可能無(wú)法直接提供數(shù)據(jù)輸入到你的 CLI 中,這會(huì)阻止某些代碼的正常運(yùn)行,例如:

  • $ curl -s "https://api.example.com/data.json" | your_cli

  • ?? 細(xì)節(jié):

    如果命令行工具需要處理某些數(shù)據(jù),比如,指定 JSON 文件執(zhí)行某種任務(wù),一般使用 --file file.json 的命令行參數(shù)。

    3.2 結(jié)構(gòu)化輸出

    ? 正確: 通過(guò)某個(gè)參數(shù)來(lái)允許應(yīng)用的結(jié)果進(jìn)行結(jié)構(gòu)化的輸出,這樣使得數(shù)據(jù)更容易處理和解析。

    ? 錯(cuò)誤: 用戶可能需要使用復(fù)雜的正則來(lái)解析和匹配 CLI 的輸出結(jié)果。

    ?? 細(xì)節(jié):

    對(duì)于 CLI 的用戶來(lái)說(shuō),解析數(shù)據(jù)并使用數(shù)據(jù)來(lái)執(zhí)行其他任務(wù)(比如,提供給 web 儀表盤或電子郵件)通常很有用。能夠輕松地從命令行輸出中得到需要的數(shù)據(jù),這將為 CLI 的用戶提供更好的體驗(yàn)。

    3.3 跨平臺(tái)

    ? 正確: 如果希望 CLI 能夠跨平臺(tái)工作,則必須注意命令行 shell 和子系統(tǒng)(如文件系統(tǒng))的語(yǔ)義。

    ? 錯(cuò)誤: 由于錯(cuò)誤的路徑分隔符等因素,CLI 將在一些操作系統(tǒng)上無(wú)法運(yùn)行,即使代碼中沒(méi)有明顯的功能差異。

    ?? 細(xì)節(jié):

    單純從代碼的角度來(lái)看,功能沒(méi)有被剝離,并且應(yīng)該在不同的操作系統(tǒng)中執(zhí)行良好,但是一些遺漏的細(xì)節(jié)可能會(huì)使程序無(wú)法運(yùn)行。讓我們來(lái)研究幾個(gè)必須遵守跨平臺(tái)規(guī)范的案例。

    產(chǎn)生錯(cuò)誤的命令

    有時(shí)候我們需要運(yùn)行 Node.js 程序的進(jìn)程,假設(shè)您有如下的腳本:

  • // program.js

  • #!/usr/bin/env bin

  • ?

  • // your app code

  • 然后使用如下方式啟動(dòng)。

  • const cliExecPath = 'program.js'

  • const process = childProcess.spawn(cliExecPath, [])

  • 上面的代碼能工作,但是下面這樣更好。

  • const cliExecPath = 'program.js'

  • const process = childProcess.spawn('node', [cliExecPath])

  • 為什么這樣更好呢?因?yàn)?program.js 代碼以類 Unix 的 Shebang 符號(hào)開始,但是由于這不是跨平臺(tái)的標(biāo)準(zhǔn),Windows 不知道如何解析。

    在 package.json 中也是如此,如下方式定義 npm script 是不正確的:

  • "scripts": {

  • "postinstall": "myInstall.js"

  • }

  • 這是因?yàn)?Windows 無(wú)法理解 myinstall.js 中的 Shebang ,并且不知道如何使用 node 解釋器運(yùn)行它。

    相反,請(qǐng)使用如下方法:

  • "scripts": {

  • "postinstall": "node myInstall.js"

  • }

  • 不同的 shell 解釋器

    并不是所有的字符在不同的 shell 解釋器都能得到相同的處理。

    例如, Windows 的命令提示符不會(huì)像 bash shell 那樣將單引號(hào)當(dāng)做雙引號(hào),因此它不知道單引號(hào)內(nèi)的所有字符屬于同一個(gè)字符串組,這會(huì)導(dǎo)致錯(cuò)誤。

    下面的命令會(huì)導(dǎo)致在 Windows 環(huán)境下失效:

  • // package.json

  • "scripts": {

  • "format": "prettier-standard '**/*.js'",

  • ...

  • }

  • 應(yīng)該按照如下方式:

  • // package.json

  • "scripts": {

  • "format": "prettier-standard \"**/*.js\"",

  • ...

  • }

  • 避免手動(dòng)連接路徑

    不同平臺(tái)會(huì)使用不同的路徑連接符,當(dāng)通過(guò)手動(dòng)連接它們時(shí),會(huì)導(dǎo)致程序不能在不同的平臺(tái)之前相互操作。

    讓我們看看一個(gè)不好的案例:

  • const myPath = `${__dirname}/../bin/myBin.js`

  • 它使用的是正斜杠,但是 Windows 上是使用反斜杠作為路徑的分割符。所以我們不要通過(guò)手動(dòng)的方式構(gòu)建文件系統(tǒng)路徑,而是使用 Node.js 的路徑模塊:

  • const myPath = path.join(__dirname, '..', 'bin', 'myBin.js')

  • 避免使用分號(hào)鏈接命令

    我們?cè)?Linux 上一般都使用分號(hào)來(lái)順序鏈接要運(yùn)行的命令,例如:cd/tmp;ls。但是,在 Windows 上執(zhí)行相同的操作會(huì)失敗。

  • const process = childProcess.exec(`${cliExecPath}; ${cliExecPath2}`)

  • 我們可以使用 && 或者 ||:

  • const process = childProcess.exec(`${cliExecPath} || ${cliExecPath2}`)

  • 3.4 允許環(huán)境覆蓋

    ? 正確: 允許從環(huán)境變量中讀取配置,并且當(dāng)它與命令行參數(shù)沖突時(shí),允許環(huán)境變量被覆蓋。

    ? 錯(cuò)誤: 盡量不要使用自定義配置。

    ?? 細(xì)節(jié):

    使用環(huán)境變量調(diào)整配置,這是許多工具中用于修改 CLI 工具行為的常用方法。

    當(dāng)命令行參數(shù)和環(huán)境變量都配置相同的設(shè)置時(shí),應(yīng)該給環(huán)境變量一個(gè)優(yōu)先級(jí)來(lái)覆蓋該設(shè)置。

    4 易用性

    本節(jié)將介紹,如何在用戶缺乏開發(fā)者設(shè)計(jì)工具所需環(huán)境的情況下,更加容易地使用 Node.js CLI。

    4.1 允許環(huán)境覆蓋

    ? 正確: 為 CLI 創(chuàng)建一個(gè) docker 鏡像,并將其發(fā)布到Docker Hub之類的公共倉(cāng)庫(kù)中,以便沒(méi)有 Node.js 環(huán)境的用戶可以使用它。

    ? 錯(cuò)誤: 沒(méi)有 Node.js 環(huán)境的用戶將沒(méi)有 npm 或 npx ,因此將無(wú)法運(yùn)行您的 CLI 工具。

    ?? 細(xì)節(jié):

    從 npm 倉(cāng)庫(kù)中下載 Node.js CLI 工具通常將使用 Node.js 工具鏈(例如 npm 或 npx)來(lái)完成。這在JavaScript 和 Node.js 開發(fā)者中很容易完成。

    但是,如果您將 CLI 程序提供給大眾使用,而不管他們是否熟悉 JavaScript 或該工具是否可用,那么將限制 CLI 程序僅以 npm 倉(cāng)庫(kù)形式的安裝分發(fā)。如果您的 CLI 工具打算在CI環(huán)境中使用,則可能還需要安裝那些與Node.js 相關(guān)的工具鏈依賴項(xiàng)。

    打包和分發(fā)可執(zhí)行文件的方式有很多,將預(yù)先綁定了 CLI 工具的Docker容器進(jìn)行容器化,這是一種容易使用方法并且不需要太多依賴關(guān)系(除了需要 Docker 環(huán)境之外)。

    4.2 優(yōu)雅降級(jí)

    ? 正確: 在用戶不受支持的環(huán)境中提供沒(méi)有彩色和豐富交互的輸出,比如跳過(guò)某些交互直接提供 JSON 格式的輸出。

    ? 錯(cuò)誤: 對(duì)于不受支持的終端用戶,使用終端交互可能會(huì)顯著降低最終用戶體驗(yàn),并阻止他們使用您的 CLI 工具。

    ?? 細(xì)節(jié):

    對(duì)于那些擁有豐富交互形式的終端的用戶來(lái)說(shuō),彩色輸出、ascii圖表、終端動(dòng)畫會(huì)帶來(lái)很好的用戶體驗(yàn),但是對(duì)于沒(méi)有這些特性的終端用戶來(lái)說(shuō),它可能會(huì)顯示一下亂碼或者完全無(wú)法操作。

    要使終端不受支持的用戶正確使用您的 CLI 工具,您有如下選擇:

    • 自動(dòng)檢測(cè)終端能力,并在運(yùn)行時(shí)評(píng)估是否對(duì) CLI 的交互性進(jìn)行降級(jí);

    • 為用戶提供一個(gè)選項(xiàng)來(lái)顯式地進(jìn)行降級(jí),例如通過(guò)提供一個(gè) --json 命令行參數(shù)來(lái)強(qiáng)制輸出原始數(shù)據(jù)。

    4.3 Node.js 版本兼容

    ? 正確: 支持目前還在維護(hù)的 Node.js 版本 。

    ? 錯(cuò)誤: 試圖與不受支持的Node.js版本保持兼容的代碼庫(kù)將很難維護(hù),并且會(huì)失去使用語(yǔ)言新特性的有點(diǎn)。

    ?? 細(xì)節(jié):

    有時(shí)可能需要專門針對(duì)缺少新的 ECAMScript 特性的舊 Node.js 版本兼容。例如,如果您正在構(gòu)建一個(gè)主要面向DevOps 的Node.js CLI,那么他們可能沒(méi)有一個(gè)理想的 Node.js 環(huán)境或者是最新的 runtime。比如,Debian Stretch (oldstable) 附帶就是 Node.js 8.11.1.。

    如果你的需要兼容舊版本的 Node. js 如 Node. js 8、6、4,最好是使用 Babel 之類的編譯器來(lái)確保生成的代碼與V8 JavaScript 引擎的版本兼容,并與這些版本附帶的Node.js runtime 兼容。

    絕對(duì)不要因此簡(jiǎn)化你的代碼,來(lái)使用一些舊的 ECMAScript 語(yǔ)言規(guī)范,因?yàn)檫@會(huì)產(chǎn)生代碼維護(hù)相關(guān)的問(wèn)題。

    4.4 自動(dòng)檢測(cè) Node.js runtime

    ? 正確: 在 Shebang 聲明中使用與安裝位置無(wú)關(guān)的引用,該引用可根據(jù)運(yùn)行時(shí)環(huán)境自動(dòng)定位 Node.js runtime。

    ? 錯(cuò)誤: 硬編碼 Node.js runtime 位置,如 #!/usr/local/bin/node ,僅特定于您自己的環(huán)境,這可能使 CLI 工具在其他 Node.js 安裝目錄不同的環(huán)境中無(wú)法工作。

    ?? 細(xì)節(jié):

    首先在 cli.js 文件的頂部添加 #!/usr/local/bin/node,然后通過(guò) node cli.js 來(lái)啟動(dòng) Node.js CLI,這是一個(gè)容易的開始。但是,這是一種有缺陷的方法,因?yàn)槠渌脩舻沫h(huán)境無(wú)法保證 node 可執(zhí)行文件的位置。

    我們可以將 #!/usr/bin/env node 作為最佳實(shí)踐,但是這仍然假設(shè) Node.js runtime 是被 bin/node 引用,而不是 bin/nodejs 或其他。

    5 測(cè)試

    5.1 不要信任語(yǔ)言環(huán)境

    ? 正確: 不要假定輸出文本與您聲明的字符串等效,因?yàn)闇y(cè)試可能在與您的語(yǔ)言環(huán)境不同,比如在非英語(yǔ)環(huán)境的系統(tǒng)上運(yùn)行。

    ? 錯(cuò)誤: 當(dāng)開發(fā)人員在非英語(yǔ)語(yǔ)言環(huán)境的系統(tǒng)上進(jìn)行測(cè)試時(shí),開發(fā)人員將遇到測(cè)試失敗。

    ?? 細(xì)節(jié):

    當(dāng)您運(yùn)行 CLI 并解析輸出來(lái)測(cè)試 CLI 時(shí),您可能傾向于使用 grep 命令,以確保某些字符存在于輸出中,例如在不帶參數(shù)的情況下運(yùn)行 CLI 時(shí):

  • const output = execSync(cli);

  • expect(output).to.contain("Examples:"));

  • 如果在非英語(yǔ)的語(yǔ)言環(huán)境中運(yùn)行測(cè)試,并且 CLI 參數(shù)解析庫(kù)支持自動(dòng)檢測(cè)語(yǔ)言環(huán)境并采用該語(yǔ)言環(huán)境,則輸出從 Examples 轉(zhuǎn)換成了 “語(yǔ)言環(huán)境” 的語(yǔ)言,測(cè)試將失敗。

    6 錯(cuò)誤

    6.1 錯(cuò)誤信息

    ? 正確: 在展示錯(cuò)誤信息時(shí),提供可以在項(xiàng)目文檔中查找的可跟蹤錯(cuò)誤的代碼,從而簡(jiǎn)化錯(cuò)誤消息的排除。

    ? 錯(cuò)誤: 一般的錯(cuò)誤消息往往模棱兩可,用戶很難搜索解決方案。

    ?? 細(xì)節(jié):

    返回錯(cuò)誤消息時(shí),請(qǐng)確保它們包含特定的錯(cuò)誤代碼,以便以后查閱。與HTTP狀態(tài)代碼非常相似,因此 CLI 工具需要命名或編碼錯(cuò)誤。

    例如:

  • $ my-cli-tool --doSomething

  • ?

  • Error (E4002): please provide an API token via environment variables

  • 6.2 可行的錯(cuò)誤

    ? 正確: 錯(cuò)誤消息應(yīng)告訴用戶解決方案是什么,而不是僅僅提示這里存在錯(cuò)誤。

    ? 錯(cuò)誤: 面對(duì)錯(cuò)誤消息,如果沒(méi)有任何解決錯(cuò)誤的提示,則用戶可能無(wú)法成功使用 CLI。

    ?? 細(xì)節(jié):

    例如:

  • $ my-cli-tool --doSomething

  • ?

  • Error (E4002): please provide an API token via environment variables

  • 6.3 提供調(diào)試模式

    ? 正確: 如果高級(jí)用戶需要診斷問(wèn)題,則給他們提供更詳細(xì)的信息

    ? 錯(cuò)誤: 不要關(guān)閉調(diào)試功能。因?yàn)橹皇菑挠脩裟抢锸占答?#xff0c;并讓他們查明錯(cuò)誤原因?qū)⑻貏e困難。

    ?? 細(xì)節(jié):

    使用環(huán)境變量或命令行參數(shù)來(lái)設(shè)置調(diào)試模式并打開詳細(xì)輸出信息。在代碼中有意義的地方,植入調(diào)試消息,以幫助用戶和維護(hù)者理解程序,輸入和輸出以及其他使解決問(wèn)題變得容易的信息。

    參考開源軟件包:

    • debug

    總結(jié)

    以上是生活随笔為你收集整理的Node.js CLI 工具最佳实践的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。