nodejs交互工具庫 -- ora和envinfo

nodejs交互工具庫系列

做用
chalk-pipe 使用更簡單的樣式字符串建立粉筆樣式方案
chalk 正確處理終端字符串樣式
Commander.js 完整的 node.js 命令行解決方案
Inquirer.js 一組通用的交互式命令行用戶界面。
slash 系統路徑符處理
minimist 解析參數選項
dotenv 將環境變量從 .env文件加載到process.env中
dotenv-expand 擴展計算機上已經存在的環境變量
hash-sum 很是快的惟一哈希生成器
deepmerge 深度合併兩個或多個對象的可枚舉屬性。
yaml-front-matter 解析yaml或json
resolve 實現node的 require.resolve()算法,這樣就能夠異步和同步地使用require.resolve()表明文件
semver npm的語義版本器
leven 測量兩字符串之間的差別<br/>最快的JS實現之一
lru cache 刪除最近最少使用的項的緩存對象
portfinder 自動尋找 800065535內可用端口號
ora 優雅的終端轉輪
envinfo 生成故障排除軟件問題(如操做系統、二進制版本、瀏覽器、已安裝語言等)時所需的通用詳細信息的報告
memfs 內存文件系統與Node's fs API相同實現
execa 針對人類的流程執行
webpack-merge 用於鏈接數組和合並對象,從而建立一個新對象
webpack-chain 使用鏈式API去生成簡化webpack版本配置的修改
strip-ansi 從字符串中去掉ANSI轉義碼
address 獲取當前機器的IP, MAC和DNS服務器。
default-gateway 經過對OS路由接口的exec調用得到機器的默認網關
joi JavaScript最強大的模式描述語言和數據驗證器。
fs-extra 添加了未包含在原生fs模塊中的文件系統方法,並向fs方法添加了promise支持
Acorn 一個小而快速的JavaScript解析器,徹底用JavaScript編寫。
zlib.js ZLIB.js是ZLIB(RFC1950), DEFLATE(RFC1951), GZIP(RFC1952)和PKZIP在JavaScript實現。

nodejs交互工具庫 -- chalk-pipe和chalkphp

nodejs交互工具庫 -- commander和Inquirerjava

nodejs交互工具庫 -- slash, minimist和dotenv, dotenv-expandnode

nodejs交互工具庫 -- hash-sum, deepmerge和yaml-front-matterpython

nodejs交互工具庫 -- resolve和semvermysql

nodejs交互工具庫 -- leven, lru cache和portfinderreact

nodejs交互工具庫 -- ora和envinfoandroid

nodejs交互工具庫 -- memfs和execawebpack

nodejs交互工具庫 -- webpack-merge和webpack-chainnginx

nodejs交互工具庫 -- strip-ansi, address, default-gateway和joigit

nodejs交互工具庫 -- fs-extra, Acorn和zlib

ora

優雅的終端轉輪

Install

yarn add ora

Usage

const ora = require('ora');

const spinner = ora('Loading unicorns').start();

setTimeout(() => {
    spinner.color = 'yellow';
    spinner.text = 'Loading rainbows';
}, 1000);

API

ora(text)

ora(options)

若是提供了字符串,則將其視爲 options.text的快捷方式

options

Type: object

text

Type: string

在轉輪後顯示的文本。

prefixText

Type: string | () => string

文本或返回要在轉輪前顯示的文本的函數。若是設置爲空字符串,將不顯示前綴文本。

spinner

Type: string | object
Default: 'dots' img

provided spinners其中一個的名字. 若是您想測試不一樣的紡紗工,請參閱repo中的 example.js。在Windows上,它老是使用line轉輪,由於Windows命令行沒有適當的Unicode支持。

或者像這樣的對象:

{
    interval: 80, // Optional
    frames: ['-', '+', '-']
}
color

Type: string
Default: 'cyan'
Values: 'black' | 'red' | 'green' | 'yellow' | 'blue' | 'magenta' | 'cyan' | 'white' | 'gray'

轉輪顏色

hideCursor

Type: boolean
Default: true

設置爲false將阻止Ora隱藏光標

indent

Type: number
Default: 0

用給定的空格數縮進微調格

interval

Type: number
Default: 由轉輪提供或 100

