国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

從 1 到完美,用 node 寫一個命令行工具

YorkChen / 3247人閱讀

摘要:從到完美,用寫一個命令行工具中的字段現在,不管是前端項目還是項目,一般都會用做包管理工具,而是其相關的配置信息。又一個讓命令行與用戶進行交互的工具與功能差不多。比較常用的命令行命令行相關的應用就很多啦,比如等,但這些不僅僅是命令行工具。

從 1 到完美,用 node 寫一個命令行工具 1. package.json 中的 bin 字段

現在,不管是前端項目還是 node 項目,一般都會用 npm 做包管理工具,而 package.json 是其相關的配置信息。

node 項目而言,模塊導出入口文件由 package.jsonmain 字段指定,而如果是要安裝到命令行的工具,則是由 package.jsonbin 字段指定。

1.1 配置單個命令 與包名同名
{
  "name": "pro",
  "bin": "bin/pro.js"
}

這樣安裝的命令名稱就是 pro

自定義命令名稱(與包名不同名)
{
  "name": "pro-cli",
  "bin": {
    "pro": "bin/pro.js"
  }
}

這樣安裝的命令名稱也是 pro

1.2 配置多個命令
{
  "name": "pro-cli",
  "bin": {
    "pro": "bin/pro.js",
    "mini": "bin/mini.js"
  }
}

這樣安裝就有 promini 兩個命令。

2. 對應 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 build
3.2 本地安裝
npm i --save-dev pro-cli

這種安裝方式需要配合 npm 一起使用,比如:

# package.json
{
  "scripts": {
    "dev": "pro dev",
    "build": "pro build"
  }
}

# 使用
npm run dev
npm run build
4. 選擇合適的命令行封裝庫

一般來說,一個命令都會有如下的一些參數:

-v, --version-V, --version: 查看版本號

-h, --help: 查看幫助信息

如果完全自己來寫的,就會很麻煩,尤其是幫助信息。所以,選擇一個好的命令行封裝庫,能夠幫我們省去很多工作。

用的比較多的:

commander.js

yargs

meow

commander.js 為例:

4.1 安裝
npm install commander --save
4.2 注冊
const commander = require("commander");

注冊版本號與描述

commander
  .version("0.0.1")
  .description("A cli application named pro");

注冊參數(非子命令參數)

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")

注冊子命令

commander
  .command("rm ")
  .option("-r, --recursive", "Remove recursively")
  .action((dir, cmd) => {
    console.log("remove " + dir + (cmd.recursive ? " recursively" : ""))
  })

解析

commander.parse(process.argv);
4.3 使用

查看版本號

pro -V
pro --version

# 打印結果
0.0.1

運行 rm 子命令

pro rm dir

查看幫助(commander 會自動生成)

pro -h
pro --help

# 打印結果
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, --cheese   Add the specified type of cheese [marble]
  -C, --no-cheese      You do not want any cheese

更多用法查看 commander.js。

5. 常用的命令行相關工具庫 5.1 minimist: 解析命令行的參數
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: 讓命令行與用戶進行交互,如輸入、選擇等

更多參考 Inquirer.js。

5.4 shelljs: 跨平臺 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: 跨平臺 linux 命令 的 node 封裝

與 shelljs 功能差不多。

const $ = require("cash");
const out = $.ls(".", {l: true});

更多參考 cash。

5.7 prompts: 又一個讓命令行與用戶進行交互的工具

與 Inquirer.js 功能差不多。

更多參考 prompts。

5.8 ora: 命令行加載中圖標

更多參考 ora。

5.9 progress: 命令行進度條
downloading [=====             ] 39/bps 29% 3.7s

更多參考 progress。

5.10 更多

更多關于命令行的工具庫可以參考 command-line-utilities。

6. 比較常用的命令行 APP

命令行相關的應用就很多啦,比如 babelwebpackrollupeslint 等,但這些不僅僅是命令行工具。

下面介紹一些純命令行應用:

vtop: 美美的 linux top 命令界面

speed-test: 測試網絡鏈接速度

http-server: 零配置啟動一個 http 服務器

fkill-cli: 跨平臺 kill 命令

更多純命令行應用可以參考 command-line-apps。

后續

更多博客,查看 https://github.com/senntyou/blogs

作者:深予之 (@senntyou)

版權聲明:自由轉載-非商用-非衍生-保持署名(創意共享3.0許可證)

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/98066.html

相關文章

  • 1 完美一個 js 庫、node 庫、前端組件庫

    摘要:從到完美,寫一個庫庫前端組件庫之前講了很多關于項目工程化前端架構前端構建等方面的技術,這次說說怎么寫一個完美的第三方庫。使用導出模塊,就可以在使用這個庫的項目中構建時使用功能。 從 1 到完美,寫一個 js 庫、node 庫、前端組件庫 之前講了很多關于項目工程化、前端架構、前端構建等方面的技術,這次說說怎么寫一個完美的第三方庫。 1. 選擇合適的規范來寫代碼 js 模塊化的發展大致有...

    rollback 評論0 收藏0
  • 1 完美一個 js 庫、node 庫、前端組件庫

    摘要:從到完美,寫一個庫庫前端組件庫之前講了很多關于項目工程化前端架構前端構建等方面的技術,這次說說怎么寫一個完美的第三方庫。使用導出模塊,就可以在使用這個庫的項目中構建時使用功能。 從 1 到完美,寫一個 js 庫、node 庫、前端組件庫 之前講了很多關于項目工程化、前端架構、前端構建等方面的技術,這次說說怎么寫一個完美的第三方庫。 1. 選擇合適的規范來寫代碼 js 模塊化的發展大致有...

    xiaolinbang 評論0 收藏0
  • 0 1 100, 搭建、編、構建一個前端項目

    摘要:從到再到搭建編寫構建一個前端項目選擇現成的項目模板還是自己搭建項目骨架搭建一個前端項目的方式有兩種選擇現成的項目模板自己搭建項目骨架。使用版本控制系統管理源代碼項目搭建好后,需要一個版本控制系統來管理源代碼。 從 0 到 1 再到 100, 搭建、編寫、構建一個前端項目 1. 選擇現成的項目模板還是自己搭建項目骨架 搭建一個前端項目的方式有兩種:選擇現成的項目模板、自己搭建項目骨架。 ...

    call_me_R 評論0 收藏0
  • 0 1 100, 搭建、編、構建一個前端項目

    摘要:從到再到搭建編寫構建一個前端項目選擇現成的項目模板還是自己搭建項目骨架搭建一個前端項目的方式有兩種選擇現成的項目模板自己搭建項目骨架。使用版本控制系統管理源代碼項目搭建好后,需要一個版本控制系統來管理源代碼。 從 0 到 1 再到 100, 搭建、編寫、構建一個前端項目 1. 選擇現成的項目模板還是自己搭建項目骨架 搭建一個前端項目的方式有兩種:選擇現成的項目模板、自己搭建項目骨架。 ...

    wzyplus 評論0 收藏0
  • 0 1 100, 搭建、編、構建一個前端項目

    摘要:從到再到搭建編寫構建一個前端項目選擇現成的項目模板還是自己搭建項目骨架搭建一個前端項目的方式有兩種選擇現成的項目模板自己搭建項目骨架。使用版本控制系統管理源代碼項目搭建好后,需要一個版本控制系統來管理源代碼。 從 0 到 1 再到 100, 搭建、編寫、構建一個前端項目 1. 選擇現成的項目模板還是自己搭建項目骨架 搭建一個前端項目的方式有兩種:選擇現成的項目模板、自己搭建項目骨架。 ...

    aristark 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<