目錄
工具說明
目標
準備
安裝依賴
建置發布流程自動化
新增功能:設定檢查
最後一步
範例程式碼
結語
首頁 web前端 js教程 使用node.js建置命令列工具

使用node.js建置命令列工具

Apr 10, 2018 pm 05:04 PM
javascript node.js 命令列

本篇文章給大家分享的內容是使用node.js建立命令列工具,有著一定的參考價值,有需要的朋友可以參考一下


工具說明

  • inquirer.js:一個封裝了常用命令列互動的node.js模組,透過這個模組可以很方便地建立一個新的命令列應用。

  • shell.js:跨平台的unix shell指令模組。

  • Node版本:由於inquirer.js的非同步方法預設回傳Promise,建議使用node.js>=8。

目標

工作中有大量項目上線前最後一步需要執行測試、編譯、更新版本號、提交,甚至執行的命令都是一樣,在這裡我們透過命令列工具將這些步驟一鍵自動化,同時進行預檢查,以防止錯漏。

準備

  1. 建立一個新的Node.js專案。

  2. 建立檔案bin/my-cli.js,node.js專案通常會把cli入口放在bin目錄下,其他模組放在lib目錄下。

  3. 在bin/my-cli.js檔案頭部加上#!/usr/bin/env node

  4. 新增  "bin": {"my-cli": "./bin/my-cli.js"},到package.json,宣告我們要使用的命令。

  5. 專案根目錄下執行npm link,建立一個全域指令my-cli

稍微修改下my-cli.js,加入程式碼console.log("I am a cli tool!"),然後開啟控制台執行my-cli指令,如果看到控制台輸出I am a cli tool!就表示成功。

安裝依賴

首先安裝主要依賴的兩個模組(關於這兩個模組的使用請參考官方文件)

npm install inquirer shelljs

建置發布流程自動化

接下來先實作測試、更新版本號、建置、自動提交發佈的自動化

const pkg = JSON.parse(fs.readFileSync(pkgPath, 'utf8'));

const { version } = await inquirer.prompt([
  {
    type: 'list',
    name: 'version',
    message: '版本号更新方式:',
    choices: [
      {
        name: `v${semver.inc(pkg.version, 'patch')}: Fix Bugs / Patch`,
        value: 'patch'
      },
      {
        name: `v${semver.inc(pkg.version, 'minor')}: Release New Version`,
        value: 'minor'
      },
    ]
  }
]);
// 拉取最新版本
shelljs.exec('git pull');
// 运行测试
shelljs.exec('npm test');
//通过npm version更新版本号,但不自动添加git tag,而是在构建完成后由cli工具添加
shelljs.exec(`npm version ${version} --no-git-tag-version`);
// 构建
shelljs.exec('npm run build');
// 提交发布代码
const nextVersion = semver.inc(pkg.version, version);
shelljs.exec('git add . -A');
shelljs.exec(`git commit -m "build: v${nextVersion}"`)
shelljs.exec(`git tag -a v${nextVersion} -m "build: ${nextVersion}"`);
shelljs.exec("git push")
shelljs.exec("git push --tags");
登入後複製

新增功能:設定檢查

接下來要為my-cli新增一個功能:

當檢查到package.json的my-cli物件的check-baidu- id屬性為true時,檢查專案的config.json是否存在baidu-id屬性

