本篇文章給大家分享的內容是使用node.js建立命令列工具,有著一定的參考價值,有需要的朋友可以參考一下
inquirer.js:一個封裝了常用命令列互動的node.js模組,透過這個模組可以很方便地建立一個新的命令列應用。
shell.js:跨平台的unix shell指令模組。
Node版本:由於inquirer.js的非同步方法預設回傳Promise,建議使用node.js>=8。
工作中有大量項目上線前最後一步需要執行測試、編譯、更新版本號、提交,甚至執行的命令都是一樣,在這裡我們透過命令列工具將這些步驟一鍵自動化,同時進行預檢查,以防止錯漏。
建立一個新的Node.js專案。
建立檔案bin/my-cli.js,node.js專案通常會把cli入口放在bin目錄下,其他模組放在lib目錄下。
在bin/my-cli.js檔案頭部加上#!/usr/bin/env node
。
新增 "bin": {"my-cli": "./bin/my-cli.js"},
到package.json,宣告我們要使用的命令。
專案根目錄下執行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建置命令列工具的詳細內容。更多資訊請關注PHP中文網其他相關文章!