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 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