NodeJS 开发工具栈
TOC
- Node 环境
- Misc
- 缓存
- 通知
- 事件/Event Emitter
- Scheduler
- Hash
- 随机数
- CLI
- 颜色
- 脚本
- 打包方案
- 编译
- 工具集
- debug
- 数据校验
- 脚手架
- 测试
- Benchmark
- 服务器
- 数据生成/Mock
- 错误处理
- 配置
- 日志
- 进程
- 文件
- 网络
- 文档
- 时间
- 单位换算
- 工程化
- 自动化
- ORM
- AST
- Code Lint
- Code Format
- Code Check
- Profiling
- HTTP
- 安全
- Node 客户端
- 框架
- Stream
- 压缩/解压
- 语法分析
- evil
- SSL
- 依赖管理
- 序列化
- RPC
- 其他
- 我关注的人/组
Node 环境
- nrm: NPM Registry Manager
- fnm: Node Version Manager
- nvs: 类似 nvm。Windows 平台使用这个。
- get-node: 这是一个类库。功能是下载指定版本的 node。兼容 Linux/Mac/Windows,支持代理
Misc
- npm-check-updates: 检查依赖包是否有新版本。可一键升级依赖版本。可作为命令或类库使用。
- npm-check: 检查依赖包是否有未使用或者缺失有新版本。可一键升级依赖版本。可作为命令或类库使用。年久失修。
- depcheck: 备用方案。年久失修。
- yn: 判断值是否为 yes/no
- package-json: Get metadata of a package from the npm registry. 支持私有 registry
- cjstoesm: A tool that can transform CommonJS to ESM
缓存
- node-lru-cache: A cache object that deletes the least-recently-used items.
通知
- node-notifier: 调用系统通知 API,兼容很多系统
事件/Event Emitter
Scheduler
- bottleneck: Job scheduler and rate limiter, supports Clustering
Hash
- Wikipedia - List of hash functions
- hashids.js: generate short unique ids from integers
随机数
- nanoid: 不可排序,时间无关。碰撞概率低,可自定义长度,自定义字符表,URL 友好,多语言支持
- nano-id-cc: 碰撞计算器
- ulid: 128 位长度,按时间排序,URL 友好,自定义字符表,多语言支持
CLI
- cli-cheatsheet: 一份手册。收集了很多很棒的类库
- blessed: 强大的 CLI UI 开发工具集
- blessed-contrib: blessed 扩展
- wopr: CLI 图形化报表
- iponmap: IP 地图映射
- babar: CLI Chart
- clui: Command Line UI toolkit
- cli-spinners: 终端里的 Spinner
- ora: 同 cli-spinners
- gajus/table: 表格输出
- yargs/cliui: 列式输出
- cliff: 格式化输出
- update-notifier: 「非常不好用,寻找替代品」命令行版本更新提醒
- shelljs: unix 命令的 nodejs 封装
- node-draftlog: 单行动态变化的终端打印
- gauge: 进度条
- node-progress: 进度条
- prettyoutput: 把 JSON 数据按 YAML 风格打印出来
- node-tabtab: Shell 自动补全库
自动补全
- tabtab: 命令行自动补全
REPL / 交互式 CLI
- Mancy: Electron based NodeJS REPL
- nesh: 增强型交互式 shell 框架
- vorpal: 交互式命令行框架
- vantage: 实时交互式 CLI 工具,基于 vorpal 开发
- runkit: 非常酷!在前端直接引用 npm 包编写代码
- ink: 用 React 写法构建交互式 CLI
CLI 参数解析
yargs: 「超难用,不好扩展」命令行参数解析器(复杂版)。支持子命令,多语言,帮助文档等功能- minimist: 命令行参数解析器(极简)
- Inquirer: 命令行交互提示
- Caporal.js: 支持自动补全,自动构建帮助,语法友好的 CLI 框架。上手简单好用。
- oclif: Heroku 出品。比 Caporal.js 支持更多功能。特点是 OOP,Hook,插件体系。概念较多,比较臃肿。
- string-to-argv: 把一个命令字符串分解成数组。对于分离字符串里的命令路径和参数很有用。
- split-cmd: 备选方案
颜色 (Color)
- cli-color: 终端颜色
- strip-ansi: 虽然 cli-color 也有 strip,这个 library 只做一件事,依赖模块较少
- gradient-string: 过渡色
- chalk-animation: 终端颜色动画
颜色
- chromatism: 颜色转换
脚本
- npm-run-all: 用于 npm scripts,并行/顺序执行多个子 script
- husky: git hook
- lint-staged: Run commands on git staged files
打包方案
将 nodejs 项目打包成一个可执行文件
编译
工具集
- debug: debug 工具
- power-assert: 非常强大的 assert 工具,兼容生产环境
- LoDash: 日常开发工具集
- Ramda: 函数式编程工具集
- bluebird: 强大的 Promise 库
- promise-fun: 轮子王造的独立的函数库
- aigle: bluebird 替代方案
- p-state: 查看 promise 状态
- co: 强大的异步处理库
- utility-maker: 定义自己的工具集
- is: 类型判断
- json-parse-helpfulerror: json 解析错误时,给出人类友好的提示
- string-template: 字符串变量拼接
- updeep: 修改深层嵌套的 object 或 array
- immer: 比较优雅的 Immutable.js alternative。基于 Proxy 的特性
- immutable-js: Immutable.js
- safe-touch: 类似 lodash.get 但书写更友好,介绍
- prettier-package-json: 格式化 package.json
debug
- Node.js 调试指南: 必读
- JavaScript Debugging Reference: Chrome DevTools 的 Debug 功能
- ndb: 基于 Chrome DevTools 的增强 Debug 功能
- node-clinic
数据校验
- Joi: 人类友好的校验 Schema
- yup: 同 Joi,备用
- validator.js
- zod: TypeScript-first schema declaration and validation library.
脚手架
- yo: 脚手架工具
测试
- jest: 测试框架,前后端通用,支持 ts、babel 等扩展。
- jest-extended: jest 的断言函数库
- qunit: 备选方案
ava: 淘汰方案,社区支持力度低,不支持 describe 这种嵌套写法
- nyc: 测试覆盖率
- sinon: Stub/Mock/Spie 工具库
- supertest: 测试 http 服务器
- rewire: 改写模块内未暴露的变量
Benchmark
- benchmark.js: Benchmark 框架
- beautify-benchmark: 格式化 benchmark.js 的输出
- Chūhai: 测试驱动的 Benchmark
- matcha: mocha 类似语法的,输出友好的 Benchmark 框架
服务器
- json-server: 快速搭建 HTTP RESTFul API Server
- http-server: 快速搭建 HTTP 服务器,主要用于提供静态文件访问
- serve: alternative
- lowdb: 本地 json 数据库
- micro: 零配置的 HTTP 服务器,非常轻量好用,主要用于实现简单的逻辑
- stoppable: graceful shutdown
- terminus: 封装了 stoppable 和进程信号处理,增加了一些进程退出前的自定义回调和 k8s 健康检查的回调。
- node-death: set callback on SIGINT, SIGQUIT, SIGTERM and uncaughtException.
数据生成/Mock
- faker.js: 制造假数据
- casual: 制造假数据。备选
- Chance: 制造假数据。备选2
- nuysoft/Mock: 制造假数据。备选3
- json-schema-faker: 根据 json schema 生成数据
- nock: HTTP server mocking and expectations library for Node.js
- simple-fake-console
错误处理
- ero.js: 自定义 Error 类
- pretty-error: 打印人类友好的错误堆栈
- koajs/onerror: 响应错误页面
- node-retry: 重试
- p-retry: 异步版本的重试
- longjohn: 跟踪完整的调用堆栈
配置
- node-config: 多环境应用层配置
- dotenv: 读取
.env
文件设置环境变量。- 首先要了解它的使用场景
- cosmiconfig: Find and load configuration from a package.json property, rc file, or CommonJS module
- find-up: 向上递归查找文件
日志
- signale: 高度可扩展的 log 库
- winston: 很灵活的日志库
- 注意:issues/1364,日志在某些情况下不会触发,因为它是异步处理日志的,不过有对应解决方案。
进程
- nodemon: 守护进程。本地开发用,文件改动时自动重启 node 应用
- PM2: 进程管理。生产环境用
- pandora: Node.js 应用监控管理器,自带 Metrics,请求链路跟踪,可扩展。
- execa: 优化 child_process 模块
文件
- node-fs-extra: 封装了 fs 模块的 API。支持 Promise,增加了其他的函数。
- npm/ini:
ini
文件解析器 - node-properties-parser:
.properties
文件解析器 - js-yaml:
YAML
文件解析器 - globby: 更方便 glob 库,基于 fast-glob
- picomatch: Blazing fast and accurate glob matcher written JavaScript, with no dependencies and full support for standard and extended Bash glob features, including braces, extglobs, POSIX brackets, and regular expressions.
- node-ignore: .gitignore
- vinyl: 用 JS 描述文件
- chokidar: 监听文件变化
- jschardet: Character encoding auto-detection in JavaScript (port of python’s chardet)
模板
- assemble: 模板文件搭建工具
- consolidate: 模板引擎抽象层
- templates: 模板引擎抽象层
网络
- address: 获取本机的网络地址(ipv4/ipv6/mac/dns)
- node-netmask: 解析 CIDR
- detect-port: 获取可用端口
Proxy
- node-http-proxy: HTTP programmable proxying library that supports websockets.
文档
- documentation.js: documentation for modern JavaScript. 基于 JSDoc 渲染文档,支持很多酷炫的特性,支持输出 HTML/Markdown/JSON
- esdoc: JSDoc 当前不支持 ES6 语法,或许可以尝试使用这个
- all-contributors: 贡献统计
- verb: 文档生成器的生成器
- mos: 自动生成 Markdown 内嵌代码片段。插件化
时间
- moment: moment 已退出历史舞台
- luxon: 「待评价」
- dayjs: 「待评价」
- date-fns: It’s like Lodash for dates. 模块化的函数库。文档写得不够友好
- ms
- pretty-ms
- node-microtime
单位换算
- bytes: b/kb/mb/gb/tb 转换
工程化
- module-alias: require 避免使用相对路径。只能用于应用开发,不能用于模块或框架开发。
- 还有很多其他方法,详见 https://gist.github.com/branneman/8048520
- tapable: 实现插件机制
- lerna: monorepo 项目管理工具,简单易上手。已停止维护。
- nx: 前端 monorepo 项目管理工具,支持插件,功能丰富,过于复杂,不容易上手。复杂的依赖版本绑定是个问题。
- loud-rejection: 响应 unhandledRejection 和 rejectionHandled 事件。命令行开发用
- hard-rejection: 响应 unhandledRejection 事件,服务端开发用
自动化
ORM
没有好用的 ORM
AST
- recast: JavaScript syntax tree transformer, nondestructive pretty-printer, and automatic source map generator
- jscodeshift: 改写 js 代码
- js-codemod: a collection of codemod scripts for use with JSCodeshift
Code Lint
- eslint: 规则式代码校验器
- eslint-plugin-import
- eslint-import-resolver-alias
- eslint-plugin-jsdoc
- eslint-plugin-filenames: Eslint plugin to check filenames.
- eslint-config-adoyle-style
Code Format
Code Check
- license-checker: Check NPM package licenses
- cz-cli: 规范 git commit message
Profiling
- source-map-explorer: 根据 sourcemap 分析代码占用空间
- plato: 代码复杂度分析工具
HTTP
- urijs: uri 解析处理
- axios: HTTP 请求客户端,参数配置化,API 设计简洁合理。
- 但是 POST 请求处理有个缺点: https://github.com/mzabriskie/axios/issues/362
- ky: 前端备选方案
- got: 后端备选方案
- superagent: HTTP 请求客户端。特点是支持插件,缺点是文档写得不够好。
安全
- nsp: node 代码安全检查
Node 客户端
- ioredis: redis client
框架
Stream
- through2: Tiny wrapper around Node streams2 Transform to avoid explicit subclassing noise
- concat-stream: writable stream that concatenates strings or data and calls a callback with the result
- multipipe: A better
Stream.pipe
that creates duplex streams and lets you handle errors in one place. - node-streamifier: Converts a Buffer/String to a readable stream.
压缩/解压
- node-archiver: A streaming interface for archive generation
- compressing: 支持 stream
- tar-stream: compressing 依赖 tar-stream
语法分析
- esprima: ECMAScript parsing infrastructure for multipurpose analysis
- babylon: 同 esprima
- acorn: 同 esprima,性能或许更好
- shift: 同 esprima
- astexplorer: AST 浏览器
- estools: ECMAScript Tooling
- escodegen: 根据 AST 生成代码
- pegjs: Parser generator for JavaScript
evil
- notevil: 结合 AST 的 evil
- static-eval: 结合 AST 的 evil。需要自己传入 AST
SSL
- openssl-self-signed-certificate: 别人已做好的 SSL 证书,辅助快速开发
依赖管理
- verdaccio: NPM 私有仓库
- cnpmjs.org: 备用方案
- 包管理器
- yarn
- yarn-completion: bash 自动补全
- pnpm
- yarn
- np: A better
npm publish
- npm-force-resolutions: 让 NPM 支持 YARN 的 resolutions 机制
序列化
- fast-json-stringify: 比原生的
JSON.stringify()
快 - serialize-javascript: 序列化 JS,支持函数、正则表达式
- protobuf.js: 动态加载的 Protobuf JS SDK
- google-protobuf: 静态加载的 Protobuf JS SDK
RPC
- grpc-node
- grpc-tools 用来编译 service 代码
其他
- sindresorhus/awesome-nodejs: 很有用
- none: 空。在特殊场景可以用到
- cheerio: 服务端运行的 jQuery,解析 DOM
- jsdiff: diff library
- franc: 自然语言判断
- node-temp: 产生临时目录文件
- jsdom: 在 nodejs 使用符合 WHATWG 和 HTML 标准的 JS DOM
- open: 很方便的打开网站,文件,或可执行文件的命令
- fast-deep-equal
- @kubernetes/client-node
- libsys: 系统调用 (syscall)
- import-modules: 加载指定目录下的所有文件
- import-all.macro: 针对 babel + import 的方案
- esm: 在 CJS 里加载 ESM
- https://node.green/ : NodeJS 各版本的 ES Feature 支持列表
- link-check
- markdown-link-check
我关注的人/组
- https://github.com/sindresorhus?utf8=%E2%9C%93&tab=repositories&q=&type=source
- https://github.com/DJCordhose?utf8=%E2%9C%93&tab=repositories&q=&type=source
- https://github.com/substack?utf8=%E2%9C%93&tab=repositories&q=&type=source
-
https://github.com/isaacs?utf8=%E2%9C%93&tab=repositories&q=&type=source
- https://github.com/node-modules