共计 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 | 主动寻找 8000 至 65535 内可用端口号 |
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