[译]635000 个 npm 包中我应该用哪个

发布时间:2019-08-12 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了[译]635000 个 npm 包中我应该用哪个脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。

图片描述

原文:Which of the 635000 npm modules do I choose? - Corey Cleary

原创翻译,发表于个人博客He Xing's waking life

如有谬误,恳请指正

如果您曾在 Node 或 JavaScript 前端开发中投入过时间和精力,那么您就知道 npm 中有数以十万计的模块可供您选择

开发者不停的寻求帮助/抱怨:

"对模块的选择困难正在蚕食我们"
"X 模块和 Y 模块有什么区别?哪一个更好?"
"npm 很棒,但是这些模块可能在一年载后失效,取决于模块维护者是否积极"

通常在提出这样的问题时,您会得到十个不同的答案。每个人都会给您推荐自己喜欢的模块,接下来就演变成争论哪一个是最好的。

选择 npm 模块时很容易面临纸上谈兵。选择太多,而新来者在鼓吹“快上车”,为您的项目选择合适的 npm 模块可能是有难度的。而且这些模块中有许多做类似(或相同)的事情,这也没有帮助。

与其浪费时间在 GOOGLE 上搜索,在 npmjs.org 上搜索,或者浪费更多的时间不构建您的项目,还不如搞清楚什么时候该选择哪些模块。

精选清单

为了帮助解决这个问题,您将在下面找到针对最常见问题类型(即 web 框架、模板、身份认证等)的 npm 模块列表,以及何时使用这些模块。

这里有一些注意事项:您可能熟悉其中一些模块,甚至许多模块,但是有时候您面对的是您还没有接触到的技栈(可能是身份验证或 Websocket 之类的东西),您需要知道有哪些备选模块可以完成这项工作。您可能有您认为更好的模块,或者可能有一个用例/需求没有包含在这里。我没有列出相同类别的 10 个不同模块,而是缩小了范围,这样您就可以避免分析瘫痪的陷阱。如果您认为自己的用例未被涵盖,请务必自行研究解决。本清单的目的在于让您能更快地启动和运行。

这些模块的选择依据如下:

  • 它们完成工作的能力如何
  • 社区规模(对于支持/故障排除很重要
  • 积极维护

如果您发现自己仍然没有足够的信息做出决定,我建议使用slant.conodejs.libhunt.com来帮助进行比较。

注意:为了保持范围的合理性,这些模块都考虑到了服务器端。它们中的一些可以同时在客户机或服务器上使用,但我的原则是“服务器优先”。

HTTP requests (HTTP 请求)

  • Request:

    • 当您需要基于回调的 HTTP 请求时可选择它,例如从一个 REST 服务连接到另一个。
  • Axios

    • 当您需要基于 Promise的 HTTP 请求时可选择它
    • 注意:您可以使用request-promise,但是 axios 的依赖更少,并且基于原生 Promises

Web frameworks (Web 框架)

  • Express:

    • 如果您想为 API、网站或单页应用程序使用轻量级 web 框架,请使用它
    • 您不介意使用回调作为默认的异步处理方式
    • 使用该框架的模块生态极为繁荣
    • 您需要一个支持和故障排除的大型社区
  • Koa:

    • 当您想要一个比 ExPress 更简洁的框架时使用
    • Koa 更像是一个中间件层,它不提供模板或开箱即用的路由,因此更适合 API 开发
    • 要想支持开箱即用,您需要 async / await
  • Hapi

    • 如果您想要一个比 ExPRess 或 Koa 更“自带电池”(译者注:原文"batteries"意为您不必重复造轮子,大多数您需要的功能都能通过(已有)库完成。您能导入并使用它们。)的框架,但又不像 Sails 那么多,那就使用它
  • Sails

    • 当您需要像 Rails 这样的东西时,请使用它,它具有几乎所有功能(但是根据您的应用程序可能不需要那么多)

Validation (前端验证)

  • Ajv

    • 在需要验证 JSON 时使用(比如来自 web 请求)
    • 您希望与应用程序的其他非 JS 部分共享这些验证规则(因为它是 JSON,所以您可以这样做)
  • Joi

    • 在需要验证输入时使用,并且喜欢链式调用的风格(译者注:代码见下方),而不是在 JSON 中定义验证规则
    • 您正在使用 Hapi(Hapi 自带 Joi)