nodejs交互工具库系列

作用
chalk-pipe应用更简略的款式字符串创立粉笔款式计划
chalk正确处理终端字符串款式
Commander.js残缺的 node.js 命令行解决方案
Inquirer.js一组通用的交互式命令行用户界面。
slash零碎门路符解决
minimist解析参数选项
dotenv将环境变量从 .env文件加载到process.env中
hash-sum十分快的惟一哈希生成器
deepmerge深度合并两个或多个对象的可枚举属性。
yaml-front-matter解析yaml或json
resolve实现node的 require.resolve()算法,这样就能够异步和同步地应用require.resolve()代表文件
semvernpm的语义版本器
leven测量两字符串之间的差别<br/>最快的JS实现之一
lru cache删除最近起码应用的项的缓存对象
portfinder主动寻找 800065535内可用端口号
ora优雅的终端转轮
envinfo生成故障排除软件问题(如操作系统、二进制版本、浏览器、已装置语言等)时所需的通用详细信息的报告

nodejs交互工具库 -- chalk-pipe和chalk

nodejs交互工具库 -- commander和Inquirer

nodejs交互工具库 -- slash, minimist和dotenv

nodejs交互工具库 -- hash-sum, deepmerge和yaml-front-matter

nodejs交互工具库 -- resolve和semver

nodejs交互工具库 -- leven, lru cache和portfinder

nodejs交互工具库 -- ora和envinfo

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'

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

将保留在符号之前的文本。如果设置为空字符串,将不显示前缀文本。

.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 promiseconst 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曾经集成到:

  • React Native (react-native info)
  • Create React App (create-react-app --info)
  • Expo CLI (expo diagnostics)
  • Webpack (webpack-cli info)
  • Solidarity (solidarity report)
  • Gatsby (gatsby info)

envinfo 应用在 ISSUE_TEMPLATE:

  • styled-components
  • Jest
  • Apollo Client

Alternatives

  • type command -v 直到你打碎了你的电脑
  • specs - 一个优良的ruby gem运行 command -v 为:all-the-things:平凡的原始信息。
  • screenfetch - 获取零碎和终端信息,并显示丑陋的ascii标识
  • Solidarity - 基于我的项目的环境查看器
  • 编写您本人的

参考

根本罕用的办法场景就这些了,更残缺的用法能够间接查阅文档

envinfo