本文收集了前端JS开发和NodeJS开发中的一些优秀的库和工具。
1. 命令行工具
np - 更好的
npm publish
如果你是一个npm作者,强烈推荐使用np模块,它能为你轻而易举地解决更新版本、添加git发布tag和发布代码到npm,特别是当你有很多npm模块要维护的时候。
yarn - 更好的包管理工具,同时兼容npm
虽然npm v5已经比上一个版本速度提升很多,但是个人感觉在本地开发中yarn仍然以速度和稳定性取胜。但是无论用哪个工具,你都在使用同一个npm包的数据,究竟两者孰优孰劣并没有定论,所以挑选哪个工具还是要看你的项目需求。
prettier - 强烈推荐的一款代码格式化工具
Prettier通过代码解析强制要求代码风格保持一致,然后用内置的规则来重新输出样式,并通过必要的代码封装来限制代码最大行数。
now
Now毫无疑问是迄今为止最好的免费部署系统,以简单、稳定和功能多著称。它非常适合测试静态和动态部署,并且很方便扩充服务器。
asciinema - 录制高质量的终端(terminal)信息
一款录制终端 & 代码的神器,从此分享代码告别截屏!
2. Promise
这一小节值得专门拿出来写一篇文章,尤其现在async/await
已经成为JS的并发编程的标准。这里收集了一些Node端非常有用的Promise相关库:
pify - 转换callback形式为promise形式
目前有很多方法都可以把过时的callback-style的代码转成promise-style,但是pify可能是其中最好的解决方案。它体积很小,同时有util.promisify(node本地接口)没有的一些细节:比如方法自动绑定等。
p-map - 给并行设置限制数
并行虽然很好,但是大多时候出于带宽或者计算资源的考虑需要设置一个对并行的限制,这是p-map擅长的领域。它可以取代不支持限制并行的Promise.all()
方法。
p-retry - 给promise请求添加重新请求机制
通常在发送http请求或者外部服务调用的时候可以用p-retry在外部封装一层,提高请求的健壮性。
p-timeout - 为promise请求添加超时处理
为promise请求指定一个超时时间,然后添加超时处理方案
3. 数据抓取
有很多很棒的抓取工具,有一些直接操作HTML,像cheerio,还有一个些可以模拟一个完整的浏览器环境像puppeteer。具体使用哪种工具还是要依赖使用场景。
cheerio - 快速、灵活和实现核心jQuery Api,服务于服务端
当你想操作HTML时,Cheerio非常适合快速 & 肮脏的web数据抓取。它提供了健壮的类jQuery语法,用来遍历和处理HTML文档。在抓取远程HTML文档时,Cheerio和下面要介绍的require-promise-native非常适合搭配一起使用。
puppeteer - Headless Chrome Node API
和cheerio不同,puppeteer是在headless Chrome(没有UI的Chrome,供服务端自动化测试用)外包装的一层高级API,通过开发工具协议控制headless Chrome或者Chromium,它也可以通过配置来使用全部Chrome或者Chromius的功能。
4. Node.js
dotenv-safe - 从
.env
里加载环境变量
这个模块扩展了非常流行的库dotenv,通过添加一个.env.example
文件强制保证预期环境变量的存在。与原始版本一样,它为Node提供了快速的、安全的和健壮的环境变量。
request和request-promise-native - 简单的HTTP请求客户端
发送HTTP请求是一个极其常用的操作,常用的库是request-promise-native,它封装了request库,并提供了本地ES6的Promise
支持。
consolidate - Node的模板引擎整合库
Consolidate可以非常漂亮的处理任何后端模板(email, html等等)。它提供了简单、稳定的各种模板引擎接口。
execa - 更好的
child_process
在需要执行shell命令或者spawn一个子进程时极其有用
fs-extra - 更好的
fs
,拥有更多方法和Promise支持
5. 数学
d3-random - 生成各种分布的随机数
d3-ease - 产生流畅动画的Easing函数
6. 测试
ava - 很棒的JS test runner
Ava是比较新的JS单元测试工具,它具有众多JS测试库(Mocha、tape、chai和其他库)的优点,默认情况下采用并行运行的方式。
nock - HTTP模拟请求
Nock是一个很棒的测试HTTP请求的库。如果你的Node模块需要发送HTTP请求,并且你想要对这个请求做单元测试,那么nock是你的不二之选。