每幀之間的間隔。

轉輪提供了它們本身的推薦間隔,因此實際上不須要指定這個間隔。

stream

Type: stream.Writable
Default: process.stderr

流來寫入輸出。

例如,您能夠將其設置爲process.stdout

isEnabled

Type: boolean

強制啓用/禁用轉輪。若是未指定,則若是流在TTY上下文中(未派生或管道傳輸)和/或不在CI環境中運行,則轉輪將被啓用。

注意 {isEnabled: false} 並不意味着它不會輸出任何東西。它只是意味着它不會輸出轉輪、顏色和其餘ansi轉義代碼。它仍然會記錄文本。

isSilent

Type: boolean
Default: false

禁用轉輪和全部日誌文本。將考慮壓制和啓用全部輸出false.

discardStdin

Type: boolean
Default: true

丟棄stdin輸入(Ctrl+C除外) 當它是TTY運行。這能夠防止轉輪在輸入時抖動,在按 Enter 鍵時輸出折線,並防止在轉輪運行時對輸入進行緩衝。

這對Windows沒有影響,由於沒有好的方法來正確地實現丟棄stdin。

Instance

.start(text?)

啓動轉輪。返回的實例。若是提供了文本,則設置當前文本。

.stop()

中止並清除轉輪。返回的實例。

.succeed(text?)

中止轉輪,將其更改成綠色 並持久化當前文本,或 text 若是提供。返回的實例。請看下面的GIF圖

.fail(text?)

中止旋轉,將其改成紅色 並持久化當前文本,或 text 若是提供。返回的實例。請看下面的GIF。

.warn(text?)

中止轉輪,將其更改成黃色 並持久化當前文本,或text 若是提供。返回的實例。

.info(text?)

中止轉輪,將其更改成藍色 並持久化當前文本,或text 若是提供。返回的實例。

.isSpinning

一個布爾值,表示實例當前是否在旋轉。

.stopAndPersist(options?)

中止轉輪並更改符號或文本。返回的實例。請看下面的GIF。

options

Type: object

symbol

Type: string
Default: ' '

將轉輪替換爲

text

Type: string
Default: Current 'text'

將持久存儲在符號以後的文本

prefixText

Type: string
Default: Current prefixText

將保存在符號以前的文本。若是設置爲空字符串,將不顯示前綴文本。

img

.clear()

清理轉輪。返回的實例。

.render()

手工渲染一個新幀。返回的實例。

.frame()

給一個新幀

.text

更改轉輪後的文本。

.prefixText

更改轉輪以前的文本。若是設置爲空字符串,將不顯示前綴文本。

.color

更改轉輪顏色。

.spinner

改變轉輪。

.indent

更改轉輪縮進。

ora.promise(action, text)

ora.promise(action, options)

開始一個轉輪的promise。若是promise實現,則使用.succeed()中止轉輪;若是拒絕,則使用.fail()中止轉輪。返回轉輪實例。

action

Type: Promise

FAQ

如何改變文本的顏色?

Use Chalk:

const ora = require('ora');
const chalk = require('chalk');

const spinner = ora(`Loading ${chalk.red('unicorns')}`).start();

爲何轉輪會凍結?

JavaScript是單線程的,所以同步操做會阻塞線程,包括旋轉器動畫。儘量選擇異步操做。

參考

基本經常使用的方法場景就這些了,更完整的用法能夠直接查閱文檔

ora

envinfo

envinfo生成故障排除軟件問題(如操做系統、二進制版本、瀏覽器、已安裝語言等)時所需的通用詳細信息的報告

問題

  • 它在個人電腦上工做
  • 「命令未找到」
  • 您正在運行什麼版本的「命令」?
  • 您正在運行什麼版本的「不一樣命令」?
  • 你有「插入晦澀的android sdk版本」嗎?
  • 每一個github問題報告模板:

請提供瀏覽器版本,Node.js版本,操做系統,編程語言等相關信息。

方案

  • 快速、輕鬆地將全部這些信息收集到一個地方。

Installation

要使用CLI工具,請全局安裝此包:

npm install -g envinfo || yarn global add envinfo

或者,使用不安裝的npx:

npx envinfo

在另外一個項目中做爲庫使用:

