译者按: 作者将自己常用的JavaScript模块分享给大家。
为了保证可读性,本文采用意译而非直译。另外,本文版权归原作者所有,翻译仅用于学习。
本文介绍了我在日常工作中一直使用的JavaScript模块,包括NodeJS和前端JavaScript。当然,这篇文章会有强烈的个人主观性。我推荐的模块可能会有遗漏,并且不会包含任何特定用途的模块。比如有一些推荐的模块确实很酷,但是不一定实用。
命令行工具
我们先来介绍命令行工具。
np 一个更好的发布npm模块的工具
如果你是一个npm包的作者,我强烈推荐你使用np,它使得版本控制、添加git release tag,和发布到npm一气呵成。特别是如果你拥有多个npm模块的时候。同时我也推荐Zeit发布的release也是一个很不错的选择。
yarn 一个比npm更好的包管理工具
尽管np v5已经比之前的版本快了许多,从速度和一致性的角度,我依然更加倾向于在本地开发中使用yarn来管理。不管哪种方式,底层都是在和同一个npm模块的数据库交互,所以我想他两之间没有一个绝对的胜者。你选择最适合你自己的就好。
作为一个2018年的JS开发者,我建议你将两者都熟悉。
prettier 一个公认的代码美化工具
Prettier通过分析你的代码然后重新排版来保证代码格式的一致性。我喜欢eslint并一直使用JavaScript的标准格式风格,但是prettier和gofmt这种自动化格式美化带来的吸引力无法拒绝。
作为开发者,我们花了太多的时间和精力去维护代码格式,实在是浪费。使用prettier这类工具可以让我们从这些琐事中解脱,专注于代码。
now 超级简单的部署工具
从简洁性、稳定性和拥有的特性上来说,Now绝对是现在最好的免费的部署系统。不管是静态还是动态部署、甚至要扩展到多个服务器,都可以很好的为你服务。而且,最重要的一点,就算你扩展到多服务器,还是免费的!
Now对Node.js以及JS支撑的网页应用都支持很好。我强烈推荐你们也看看Zeit推出的其它服务。
asciinema 免费录制Terminal的工具
你可以使用asciinema来录制Terminal操作。
Promise
pify
我发现pify是最好的模块,用来将回调函数风格的函数转为Promise。它很轻巧,而且有连util.promisify都没有的自动方法绑定功能。
p-map
p-map用来设置并发地执行promises。考虑到计算资源和带宽,你肯定不想没有限制地完全并发所有的promise,p-map可以设置并发数量。我想你完全可以用p-map来替代Promise.all(...)。
p-retry
通常,我会使用p-retry将所有的HTTP请求和外部服务包裹起来,来进一步增强代码的健壮性。p-retry可以配置retry的次数。配合p-map,你可以并发执行大量的请求而且不用担心偶尔遇到网络错误、服务器超时和Socket中断等等。
p-timeout
p-timeout也是一个必不可少的模块。
p-cache/p-memoize
通过LRU缓存来记住async函数的结果。
这些Promise工具函数库让我想起了关于构建健壮微服务的文章,每一个外部依赖都可以包含一个统一的接口包括retry, timeout, caching,circuit breakers, 回滚等等。
内容抓取
cheerio
如果你想处理原生的HTML,Cheerio是一个很棒的工具。它提供了像jQuery一样的语法来访问和处理HTML文档。Cheerio配合request-promise-native来获取网页最佳。
puppeteer
和cheerio不同,puppeteer是一个用来自动化运行headless chrome instance的工具。它可以用来:1. 生成页面的截图或则PDF;2. 爬取单页面应用内容并将其渲染(SSR);3. 自动化表单填写、UI测试、输入等等。它将逐渐取代像PhantomJS这样的技术。
Node.js
dotenv-safe
dotenv-safe是dotenv模块的扩展,从.env
加载本地环境变量,并确保它们都存在。通过配置.env.example
文件来制定哪些变量必须要配置。
request和request-promise-native
执行HTTP请求是一个很常见的操作,我选择request-promise-native模块。该模块将request模块拓展成Promise。95%的情况下,我使用await来处理HTTP请求,只有5%的时间我需要直接用request来处理返回数据。
为了健壮性,我会配合p-retry,p-timeout和p-cache来使用。
另外我补充一下, got是一个新的候选项,虽然我还没怎么使用很多。
consolidate
Consolidate用来处理后端模板化很有用(邮件、推特、原生HTML等等)。我通常使用handlebars来作为模板引擎,不过我会配合使用consolidate。因为它有更加简洁和UI之的界面,不管你在底层使用何种引擎都可以配合使用。
execa
当你需要执行shell脚本或则子进程的时候很有用。
fs-extra
我几乎不使用fs模块了,fs-extra为fs模块附加了不少方法并且支持Promise。
Math
D3 (Data-Driven Documents) 是一个流行的前端数据可视化库,它同时也包含了很多常见的数学操作的库。我经常用到那些库,接下来推荐给你们。
d3-random 生成随机数
当你觉得Math.ramdom不够用的时候,不妨试试d3-random。它支持用不同的分布来随机,比如均匀分布、正太分布和指数分布。
Easing 是一种通过扭曲时间来控制动画中的表现形式的方法。通常被用来 slow-in, slow-out。通过对时间的缓动,animated transitions 会更平滑且运动过程也更合理。
这个库提供了多种做插值的方法来对数字、颜色、字符串、数组、对象等进行插值。
Testing
Ava是一个很棒的JS测试器,请不要惊讶我又使用了Sindre Sorhus创造的另一个工具。它包含了mocha, tape, chai以及其他工具的优点。
Nock 是前端常用来模拟http请求响应的工具,它基于nodejs的原生http模块。
Sinon.js是一个非常有用的测试辅助工具,在为Node程序写测试时可能可以派上用场。我建议每一个Node开发者都应该将它加入到自己的工具库中。
关于Fundebug
Fundebug专注于JavaScript、微信小程序、微信小游戏、支付宝小程序、React Native、Node.js和Java实时BUG监控。 自从2016年双十一正式上线,Fundebug累计处理了9亿+错误事件,得到了Google、360、金山软件、百姓网等众多知名用户的认可。欢迎免费试用!
版权声明
转载时请注明作者Fundebug以及本文地址:
https://blog.fundebug.com/2018/12/18/javascript-modules-worth-using/