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

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

“对模块的选择困难正在蚕食我们”

“X 模块和 Y 模块有什么区别?哪一个更好?”

“npm 很棒,但是这些模块可能在一年半载后失效,取决于模块维护者是否积极”

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

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

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

精选清单

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

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

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

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

如果您发现自己仍然没有足够的信息做出决定,我建议使用slant.co和nodejs.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)
const schema = joi.object().keys({id: joi.string().guid().required(),username: joi.string().alphanum().min(8).required()
});

Authentication (身份认证)

  • Passport:
  • 当您需要为您的网站或 API 使用身份验证中间件时使用
  • 您希望能够在多种身份验证类型(Oauth,Facebook 等)之间进行选择
  • 您需要管理会话

Asynchronous (异步)

  • Async (library):
  • 当您需要使用旧版本的 Node,而该版本的 Node 支持只支持回调而不支持 Promises 时
  • ES6 原生 promises (原生 JS, 非 npm):
  • 在使用大于 0.12 的 Node 版本时使用
  • 另一件需要考虑的事情是您的团队对 Promises 的接受程度。在 2018 年,大多数开发人员应该没问题了
  • async / await(原生 JS,非 npm)
  • 当您为了逃脱“回调地狱”却又误闯“Promise 地狱”
  • 您有很多来自 Promises 的.then 和.catch

Database (数据库)

下面是数据库驱动程序、ORM 和查询生成器的组合。在使用 ORM 之前,我强烈建议您首先确保需要使用它。当您可以只使用原始 SQL 或查询生成器时,它们通常会添加另一层抽象,这层抽象不一定能够提供足够的回报。

  • mysql, node-postgres:
  • 当您不需要完整的 ORM,而是需要使用原始 SQL 查询数据库时使用(这些是驱动程序)
  • node-mongodb-native:
  • 当您不需要一个完整的 ORM,而是要直接查询 MongoDB 时使用
  • Mongoose:
  • 当您希望为 MongoDB 使用 ORM 时使用
  • Knex:
  • 当您不需要一个完整的 ORM 解决方案,而只是需要一些工具使编写查询代码更容易,可以使用它
  • Knex 是一个生成 SQL 的查询生成器
  • 您拥有 Postgres、MSSQL、MySQL、MariaDB、SQLite3、Oracle 或 Amazon Redshift 数据库
  • Objection.js:
  • 您希望 ORM 支持 Knex 支持的所有东西,不使用查询 DSL(因此您编写的代码更接近原始 SQL),具有基于 Promise 的 API 和良好的文档

Process management (进程管理)

这个网址提供了部分进程管理器的横向比较http://strong-pm.io/compare/。注意:它们还包括了 StrongLoop Process Manager,这是一个不错的工具,但是有点笨重。我建议您在决定使用 StrongLoop 之前先查看一下解决方案。

  • PM2:
  • 当您希望进程管理器在服务崩溃时处理重新启动,并允许您控制集群时使用
  • 注意:PM2 所依据的 AGPL 许可证存在一些潜在的违规行为。这里有一些讨论。我的看法是它最有可能被使用。但如果您有任何问题,请咨询您的法律部门,因为我不是律师。
  • forever:
  • 当您需要进程管理器来处理在服务崩溃时重新启动服务时使用
  • 您的部署规模较小(pm2 及其集群支持用于更大规模的部署)。如果您只有少量的服务/进程,那么您可能可以使用它
  • nodemon:
  • 当您希望监视应用程序中的任何代码更改时使用,并在本地开发时自动重启服务器
  • 非常适合用于开发!

Web Sockets

对于 Web Sockets,我只是推荐 primus,而不是列出一个列表。它支持所有主要的 Web Sockets 实现,并且维护者十分积极。如果您需要换成其他的库,您可以通过一行代码更改轻松地更换。

  • Primus:
  • 当您需要 Web Sockets 但又不想被束缚在特定的 Web Sockets 实现时使用

API documentation (API 文档)

  • Swagger-node:
  • 当您需要记录 REST API 并能够针对端点测试请求时使用