if (pkg['my-cli'] && pkg['my-cli']['check-baidu-id']) {
  const configPath = path.join(process.cwd(), 'config.json');
  if (!fs.existsSync(configPath)) {
    shelljs.echo('找不到config.json');
    shelljs.exit(1);
  }
  const config = JSON.parse(fs.readFileSync(configPath, 'utf8'));
  if (!config['baidu-id']) {
    shelljs.echo('config.json缺少属性[baidu-id]');
    shelljs.exit(1);
  }
登入後複製

最後一步

這樣一個簡單的cli程式就實現完畢了,它自動化了建置發布流程,建置發布之前還進行了設定檢查。

在實際專案中,為了提高程式的穩定性,還需要加入檢查目前專案是否存在package.json,防止json解析出錯、執行前確認等功能,具體請參閱範例程式碼。

範例程式碼

網址:https://github.com/Aturan/node-cli-example

結語

雖然上述功能使用shell也可以實現,但程式碼寫就沒那麼方便快速,而且一旦碰到更複雜的問題,用shell實作就很麻煩,維護也是一個問題。

PS. 其實也可以用python,對於Ubuntu,系統自備Python是一個優勢,在伺服器不需要安裝環境就可以直接使用,再加上Python也有Inquirer模組。

相關推薦:

實例詳解node.js如何取得SQL Server資料庫

Node.js模組系統

以上是使用node.js建置命令列工具的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

如何使用WebSocket和JavaScript實現線上語音辨識系統 如何使用WebSocket和JavaScript實現線上語音辨識系統 Dec 17, 2023 pm 02:54 PM

如何使用WebSocket和JavaScript實現線上語音辨識系統引言:隨著科技的不斷發展,語音辨識技術已成為了人工智慧領域的重要組成部分。而基於WebSocket和JavaScript實現的線上語音辨識系統,具備了低延遲、即時性和跨平台的特點,成為了廣泛應用的解決方案。本文將介紹如何使用WebSocket和JavaScript來實現線上語音辨識系

學習如何有效使用命令列工具sxstrace.exe 學習如何有效使用命令列工具sxstrace.exe Jan 04, 2024 pm 08:47 PM

很多使用win10系統的小夥伴在玩遊戲或裝系統的時候有遇見過這個問題,應用程式無法啟動,因為應用程式的並行配置不正確。有關詳細信息,請參閱應用程式事件日誌,或使用命令列sxstrace.exe工具。這可能是作業系統沒有對應權限的緣故,具體的教學下面一起來看看吧。使用命令列sxstrace.exe工具的教學1、該問題通常會在安裝程式、遊戲的時候出錯,其提示為:應用程式無法啟動,因為應用程式的並行配置不正確。有關詳細信息,請參閱應用程式事件日誌,或使用命令列sxstrace.exe工具。 2、開始→

WebSocket與JavaScript:實現即時監控系統的關鍵技術 WebSocket與JavaScript:實現即時監控系統的關鍵技術 Dec 17, 2023 pm 05:30 PM

WebSocket與JavaScript:實現即時監控系統的關鍵技術引言:隨著互聯網技術的快速發展,即時監控系統在各個領域中得到了廣泛的應用。而實現即時監控的關鍵技術之一就是WebSocket與JavaScript的結合使用。本文將介紹WebSocket與JavaScript在即時監控系統中的應用,並給出程式碼範例,詳細解釋其實作原理。一、WebSocket技

透過命令列將Ubuntu 20.04升級到22.04 透過命令列將Ubuntu 20.04升級到22.04 Mar 20, 2024 pm 01:25 PM

本文詳細介紹了將Ubuntu20.04升級到22.04的步驟。對於使用Ubuntu20.04的用戶,錯過了22.04版本帶來的新功能和優勢。為了獲得更好的體驗和安全性,建議及時升級到較新的Ubuntu版本。 Ubuntu22.04的代號為“傑米水母”,讓我們一起來探索如何取得最新的LTS版本吧!如何透過命令列將Ubuntu20.04升級到22.04掌握命令列會為你帶來優勢。雖然透過GUI更新Ubuntu是可能的,但我們的重點將是透過命令列。首先,讓我們使用以下命令檢查目前運行的Ubuntu版本:$

如何利用JavaScript和WebSocket實現即時線上點餐系統 如何利用JavaScript和WebSocket實現即時線上點餐系統 Dec 17, 2023 pm 12:09 PM

如何利用JavaScript和WebSocket實現即時線上點餐系統介紹:隨著網路的普及和技術的進步,越來越多的餐廳開始提供線上點餐服務。為了實現即時線上點餐系統,我們可以利用JavaScript和WebSocket技術。 WebSocket是一種基於TCP協定的全雙工通訊協議,可實現客戶端與伺服器的即時雙向通訊。在即時線上點餐系統中,當使用者選擇菜餚並下訂單

python命令列參數詳解 python命令列參數詳解 Dec 18, 2023 pm 04:13 PM

在Python中,可以透過命令列傳遞參數給腳本。這些參數可以在腳本內部使用,以便根據不同的輸入執行不同的操作。 Python命令列參數的詳解:1、位置參數:在命令列中依照順序傳遞給腳本的參數,它們可以在腳本內部透過位置來存取;2、命令列選項:以-或--開頭的參數,通常用於指定腳本的特定選項或標誌;3、傳遞參數值:透過命令列傳遞參數值。

如何使用WebSocket和JavaScript實現線上預約系統 如何使用WebSocket和JavaScript實現線上預約系統 Dec 17, 2023 am 09:39 AM

如何使用WebSocket和JavaScript實現線上預約系統在當今數位化的時代,越來越多的業務和服務都需要提供線上預約功能。而實現一個高效、即時的線上預約系統是至關重要的。本文將介紹如何使用WebSocket和JavaScript來實作一個線上預約系統,並提供具體的程式碼範例。一、什麼是WebSocketWebSocket是一種在單一TCP連線上進行全雙工

Django初探:用命令列創建你的首個Django項目 Django初探:用命令列創建你的首個Django項目 Feb 19, 2024 am 09:56 AM

Django專案開啟之旅:從命令列開始,創建你的第一個Django專案Django是一個強大且靈活的網路應用框架,它以Python為基礎,提供了許多開發Web應用所需的工具和功能。本文將帶領你從命令列開始,創建你的第一個Django專案。在開始之前,請確保你已經安裝了Python和Django。步驟一:建立專案目錄首先,開啟命令列窗口,並建立新的目錄

See all articles