npm install envinfo || yarn add envinfo

CLI Usage

envinfo` || `npx envinfo
System:
    OS: macOS Mojave 10.14.5
    CPU: (8) x64 Intel(R) Core(TM) i7-7820HQ CPU @ 2.90GHz
    Memory: 2.97 GB / 16.00 GB
    Shell: 5.3 - /bin/zsh
  Binaries:
    Node: 8.16.0 - ~/.nvm/versions/node/v8.16.0/bin/node
    Yarn: 1.15.2 - ~/.yarn/bin/yarn
    npm: 6.9.0 - ~/.nvm/versions/node/v8.16.0/bin/npm
    Watchman: 4.9.0 - /usr/local/bin/watchman
  Managers:
    Cargo: 1.31.0 - ~/.cargo/bin/cargo
    CocoaPods: 1.7.3 - /usr/local/bin/pod
    Composer: 1.8.6 - /usr/local/bin/composer
    Gradle: 5.5 - /usr/local/bin/gradle
    Homebrew: 2.1.7 - /usr/local/bin/brew
    Maven: 3.6.1 - /usr/local/bin/mvn
    pip2: 19.0.3 - /usr/local/bin/pip2
    pip3: 19.0.2 - /usr/local/bin/pip3
    RubyGems: 2.5.2.3 - /usr/bin/gem
  Utilities:
    CMake: 3.13.3 - /usr/local/bin/cmake
    Make: 3.81 - /usr/bin/make
    GCC: 10.14. - /usr/bin/gcc
    Git: 2.20.0 - /usr/local/bin/git
    Mercurial: 4.5.3 - /usr/bin/hg
    Clang: 1001.0.46.4 - /usr/bin/clang
    Subversion: 1.10.3 - /usr/bin/svn
  Servers:
    Apache: 2.4.34 - /usr/sbin/apachectl
    Nginx: 1.13.12 - /usr/local/bin/nginx
  Virtualization:
    Docker: 18.09.1 - /usr/local/bin/docker
    Parallels: 13.3.0 - /usr/local/bin/prlctl
    VirtualBox: 5.2.20 - /usr/local/bin/vboxmanage
  SDKs:
    iOS SDK:
      Platforms: iOS 12.2, macOS 10.14, tvOS 12.2, watchOS 5.2
    Android SDK:
      API Levels: 28
      Build Tools: 28.0.3
      System Images: android-28 | Google Play Intel x86 Atom
  IDEs:
    Android Studio: 3.2 AI-181.5540.7.32.5056338
    Atom: 1.23.3
    Emacs: 22.1.1 - /usr/bin/emacs
    Nano: 2.0.6 - /usr/bin/nano
    VSCode: 1.36.0 - /usr/local/bin/code
    Vim: 8.0 - /usr/bin/vim
    Xcode: 10.2.1/10E1001 - /usr/bin/xcodebuild
  Languages:
    Bash: 4.4.23 - /usr/local/bin/bash
    Elixir: 1.6.2 - /usr/local/bin/elixir
    Go: 1.11.1 - /usr/local/bin/go
    Java: 1.8.0_192 - /usr/bin/javac
    Perl: 5.18.4 - /usr/bin/perl
    PHP: 7.1.23 - /usr/bin/php
    Python: 2.7.16 - /usr/local/bin/python
    Python3: 3.7.2 - /usr/local/bin/python3
    R: 3.6.0 - /usr/local/bin/R
    Ruby: 2.3.7 - /usr/bin/ruby
    Rust: 1.16.0 - /Users/tabrindle/.cargo/bin/rustup
  Databases:
    MongoDB: 3.6.4 - /usr/local/bin/mongo
    MySQL: 10.3.10 (MariaDB) - /usr/local/bin/mysql
    PostgreSQL: 10.3 - /usr/local/bin/postgres
    SQLite: 3.24.0 - /usr/bin/sqlite3
  Browsers:
    Chrome: 75.0.3770.100
    Chrome Canary: 77.0.3847.0
    Firefox: 68.0
    Firefox Developer Edition: 69.0
    Firefox Nightly: 69.0a1
    Safari: 12.1.1
    Safari Technology Preview: 13.0
  npmPackages:
    apollo-client: ^2.3.1 => 2.3.1
    jest: ^22.2.1 => 22.2.1
    ...
    react: ^16.3.2 => 16.3.2
    react-apollo: ^2.1.4 => 2.1.4
    run4staged: ^1.1.1 => 1.1.1
    solidarity: 2.0.5 => 2.0.5
    styled-components: ^3.1.6 => 3.1.6
  npmGlobalPackages:
    create-react-app: 1.5.2
    create-react-native-app: 1.0.0
    envinfo: 5.10.0
    exp: 49.2.2
    gatsby-cli: 1.1.52
    npm: 5.6.0
    react-native-cli: 2.0.1
    solidarity: 2.1.0
    typescript: 2.8.1