Utilities/misc (通用工具/杂项)

  • Lodash:
  • 当您需要 JS 实用程序库时使用
  • 您使用了大量的 OOP(面向对象编程)
  • Ramda:
  • 当您希望使用函数式的编程风格时,请使用
  • 您想要像 lodash 这样的东西,但是在函数式编程范式中
  • Moment:
  • 在需要解析、验证、操作和显示日期/时间时使用
  • UUID:
  • 当您需要随机的、唯一的、难以破解的 id 时使用
  • NVM:
  • 当您希望能够在环境中安装的多个 Node 版本之间切换时使用
  • Fs-extra:
  • 当您需要能够递归地使用mkdirrm -rf和 Node 中缺少的其他文件系统级功能时,请使用
  • Nodemailer:
  • 当您需要从 Node 发送电子邮件时使用
  • Dotenv:
  • 当您需要将.env 文件中的环境变量加载到 process.env 时使用

CLI (命令行界面)

  • Commander:
  • 当您要构建一个 CLI 程序时使用,该程序将所有参数作为命令行上的标志
  • Inquirer:
  • 当您想要构建一个按顺序获取选项的“交互式”CLI 程序时使用(类似于运行 npm init 时的方式,它会询问您生成 package.json 文件的一系列问题)

Logging (日志)

  • Winston:
  • 当您需要一个日志库并需要不同的日志输出格式时使用
  • Bunyan:
  • 当您需要一个日志库,并以 JSON 作为唯一日志输出格式时使用
  • 您希望为不同的组件、请求或函数使用不同的日志记录器(也就是说,这些日志记录器可能以不同的方式解析事件)
  • Morgan:
  • 当您使用 Express 并且想要记录 HTTP 请求时使用
  • 注意:这将与 Winston 或 Bunyan 一起使用。由于它是中间件,它知道如何处理请求并记录它,但不处理 Winston 和 Bunyan 所做的日志输出的传输。

Templating (前端模板)

  • Pug (原 Jade):
  • 当您需要服务器端模板引擎时,请使用该引擎,该引擎易于阅读,并且支持开箱即用的子组件代码块
  • 您只需要输出 HTML
  • EJS:
  • 当您需要一个服务器端模板引擎,该引擎完全使用 JS,并且允许空格缩进(Pug 不允许)
  • 注意:不支持异步 JS 函数

Testing (测试)

  • Mocha:
  • 在需要编写和运行单元测试时使用
  • Chai:
  • 当您需要证明您的单元测试中的断言时,请使用
  • 注意:这将与 Mocha 一起使用
  • Chai-as-promised:
  • 当您希望在 promises 上证明您的断言时,而不是将断言放在 then 或 catch 中使用
  • Sinon:
  • 当您需要用于测试的 mock 库时使用

Tooling (开发工具)

  • ESdoc:
  • 当您想从您的代码中生成 API 文档,并且您正在使用最新的 JS 版本时,请使用
  • 默认情况下支持当前版本的 JS(支持 class),因此如果在代码中使用 prototypes,请使用 JSdoc
  • JSdoc:
  • 当您需要支持 ES6 的代码 API 文档生成器时使用
  • 支持classes 和 prototypes
  • ESlint:
  • 当您需要一个 linter 来自动查找(和修复)代码中的语法和代码格式问题时使用(译者注:可参考本人博文vscode + vetur + eslint + prettier 实现团队代码风格统一)

Debugging (调试)

现在,原生 Node 调试现在已经够用了,我的建议是直接使用它。几年前,引入一些 npm 模块是很有帮助的,而且您可能有一个特定的用例需要一个 npm 模块,但是现在已经有了足够的本地支持,如果您对调试没有任何太疯狂要求,请务必忽略掉额外的依赖项。

结论

挑选模块可能很难,但您只需要一些方法点来解决它。当您正在为如何抉择浪费时间,或者甚至不知道从哪里开始时,请使用本指南来帮助您。

