摘要:命令行工具開發有許多命令行工具。現在我們就用來開發一個實用的命令行小工具一初探一個最簡單的命令行工具首先我們新建一目錄,然后執行生成文件新建一目錄并在目錄下創建一個執行我們可以看到終端輸出。。
node命令行工具開發
NodeJs有許多命令行工具。它們全局安裝,并提供一個命令供我們使用,完成相應的功能。 現在我們就用node來開發一個實用的命令行小工具一.初探 一個最簡單的命令行工具
1.首先我們新建一目錄,然后執行npm init生成package.json文件
2.新建一bin目錄并在目錄下創建一個hi.js
#! /usr/bin/env node console.log("hi")
執行node hi.js我們可以看到終端輸出‘hi’。。當然這并不是我們要的命令行工具,我們需要直接運行hi就可出現結果
3.現在我們告訴npm可執行文件是哪個,在package.json里添加如下信息:
"bin": { "hi": "bin/hi.js" }
npm link
現在我們執行npm link啟用命令行,現在再試試在終端直接輸入hi命令,這次我們可以如愿見到結果
處理參數命令行參數可通過系統變量process.argv獲取。 process.argv返回一個數組 第一個是node 第二個是腳本文件 第三個是輸入的參數,process.argv[2]開始得到才是真正的參數部分
#! /usr/bin/env node let argv = process.argv.slice(2) let yourName = argv[0] console.log(`hi, ${yourName}!`) // 執行 hi liu // hi, liu!Commander.js
對于參數處理,我們一般使用commander,commander是一個輕巧的nodejs模塊,提供了用戶命令行輸入和參數解析強大功能如:自記錄代碼、自動生成幫助、合并短參數(“ABC”==“-A-B-C”)、默認選項、強制選項、命令解析、提示符
$ npm install commander --save
#!/usr/bin/env node /** * Module dependencies. */ var program = require("commander") program .version("0.0.1") .option("-p, --peppers", "Add peppers") .option("-P, --pineapple", "Add pineapple") .option("-b, --bbq-sauce", "Add bbq sauce") .option("-c, --cheese [type]", "Add the specified type of cheese [marble]", "marble") .parse(process.argv) console.log("you ordered a pizza with:") if (program.peppers) console.log(" - peppers") if (program.pineapple) console.log(" - pineapple") if (program.bbqSauce) console.log(" - bbq") console.log(" - %s cheese", program.cheese)Commander API
Option(): 初始化自定義參數對象,設置“關鍵字”和“描述”
Command(): 初始化命令行參數對象,直接獲得命令行輸入
Command#command(): 定義一個命令名字
Command#action(): 注冊一個callback函數
Command#option(): 定義參數,需要設置“關鍵字”和“描述”,關鍵字包括“簡寫”和“全寫”兩部分,以”,”,”|”,”空格”做分隔。
Command#parse(): 解析命令行參數argv
Command#description(): 設置description值
Command#usage(): 設置usage值
更多參考 commander官網
除了commander外,yargs也是一個優秀的命令行參數處理模塊
二.開發命令行翻譯工具 1.新建并初始化項目新建 文件夾translator/進入目錄下執行npm init 生成package.json文件
npm install commander superagent cli-table2 --save
cli-table2命令行表格輸出
superagent用于http請求
新建bin/translator.js文件,并加入package.json文件中
"bin": { "translator": "bin/translator.js" },
然后
npm link
這里我們會用到有道API
一切準備就緒我們就可以進行編碼了
由于代碼量很小,這里就直接貼代碼,在代碼中以注釋講解
#! /usr/bin/env node // 引入需要的模塊 const program = require("commander") const Table = require("cli-table2") // 表格輸出 const superagent = require("superagent") // http請求 // 初始化commander program .allowUnknownOption() .version("0.0.1") .usage("translator[input]") // 有道api const API = "http://fanyi.youdao.com/openapi.do?keyfrom=toaijf&key=868480929&type=data&doctype=json&version=1.1" // 添加自定義命令 program .command("query") .description("翻譯輸入") .action(function(word) { // 發起請求 superagent.get(API) .query({ q: word}) .end(function (err, res) { if(err){ console.log("excuse me, try again") return false } let data = JSON.parse(res.text) let result = {} // 返回的數據處理 if(data.basic){ result[word] = data["basic"]["explains"] }else if(data.translation){ result[word] = data["translation"] }else { console.error("error") } // 輸出表格 let table = new Table() table.push(result) console.log(table.toString()) }) }) // 沒有參數時顯示幫助信息 if (!process.argv[2]) { program.help(); console.log(); } program.parse(process.argv)
現在在終端中愉快的使用translator了
$ translator Usage: translator三.小結[input] Commands: query 翻譯輸入 Options: -h, --help output usage information -V, --version output the version number
了解nodeJs 可執行腳步
了解命令行參數解析
了解commander,cli-table2,superagent等第三方模塊
拋磚引玉,更多請參考各個模塊的官方示例及API文檔
相關鏈接CommanderJs
cli-table2
superagent
Node.js 命令行程序開發教程-阮一峰
Commander寫自己的Nodejs命令-粉絲日志
原文鏈接:xingxin.me
大家可以關注我的公眾號,一起玩耍。有技術干貨也有扯淡亂談,關注回復[888]領取福利
左手代碼右手磚,拋磚引玉
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/82046.html
摘要:相信熟悉系統的,對于一些等命令用起來應該愛不釋手,這也是我想要開發一個便捷命令行的初衷,其次就是記錄一個完整開源小玩具的全過程。 背景 命令行工具對于我們來說非常的熟悉,一些命令行的操作也極大的簡化了我們的日常工作。本文就基于我寫的一個Node命令行代碼計數器來進行展開。 相信熟悉linux系統的,對于一些ps,grep,cp,mv…等命令用起來應該愛不釋手,這也是我想要開發一個便捷命...
摘要:我們的小項目就初始化成功了,就可以認真思考代碼了首先分析糗事百科我們打開糗事百科會發現它的還是很簡單,由于我們只是爬取段子所以如下,就是頁數。 Node命令行工具開發【看段子】 你有沒有上班想看笑話卻又怕領導發現的經歷?現在我們就用幾十行代碼寫一個命令行看笑話段子的小程序,從此無需擔心領導的視察。這篇文章和上一篇差不多都是命令行小工具開發,不過本篇更偏向于小爬蟲的開發 總覽:命令行看段...
摘要:由于現在構建工具盛行,前端部署的代碼都是經過編譯,壓縮后的,于是乎,就扮演了一個十分重要的角色,用來作為源代碼和編譯代碼之間的映射,方便定位問題。源代碼的標識,如果無法獲取,返回。 摘要: Source Map還是很神奇的。 原文:線上出bug了?別怕,這么定位! 公眾號:前端小苑 Fundebug經授權轉載并修改,版權歸原作者所有。 工作中,生產環境代碼是編譯后代碼,搜集到報錯...
閱讀 3977·2021-09-22 16:03
閱讀 5311·2021-09-22 15:40
閱讀 1191·2021-09-06 15:02
閱讀 866·2019-08-30 15:53
閱讀 2215·2019-08-29 15:35
閱讀 1105·2019-08-23 18:22
閱讀 3333·2019-08-23 16:06
閱讀 643·2019-08-23 12:27