NodeJS 开发工具栈

⬅︎ 返回上层

TOC

Node 环境

  • nrm: NPM Registry Manager
  • fnm: Node Version Manager
    • nvm: 备用方案
    • n: 备用方案
  • 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.

通知

事件/Event Emitter

Scheduler

  • bottleneck: Job scheduler and rate limiter, supports Clustering

Hash

随机数

  • nanoid: 不可排序,时间无关。碰撞概率低,可自定义长度,自定义字符表,URL 友好,多语言支持
  • ulid: 128 位长度,按时间排序,URL 友好,自定义字符表,多语言支持

CLI

自动补全

  • tabtab: 命令行自动补全

REPL / 交互式 CLI

  • Mancy: Electron based NodeJS REPL
  • nesh: 增强型交互式 shell 框架
  • vorpal: 交互式命令行框架
  • vantage: 实时交互式 CLI 工具,基于 vorpal 开发
  • runkit: 非常酷!在前端直接引用 npm 包编写代码
  • ink: 用 React 写法构建交互式 CLI

CLI 参数解析

  • yargs: 「超难用,不好扩展」命令行参数解析器(复杂版)。支持子命令,多语言,帮助文档等功能
  • minimist: 命令行参数解析器(极简)
  • Inquirer: 命令行交互提示
    • Enquirer: 类似 Inquirer,UI 交互更丰富
    • qoa: 备选方案
  • Caporal.js: 支持自动补全,自动构建帮助,语法友好的 CLI 框架。上手简单好用。
  • oclif: Heroku 出品。比 Caporal.js 支持更多功能。特点是 OOP,Hook,插件体系。概念较多,比较臃肿。
  • string-to-argv: 把一个命令字符串分解成数组。对于分离字符串里的命令路径和参数很有用。

颜色 (Color)

颜色

脚本

打包方案

  • pkg: 将 node 脚本编译成可执行二进制文件,脱离 node 依赖
  • enclose: pkg 的前身,都是由 igorklopov 开发的,记录以作纪念
  • nexe: 另一套打包成可执行程序的方案
  • node-packer: 又一套打包成可执行程序的方案

方案比较

编译

工具集

debug

数据校验

  • 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

服务器

  • json-server: 快速搭建 HTTP RESTFul API Server
  • http-server: 快速搭建 HTTP 服务器,主要用于提供静态文件访问
  • lowdb: 本地 json 数据库
  • micro: 零配置的 HTTP 服务器,非常轻量好用,主要用于实现简单的逻辑
  • stoppable: graceful shutdown
  • terminus: 封装了 stoppable 和进程信号处理,增加了一些进程退出前的自定义回调和 k8s 健康检查的回调。
  • node-death: set callback on SIGINT, SIGQUIT, SIGTERM and uncaughtException.

数据生成/Mock

错误处理

配置

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

模板

网络

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 内嵌代码片段。插件化

时间

单位换算

  • bytes: b/kb/mb/gb/tb 转换

工程化

  • module-alias: require 避免使用相对路径。只能用于应用开发,不能用于模块或框架开发。
  • 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

Code Format

Code Check

Profiling

HTTP

安全

  • nsp: node 代码安全检查

Node 客户端

框架

  • koa: http 框架
  • hapi: http 框架。备选
  • meteor: 实时数据框架

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.

压缩/解压

语法分析

evil

SSL

依赖管理

序列化

RPC

  • grpc-node
    • grpc-tools 用来编译 service 代码

其他

我关注的人/组