6

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()代表文件
semvernpm的语义版本器
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调用获得机器的默认网关
joiJavaScript最强大的模式描述语言和数据验证器。
fs-extra添加了未包含在原生fs模块中的文件系统方法,并向fs方法添加了promise支持
Acorn一个小而快速的JavaScript解析器,完全用JavaScript编写。
zlib.jsZLIB.js是ZLIB(RFC1950), DEFLATE(RFC1951), GZIP(RFC1952)和PKZIP在JavaScript实现。

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

nodejs交互工具库 -- commander和Inquirer

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

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

nodejs交互工具库 -- resolve和semver

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

nodejs交互工具库 -- ora和envinfo

nodejs交互工具库 -- memfs和execa

nodejs交互工具库 -- webpack-merge和webpack-chain

nodejs交互工具库 -- strip-ansi, address, default-gateway和joi

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


Afterward
621 声望62 粉丝

努力去做,对的坚持,静待结果