摘要:從到完美,用寫一個(gè)命令行工具中的字段現(xiàn)在,不管是前端項(xiàng)目還是項(xiàng)目,一般都會(huì)用做包管理工具,而是其相關(guān)的配置信息。又一個(gè)讓命令行與用戶進(jìn)行交互的工具與功能差不多。比較常用的命令行命令行相關(guān)的應(yīng)用就很多啦,比如等,但這些不僅僅是命令行工具。
從 1 到完美,用 node 寫一個(gè)命令行工具 1. package.json 中的 bin 字段
現(xiàn)在,不管是前端項(xiàng)目還是 node 項(xiàng)目,一般都會(huì)用 npm 做包管理工具,而 package.json 是其相關(guān)的配置信息。
對(duì) node 項(xiàng)目而言,模塊導(dǎo)出入口文件由 package.json 的 main 字段指定,而如果是要安裝到命令行的工具,則是由 package.json 的 bin 字段指定。
1.1 配置單個(gè)命令 與包名同名{ "name": "pro", "bin": "bin/pro.js" }
這樣安裝的命令名稱就是 pro。
自定義命令名稱(與包名不同名){ "name": "pro-cli", "bin": { "pro": "bin/pro.js" } }
這樣安裝的命令名稱也是 pro。
1.2 配置多個(gè)命令{ "name": "pro-cli", "bin": { "pro": "bin/pro.js", "mini": "bin/mini.js" } }
這樣安裝就有 pro 與 mini 兩個(gè)命令。
2. 對(duì)應(yīng) bin/pro.js 文件的寫法#!/usr/bin/env node require("../lib/pro");
與普通的 js 文件寫法一樣,只是前面要加上 #!/usr/bin/env node。
這段前綴代碼叫 shebang,具體可以參考 Shebang (Unix) - Wikipedia).
3. 安裝方式 3.1 全局安裝npm i -g pro-cli
這種安裝方式可以在命令行全局使用。
pro dev pro build3.2 本地安裝
npm i --save-dev pro-cli
這種安裝方式需要配合 npm 一起使用,比如:
# package.json { "scripts": { "dev": "pro dev", "build": "pro build" } } # 使用 npm run dev npm run build4. 選擇合適的命令行封裝庫(kù)
一般來(lái)說(shuō),一個(gè)命令都會(huì)有如下的一些參數(shù):
-v, --version 或 -V, --version: 查看版本號(hào)
-h, --help: 查看幫助信息
如果完全自己來(lái)寫的,就會(huì)很麻煩,尤其是幫助信息。所以,選擇一個(gè)好的命令行封裝庫(kù),能夠幫我們省去很多工作。
用的比較多的:
commander.js
yargs
meow
以 commander.js 為例:
4.1 安裝npm install commander --save4.2 注冊(cè)
const commander = require("commander");
注冊(cè)版本號(hào)與描述
commander .version("0.0.1") .description("A cli application named pro");
注冊(cè)參數(shù)(非子命令參數(shù))
commander .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")
注冊(cè)子命令
commander .command("rm") .option("-r, --recursive", "Remove recursively") .action((dir, cmd) => { console.log("remove " + dir + (cmd.recursive ? " recursively" : "")) })
解析
commander.parse(process.argv);4.3 使用
查看版本號(hào)
pro -V pro --version # 打印結(jié)果 0.0.1
運(yùn)行 rm 子命令
pro rm dir
查看幫助(commander 會(huì)自動(dòng)生成)
pro -h pro --help # 打印結(jié)果 Usage: pro [options] A cli application named pro Options: -h, --help output usage information -V, --version output the version number -p, --peppers Add peppers -P, --pineapple Add pineapple -b, --bbq Add bbq sauce -c, --cheeseAdd the specified type of cheese [marble] -C, --no-cheese You do not want any cheese
更多用法查看 commander.js。
5. 常用的命令行相關(guān)工具庫(kù) 5.1 minimist: 解析命令行的參數(shù)var argv = require("minimist")(process.argv.slice(2)); console.dir(argv);
$ node example/parse.js -a beep -b boop { _: [], a: "beep", b: "boop" }
$ node example/parse.js -x 3 -y 4 -n5 -abc --beep=boop foo bar baz { _: [ "foo", "bar", "baz" ], x: 3, y: 4, n: 5, a: true, b: true, c: true, beep: "boop" }
更多參考 minimist。
5.2 chalk: 讓命令行的字符帶上顏色更多參考 chalk。
5.3 Inquirer.js: 讓命令行與用戶進(jìn)行交互,如輸入、選擇等更多參考 Inquirer.js。
5.4 shelljs: 跨平臺(tái) Unix shell 命令 的 node 封裝var shell = require("shelljs"); if (!shell.which("git")) { shell.echo("Sorry, this script requires git"); shell.exit(1); } // Copy files to release dir shell.rm("-rf", "out/Release"); shell.cp("-R", "stuff/", "out/Release"); // Replace macros in each .js file shell.cd("lib"); shell.ls("*.js").forEach(function (file) { shell.sed("-i", "BUILD_VERSION", "v0.1.2", file); shell.sed("-i", /^.*REMOVE_THIS_LINE.*$/, "", file); shell.sed("-i", /.*REPLACE_LINE_WITH_MACRO.* /, shell.cat("macro.js"), file); }); shell.cd(".."); // Run external tool synchronously if (shell.exec("git commit -am "Auto-commit"").code !== 0) { shell.echo("Error: Git commit failed"); shell.exit(1); }
更多參考 shelljs。
5.5 blessed-contrib: 命令行圖表更多參考 blessed-contrib。
5.6 cash: 跨平臺(tái) linux 命令 的 node 封裝與 shelljs 功能差不多。
const $ = require("cash"); const out = $.ls(".", {l: true});
更多參考 cash。
5.7 prompts: 又一個(gè)讓命令行與用戶進(jìn)行交互的工具與 Inquirer.js 功能差不多。
更多參考 prompts。
5.8 ora: 命令行加載中圖標(biāo)更多參考 ora。
5.9 progress: 命令行進(jìn)度條downloading [===== ] 39/bps 29% 3.7s
更多參考 progress。
5.10 更多更多關(guān)于命令行的工具庫(kù)可以參考 command-line-utilities。
6. 比較常用的命令行 APP命令行相關(guān)的應(yīng)用就很多啦,比如 babel、webpack、rollup、eslint 等,但這些不僅僅是命令行工具。
下面介紹一些純命令行應(yīng)用:
vtop: 美美的 linux top 命令界面
speed-test: 測(cè)試網(wǎng)絡(luò)鏈接速度
http-server: 零配置啟動(dòng)一個(gè) http 服務(wù)器
fkill-cli: 跨平臺(tái) kill 命令
更多純命令行應(yīng)用可以參考 command-line-apps。
后續(xù)更多博客,查看 https://github.com/senntyou/blogs
作者:深予之 (@senntyou)
版權(quán)聲明:自由轉(zhuǎn)載-非商用-非衍生-保持署名(創(chuàng)意共享3.0許可證)
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/98066.html
摘要:從到完美,寫一個(gè)庫(kù)庫(kù)前端組件庫(kù)之前講了很多關(guān)于項(xiàng)目工程化前端架構(gòu)前端構(gòu)建等方面的技術(shù),這次說(shuō)說(shuō)怎么寫一個(gè)完美的第三方庫(kù)。使用導(dǎo)出模塊,就可以在使用這個(gè)庫(kù)的項(xiàng)目中構(gòu)建時(shí)使用功能。 從 1 到完美,寫一個(gè) js 庫(kù)、node 庫(kù)、前端組件庫(kù) 之前講了很多關(guān)于項(xiàng)目工程化、前端架構(gòu)、前端構(gòu)建等方面的技術(shù),這次說(shuō)說(shuō)怎么寫一個(gè)完美的第三方庫(kù)。 1. 選擇合適的規(guī)范來(lái)寫代碼 js 模塊化的發(fā)展大致有...
摘要:從到完美,寫一個(gè)庫(kù)庫(kù)前端組件庫(kù)之前講了很多關(guān)于項(xiàng)目工程化前端架構(gòu)前端構(gòu)建等方面的技術(shù),這次說(shuō)說(shuō)怎么寫一個(gè)完美的第三方庫(kù)。使用導(dǎo)出模塊,就可以在使用這個(gè)庫(kù)的項(xiàng)目中構(gòu)建時(shí)使用功能。 從 1 到完美,寫一個(gè) js 庫(kù)、node 庫(kù)、前端組件庫(kù) 之前講了很多關(guān)于項(xiàng)目工程化、前端架構(gòu)、前端構(gòu)建等方面的技術(shù),這次說(shuō)說(shuō)怎么寫一個(gè)完美的第三方庫(kù)。 1. 選擇合適的規(guī)范來(lái)寫代碼 js 模塊化的發(fā)展大致有...
摘要:從到再到搭建編寫構(gòu)建一個(gè)前端項(xiàng)目選擇現(xiàn)成的項(xiàng)目模板還是自己搭建項(xiàng)目骨架搭建一個(gè)前端項(xiàng)目的方式有兩種選擇現(xiàn)成的項(xiàng)目模板自己搭建項(xiàng)目骨架。使用版本控制系統(tǒng)管理源代碼項(xiàng)目搭建好后,需要一個(gè)版本控制系統(tǒng)來(lái)管理源代碼。 從 0 到 1 再到 100, 搭建、編寫、構(gòu)建一個(gè)前端項(xiàng)目 1. 選擇現(xiàn)成的項(xiàng)目模板還是自己搭建項(xiàng)目骨架 搭建一個(gè)前端項(xiàng)目的方式有兩種:選擇現(xiàn)成的項(xiàng)目模板、自己搭建項(xiàng)目骨架。 ...
摘要:從到再到搭建編寫構(gòu)建一個(gè)前端項(xiàng)目選擇現(xiàn)成的項(xiàng)目模板還是自己搭建項(xiàng)目骨架搭建一個(gè)前端項(xiàng)目的方式有兩種選擇現(xiàn)成的項(xiàng)目模板自己搭建項(xiàng)目骨架。使用版本控制系統(tǒng)管理源代碼項(xiàng)目搭建好后,需要一個(gè)版本控制系統(tǒng)來(lái)管理源代碼。 從 0 到 1 再到 100, 搭建、編寫、構(gòu)建一個(gè)前端項(xiàng)目 1. 選擇現(xiàn)成的項(xiàng)目模板還是自己搭建項(xiàng)目骨架 搭建一個(gè)前端項(xiàng)目的方式有兩種:選擇現(xiàn)成的項(xiàng)目模板、自己搭建項(xiàng)目骨架。 ...
摘要:從到再到搭建編寫構(gòu)建一個(gè)前端項(xiàng)目選擇現(xiàn)成的項(xiàng)目模板還是自己搭建項(xiàng)目骨架搭建一個(gè)前端項(xiàng)目的方式有兩種選擇現(xiàn)成的項(xiàng)目模板自己搭建項(xiàng)目骨架。使用版本控制系統(tǒng)管理源代碼項(xiàng)目搭建好后,需要一個(gè)版本控制系統(tǒng)來(lái)管理源代碼。 從 0 到 1 再到 100, 搭建、編寫、構(gòu)建一個(gè)前端項(xiàng)目 1. 選擇現(xiàn)成的項(xiàng)目模板還是自己搭建項(xiàng)目骨架 搭建一個(gè)前端項(xiàng)目的方式有兩種:選擇現(xiàn)成的項(xiàng)目模板、自己搭建項(xiàng)目骨架。 ...
閱讀 2879·2021-11-24 09:39
閱讀 3130·2021-11-19 10:00
閱讀 1535·2021-10-27 14:17
閱讀 1811·2021-10-14 09:43
閱讀 961·2021-09-03 10:30
閱讀 3413·2019-08-30 15:54
閱讀 2728·2019-08-30 13:05
閱讀 2006·2019-08-30 11:02