关于javascript:nodejs交互工具库-ora和envinfo

109次阅读

共计 8181 个字符,预计需要花费 21 分钟才能阅读完成。

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()代表文件
semver npm 的语义版本器
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 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 曾经集成到:

  • 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

正文完
 0