前端npm 安装包,精选大全集合相关推荐

  1. npm 安装包失败 --- 清除npm缓存

    今天同事给了一个webpack的项目,我拿过来,npm  install 突然出现报错了,并且报了一个奇怪的错误, 如下所示, Unexpected end of JSON input while p ...

  2. Adobe Reader 离线安装包下载 大全

    Adobe Reader 离线安装包下载 大全 https://supportdownloads.adobe.com/product.jsp?product=10&platform=Windo ...

  3. 微信小程序使用npm安装包

    小程序现在支持直接通过npm安装包了,点击这里了解更多. 记录一下我自己的安装步骤及安装过程中遇到的一些问题.希望能够帮助到正在阅读此篇文章的你~ 我就直接通过在项目根目录安装miniprogram- ...

  4. 解决npm安装包安装不上的几个方法

    有时候前端安装npm install 安装包总是安装不上,以下是几种解决办法: 1.查看下安装源 npm config get registry 如果不是国内的源通过下面的方式设置: npm conf ...

  5. 使用npm安装包本地快速启动前端项目方法

    综述:很好的一个快速启动服务的方法 1.步骤说明 npm i -g serve 2.在powershell中cd到希望启动的项目目录下 3.输入以下命令 serve 4.访问窗口显示的链接即可 5.如 ...

  6. npm安装包总是失败了的,请参考

    镜像使用方法 (三种办法任意一种都能解决问题,建议使用第三种,将配置写死,下次用的时候配置还在): 1.通过config命令 npm config set registry https://regis ...

  7. npm 安装包报错 rollbackFailedOptional

    npm config rm proxy npm config rm https-proxy 然后使用npm install -g cnpm --registry=https://registry.np ...

  8. npm安装包报错,清除一下缓存

    npm指令清除npm缓存 npm cache clean --force

  9. npm安装包报错问题及解决

    npm ERR! code EAI_AGAIN 如下图: 这个错误网上有多种解释,也有多种解决方法. 我这里的解决方法是修改了npm的源. 原来使用的是 http://mirrors.cloud.te ...

最新文章

  1. 有一说一,AI 到底会不会伤害人类?
  2. Android onMeasure方法介绍
  3. python center函数_python pandas移动窗口函数rolling的用法
  4. iOS 获取本地图片URL
  5. php100例代码教程,php实例代码_php用户登录实例教程代码
  6. matlab如何创建table,MATLAB table数据结构 首篇
  7. mysql eval,mysql中是否有类似于eval的写法的,答案在这里
  8. java hbase 批量查询数据_HBase根据Rowkey批量查询数据JAVA API(一次查多条,返回多个记录)...
  9. hexo github搭建博客常用的命令
  10. c语言怎么写贪吃蛇,刚学C语言,想写一个贪吃蛇的代码
  11. linux线程计算,有关Linux进程与线程数目计算的问题
  12. Android自定义控件之TextView
  13. 小器件,大作用-光纤环形器在光纤传输中的应用
  14. 第十七章 Spark开发调优原则详述(图解+代码实战)
  15. 前端js正则验证大全(一套完整的正则验证解决方案)@莫成尘
  16. win10禁用计算机维护,想要电脑不卡,你必须知道win10必须禁用的服务有哪些
  17. PHP RGB图片模式转换CMYK模式图片
  18. 基于滴滴云搭建安全稳定的 Memcached 服务器
  19. 飞鱼游戏校招美术上岸指南?看这篇就够
  20. vue+element封装一个填写和校验ip地址的组件

热门文章

  1. Struts1.x系列教程(5):HTML标签库
  2. 注册窗口类RegisterClassEx   AfxRegisterWndClass
  3. ORU-10027: buffer overflow, limit of 10000 bytes
  4. WordCount案例
  5. python顺序执行多个py文件的方法
  6. 了解java虚拟机—垃圾回收算法(5)
  7. dubbo+zookeeper坑坑坑
  8. Linux系统与性能监控
  9. android数据存储方式(三)----Files
  10. U-Boot的LDS文件分析