Programmatic Usage

Envinfo接受一個配置對象並返回一個Promise ,該Promise 解析一個字符串(可選yaml、json或markdown)

import envinfo from 'envinfo';

envinfo.run(
  {
    System: ['OS', 'CPU'],
    Binaries: ['Node', 'Yarn', 'npm'],
    Browsers: ['Chrome', 'Firefox', 'Safari'],
    npmPackages: ['styled-components', 'babel-plugin-styled-components'],
  },
  { json: true, showNotFound: true }
).then(env => console.log(env));

日誌

{
    "System": {
        "OS": "macOS High Sierra 10.13",
        "CPU": "x64 Intel(R) Core(TM) i7-4870HQ CPU @ 2.50GHz"
    },
    "Binaries": {
        "Node": {
            "version": "8.11.0",
            "path": "~/.nvm/versions/node/v8.11.0/bin/node"
        },
        "Yarn": {
            "version": "1.5.1",
            "path": "~/.yarn/bin/yarn"
        },
        "npm": {
            "version": "5.6.0",
            "path": "~/.nvm/versions/node/v8.11.0/bin/npm"
        }
    },
    "Browsers": {
        "Chrome": {
            "version": "67.0.3396.62"
        },
        "Firefox": {
            "version": "59.0.2"
        },
        "Safari": {
            "version": "11.0"
        }
    },
    "npmPackages": {
        "styled-components": {
            "wanted": "^3.2.1",
            "installed": "3.2.1"
        },
        "babel-plugin-styled-components": "Not Found"
    }
}

全部的envinfo助手也被導出以供使用。你能夠總體使用envinfo,也能夠只使用你須要的部分,好比:

const envinfo = require('envinfo');

// each helper returns a promise
const node = await envinfo.helpers.getNodeInfo();

// The promises resolve to an array of values: ["Name", "Version", "Path"]
// e.g. ["Node", "10.9.0", "/usr/local/bin/node"]

console.log(`Node: ${node[1]} - ${node[2]}`); // "Node: 10.9.0 - ~/.nvm/versions/node/v8.14.0/bin/node"

CLI Options

--system               Print general system info such as OS, CPU, Memory and Shell
    --browsers             Get version numbers of installed web browsers
    --SDKs                 Get platforms, build tools and SDKs of iOS and Android
    --IDEs                 Get version numbers of installed IDEs
    --languages            Get version numbers of installed languages such as Java, Python, PHP, etc
    --binaries             Get version numbers of node, npm, watchman, etc
    --npmPackages          Get version numbers of locally installed npm packages - glob, string, or comma delimited list
    --npmGlobalPackages    Get version numbers of globally installed npm packages

    --duplicates           Mark duplicate npm packages inside parentheses eg. (2.1.4)
    --fullTree             Traverse entire node_modules dependency tree, not just top level

    --markdown             Print output in markdown format
    --json                 Print output in JSON format
    --console              Print to console (defaults to on for CLI usage, off for programmatic usage)

Integration

envinfo已經集成到:

envinfo 使用在 ISSUE_TEMPLATE:

Alternatives

  • type command -v 直到你打碎了你的電腦
  • specs - 一個優秀的ruby gem運行 command -v 爲:all-the-things:偉大的原始信息。
  • screenfetch - 獲取系統和終端信息,並顯示漂亮的ascii標識
  • Solidarity - 基於項目的環境檢查器
  • 編寫您本身的

參考

基本經常使用的方法場景就這些了,更完整的用法能夠直接查閱文檔

envinfo

相關文章
相關標籤/搜索