2021 年最值得了解的 Node.js 工具(下)

大家好,我是若川,诚邀你加群长期交流。今天分享一篇用得上的 node 库。下篇。链接地址:https://github.com/huaize2020/awesome-nodejs。
上篇是:2021 年最值得了解的 Node.js 工具


前言:前端时间分享了这些node开源工具你值得拥有(上) 主要围绕git、npm、命令行工具、加解密工具、数据校验、文档生成工具等方面。通过现成的轮子来提升我们的开发效率,来解决在不同场景应用中遇到的一些问题


通过阅读 D库的收录,我抽取其中一些应用场景比较多的分类,通过分类涉及的应用场景跟大家分享工具

1.图形处理 ????️

1.1 应用场景1: 如何实现给图片做裁剪、格式转换、旋转变换、滤镜添加等操作

可以使用以下工具:

  • sharp :调整JPEG,PNG,WebP和TIFF格式图像大小的最快模块。

  • jimp :纯JavaScript中的图像处理。

  • gm :GraphicsMagick 和 ImageMagick 封装

  • lwip :不需要ImageMagick的轻量级图像处理器

如下裁剪图所示

啊翔同学:上面提到ImageMagick是个什么鬼?官方介绍:ImageMagick是一套功能强大、稳定而且开源的工具集和开发包,可以用来读、写和处理超过89种基本格式的图片文件,包括流行的TIFF、JPEG、GIF、 PNG、PDF以及PhotoCD等格式。利用ImageMagick,你可以根据web应用程序的需要动态生成图片, 还可以对一个(或一组)图片进行改变大小、旋转、锐化、减色或增加特效等操作

1.2  应用场景2: 如何实现生成二维码和条形码

可以使用以下工具:

  • node-qrcode :二维码和条形码生成器

  • qr-image :二维码生成器

啊乐同学:如果我想解析二维码的话,有没有什么轮子可以用?

你可以使用:

  • jsQR :一个纯javascript的二维码读取库。该库接收原始图像,并将定位、提取和解析其中发现的任何二维码。

1.3  应用场景3: 如何对比图片像素是否一致?

可以使用以下工具:

  • pixelmatch : 最小、最简单、最快的 JavaScript 像素级图像比较库。

  • resemble.js :图片像素对比工具

1.4  应用场景4: 如何检验图片类型?

可以使用以下工具:

  • image-type : 检测Buffer / Uint8Array的图像类型.

2.构建工具 ⛏️

2.1 应用场景1: 构建工具都有哪些?

可以使用以下工具:

  • webpack :打包浏览器的模块和资产。

  • parcel :快速,零配置的Web应用构建工具。

  • esbuild :极快的JavaScript打包压缩工具,不使用 AST

  • rollup :新一代的 ES2015 打包构建工具。

  • grunt :JavaScript任务执行器。

  • gulp :流式快速构建系统,支持代码而不是配置。

  • snowpack :是一个相对轻量的 bundless 方案

2.2 应用场景2:支持esm的构建工具有哪些?

可以使用以下工具:

  • vite :新一代前端构建工具。

  • snowpack :由ESM支持的前端构建工具。即时,轻量级,无捆绑开发

????‍  啊开童鞋:什么是Bundleless

Bundleless 模式是利用浏览器能够自主加载的特性,通过跳过打包环节,使得我们在项目启动时可以直接获取到极快的启动速度,而在本地更新时只需要重新编译单个文件


3.缓存  ????

3.1 应用场景1: 基于LRU缓存工具算法有哪些?

????‍ 啊乐童鞋:LRU缓存是啥?

LRU 全称叫Least Recently Used,也叫最近最少使用,是一种缓存淘汰算法。核心是内容是如果数据最近被访问过,那么将来被访问的几率也更高,相如果是很久都没用过的数据会优先对其删除,常用于优化缓存查询性能,包括我们使用的框架vue中的keep-alive也是基于该算法开发的

  • lru-cache :最近最少使用的缓存(LRU)实现。

  • hashlru :更轻量更快的LRU算法。

  • ylru :基于hashlru添加过期时间,允许空值。

3.2 应用场景2: 基于Node的缓存工具有哪些?

  • node-cache :Node.js内存缓存模块。

  • node-cache-manager :Node.js Cache模块。

4.最小化 ????

应用的性能优化,我们会想到js、html、css的文件的压缩,使得其文件最小化,那么有什么轮子可以直接使用?

4.1 应用场景1: js的文件压缩工具有哪些?

  • uglify-js: JavaScript压缩工具。

????‍???? 啊乐童鞋:我记得之前好像有个webpack插件叫uglifyjs-webpack-plugin,跟你说的这个有什么关系?

uglifyjs-webpack-plugin就是基于uglifyjs开发的插件,只不过UglifyJs不支持直接处理ES6文件,只能处理ES5文件,对于ES6语法,我们之前的代码最小化过程如下所示向下


虽然后来出了Uglify-ES支持处理ES6文件,但也因为存在bug太多,目前该项目也停止维护了。不过后来Terserfork了Uglify-ES然后进行了维护迭代,也就后来有了terser-webpack-plugin

????‍???? 啊乐童鞋:那有没有可以支持处理ES6 code的压缩工具

随着浏览器对es6特性支持更多,我们的代码最小化过程如下


可以使用以下工具:

  • babel-minify:基于Babel工具链的 ES6+ 压缩库, 以前叫 babili

  • terser: 用于es6的javascript解析器和混淆压缩工具包

下面是个对比图????


4.2 应用场景2: css的文件压缩工具有哪些?

可以使用以下工具:

  • cssnano: 建立在PostCSS生态系统之上模块化的压缩工具。

  • clean-css: CSS压缩工具。

4.3 应用场景3: 图片压缩工具有哪些?

  • imagemin: Image压缩工具。

4.4 应用场景4:webpack生态有哪些比较主流的压缩插件?

  • uglifyjs-webpack-plugin: 基于uglifyjs压缩js文件,不支持es6

  • terser-webpack-plugin: 支持压缩 ES6 (Webpack4)

  • html-webpack-plugin: 简化 HTML 文件创建

  • optimize-css-assets-webpack-plugin: 优化减少CSS资源的Webpack插件。webpack5中改为:css-minimizer-webpack-plugin

5. 网络????

5.1 应用场景1: 如何获取用户ip地址?

????‍???? 啊乐同学:我们在node服务一般通过什么信息去获取用户的ip信息

一般可以从下面的这些信息获取,当然有蛮多好的“轮子“可以使用哦~

可以使用以下工具:

  • node-ip: NodeJS IP地址工具。

  • public-ip: 非常快的获取你的公网IP地址。

  • request-ip: 在服务器中获取请求的IP地址。

5.2 应用场景2: 如何知道当前该使用哪个新的端口?

???? 啊森同学:我们通过vue-cli这类脚手架运行项目本地开发环境的时候,会起一个本地服务并分配一个端口,他这个是怎么做的?

我们在vue-cli源码中,可以看到它使用的是node-portfinder, 它不仅可以自动检测当前端口是否被占用如果占用还会返回新端口


  • node-portfinder :在当前机器上查找开放端口 或 域套接字的简单工具。

  • get-port :获取一个可用的端口。

6. HTTP ????

6.1 应用场景1 :有哪些请求库工具可以使用?

可以使用以下工具:

  • axios: 基于Promise 的HTTP客户端(也可以在浏览器中工作)。

  • request: 简单的 HTTP 请求客户端。

  • superagent: HTTP请求库。

  • node-fetch:  Node.js的 window.fetch 实现。

6.2 应用场景2: 我如何用node起一个服务?

我想通过起一个服务,或者做模拟数据,或者做静态资源服务器等等,有什么轮子可以用?

  • http-server: 零配置的命令行Http服务端。

  • anywhere: 随时随地将你的当前目录变成一个静态文件服务器的根目录。

  • json-server: 在不到30秒的时间内获得具有零编码的完整伪造的REST API。

???? 啊宽同学:如果我想启动一个守护进程?

你可以使用比如pm2来启动服务,可以保证进程永远都活着

可以使用以下工具:

  • pm2: 高级进程管理工具。

  • nodemon: 监视应用程序中的更改并自动重新启动服务器。

  • forever: 简单的CLI工具,用于确认提供的代码持续运行。

  • supervisor: 当脚本崩溃时重新启动脚本,或者当*.js文件更改时重新启动脚本。

6.3 应用场景3: 我如何用Node起一个代理服务?

我们常常可以在webpack中看到webpack-dev-server的配置,然后配置本地开发接口映射,以此接解决本地开发跨域存在的问题,本质上就是基于http-proxy-middleware中间件 ,通过把后端的API的请求代理到本地服务器上。包括mock服务也是一种代理服务,代理服务器只是起一个中转作用,总结用于解决以下三点

  • 本地开发

  • 代理访问

  • 防止跨域

可以使用以下工具:

  • http-proxy: 高级进程管理工具。

  • http-proxy-middleware : ⚡用于connect,express和browser-sync的单线Node.js Http代理中间件。

  • fast-proxy:  Node.js框架,使您可以将http请求转发到另一个HTTP服务器。支持的协议:HTTP,HTTPS,HTTP2。

7. 模版引擎 ????

模板引擎是一个通过结合页面模板、要展示的数据生成HTML页面的工具,本质上是后端渲染(SSR)的需求,加上Node渲染页面本身是纯静态的,当我们需要页面多样化、更灵活,我们就需要使用模板引擎来强化页面,更好的凸显服务端渲染的优势

可以使用以下工具:

  • pug: 是一款健壮、灵活、功能丰富的模板引擎,专门为 Node.js 平台开发

  • mustache: 轻量的JavaScript模板引擎{{八字须}}。

  • art-template: 高性能JavaScript模板引擎。

  • handlebars: Mustache 模板的超集,添加了强大的功能,如helper和更高级的block。

  • doT: 最快简洁的JavaScript模板引擎。

针对性能,我们将不同的工具进行渲染速度对比,可参考下图????


8. 函数式编程 ????

函数式编程大量使用函数,使得我们重复代码减少,同时也不会改变外界的状态,因为如果依赖,会造成系统复杂性大大提高

可以使用以下工具:

  • immer: 函数式响应式编程。

  • immutable: 不可变的数据集合。

  • lodash:可提供一致性、自定义、性能和其他功能的实用程序库,比Underscore.js更好更快。

  • rxjs: 用于转换、组合和查询各种数据的函数式响应式库。

  • lazy:  类似于lodash/underline的工具库,但具有惰性计算,在许多情况下可以转换为卓越的性能.

9. 文件系统 ????

我们知道Node体系中有fs模块, 对有关文件进行相应目录的创建、写入及删除操作等等。除了现有的api还有没有其他现成的轮子可以用

9.1 应用场景1: fs模块相关的工具?(文件读取,目录创建,删除)

可以使用以下工具:

  • fs-extra : 为 fs 模块提供额外方法。

  • graceful-fs:graceful-fs可以替代fs模块,并做了各种改进。

  • filesize: 生成人类可读的文件大小字符串。

  • make-dir: 递归创建文件夹,类似 mkdir -p。

  • find-up:   通过上级父目录查找文件或目录。

  • ncp:   使用Node.js进行异步递归文件复制。

  • rimraf:   递归删除文件,类似 rm -rf。

9.2 应用场景2: 如何监控文件变更?

替换 fs.watch

可以使用以下工具:

  • chokidar : 最小且高效的跨平台Watch库。

如果你喜欢这个awesome-nodejs库,请给作者一个star 

点击: https://github.com/huaize2020/awesome-nodejs


最近组建了一个江西人的前端交流群,如果你是江西人可以加我微信 ruochuan12 拉你进群。


推荐阅读

我在阿里招前端,该怎么帮你(可进面试群)
毕业年限不长的前端焦虑和突破方法

前端抢饭碗系列之Vue项目如何做单元测试
老姚浅谈:怎么学JavaScript?

················· 若川简介 ·················

你好,我是若川,毕业于江西高校。现在是一名前端开发“工程师”。写有《学习源码整体架构系列》多篇,在知乎、掘金收获超百万阅读。

从2014年起,每年都会写一篇年度总结,已经写了7篇,点击查看年度总结。

同时,活跃在知乎@若川,掘金@若川。致力于分享前端开发经验,愿景:帮助5年内前端人走向前列。

点击方卡片关注我、加个星标

今日话题

略。欢迎分享、收藏、点赞、在看我的公众号文章~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/275700.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【阿里内部应用】基于Blink为新商业调控打造实时大数据交互查询服务

基于Blink为新商业调控打造实时大数据交互查询服务 案例与解决方案汇总页:阿里云实时计算产品案例&解决方案汇总从IT到DT、从电商到新商业,阿里巴巴的每个细胞都存在大数据的DNA,如何挖掘大数据的价值成为抢占未来先机的金钥匙&#xff0…

Vite 的好与坏

大家好,我是若川,诚邀你进群交流学习。今天分享一篇关于Vite的文章。学习源码系列、面试、年度总结、JS基础系列。全文 3000 字,欢迎点赞关注转发一、Vite 是什么2020年4月,尤大大发了这么一个推:随后,2021…

Windows phone 7新开发工具发布

春节假期已经接近尾声. 马上第一个工作日就要来临. 春节真的不再是一个简简单单的节日. 有时让人感到欣喜 这意味这一年的忙碌都会因为这个节日的到来而画上一个终止符.面临一个不长也不短的假期.眼下的一年翻过去 新的一年即将到来. 似乎一切都可以重新开始. 有时又令人感到无…

opentaps mysql_opentaps 1.4 联接 mysql 笔记

opentaps 1.4 连接 mysql 笔记一、安装 MySQ 略...二、创建MySQL Database opentaps ERP CRM1.mysql -u root -h 127.0.0.1 -p 2.mysql>create database opentaps default CHARACTER SET utf8 COLLATE utf8_general_ci;3.mysql>create user opentaps;4.mysql>grant …

React 核心开发者 Dan Abramov 访谈实录

大家好,我是若川。面试、学习源码系列、年度总结、JS基础系列译者注:本译文是在「在线对话 React.js 核心开发者」一个半小时直播的基础上进行的原文翻译,包括了直播中的所有问答内容,尽可能保留了 Dan 回答的中心语义&#xff0c…

python ev3图形化编程软件下载_mPython(图形化编程软件)

mPython是盛思技术团队在BBC官方原版PythonEditor基础上、拓展开发的应用软件。可以进行可视化代码编程,有hex、python、blockly三种代码读写等功能。功能介绍1、不依赖网络,可离线安装使用2、支持hex、python、blockly三种代码的读写3、blockly模式下支…

python如何安装panda数据库_在Pycharm中安装Pandas库方法(简单易懂)

开发环境的搭建是一件入门比较头疼的事情,在上期的文稿基础上,增加一项Anaconda的安装介绍。Anaconda是Python的一个发行版本,安装好了Anaconda就相当于安装好了Python,并且里面还集成了很多Python科学计算的第三方库。比如我们需…

译文 | Vue 在哪些方面做的比 React 更好?

大家好,我是若川。在过去的五年中,我一直是一名 React 工程师。我爱React。我喜欢开发 React 应用程序。我认为它是目前最好的UI框架之一。但是,在这个领域有一些竞争对手。其中最大的是 Vue.js 。我以前玩过一些 Vue.js,但我认为…

web mp4第一帧_Web成帧器就在这里!

web mp4第一帧The Framer Team is pulling up it’s pants. I sniffed something cooking when they announced a public beta for Framer for web… FRAMER FOR WEB? Yes, I don’t know how they did it, but their powerful set of tools, plugins and animation controls …

Lucene学习总结之三:Lucene的索引文件格式(2)

2019独角兽企业重金招聘Python工程师标准>>> 四、具体格式 上面曾经交代过,Lucene保存了从Index到Segment到Document到Field一直到Term的正向信息,也包括了从Term到Document映射的反向信息,还有其他一些Lucene特有的信息。下面对这…

JavaScript 数组 API 全解析

在编程世界中,数组是指元素的集合。数组将数据作为元素进行存储,并在需要时将其取出。在支持数组的编程语言中广泛地采用了这个数据结构。这个手册会介绍 JavaScript 数组的所有知识。你将会学到复杂数据处理、解构、常用数组方法等内容。我为什么写这篇…

美学设计评价_死亡的孩子无法使用的设计美学

美学设计评价In the popular anime series, Soul Eater, Death the Kid is a Shinigami (Japanese death god) who vanquishes evil with his dual pistols, Liz and Patty. Although he’s strikingly powerful, his battles are often hindered by his obsessive-compulsive …

【送书】2021年哪些好书值得读(小姐姐配音)

大家好,我是若川。记得点上面的小姐姐再次录制的配音。为感谢大家一直以来的支持和肯定。不知道是今年第几次送书了。昨天送书的音频广受好评,没参与的可以参与。今天联合华章图书再送文中任选一本 * 3 包邮送,详细规则看文末。Web开发01《斯…

Flash获取html参数的方法

一. swf?传参 html代码:代码<html><head><meta http-equiv”Content-Type” content”text/html charsetutf-8″ /><title>as</title></head><body><object classid”clsid:D27CDB6E-AE6D-11cf-96B8-444553540000″ codebase”h…

方法重载_方法

方法重载Recently, I wrote an article about moving XD designs to Figma. It was a really interesting experiment and one that seemed to interest quite a lot of people.最近&#xff0c;我写了一篇有关将XD设计移至Figma的文章。 这是一个非常有趣的实验&#xff0c;似…

Node.js 框架设计及企业 Node.js 基础建设相关讨论

大家好&#xff0c;我是若川。19年我写的 lodash源码 文章投稿到海镜大神知乎专栏竟然通过了&#xff0c;后来20年海镜大神还star了我的博客&#xff0c;同时还转发了我的微博。时间真快啊。今天分享这篇Node.js的讨论。2021 年上半年早已过去&#xff0c;回顾 Node.js 在国内的…

DAS、NAS、SAN、iSCSI 存储方案概述

目前服务器所使用的专业存储方案有DAS、NAS、SAN、iSCSI几种。存储根据服务器类型可以分为&#xff1a;封闭系统的存储和开放系统的存储&#xff1a; &#xff08;1&#xff09;封闭系统主要指大型机. &#xff08;2&#xff09;开放系统指基于包括Windows、UNIX、Linux等操作系…

同态加法_同态—当旧趋势突然变酷时

同态加法Designers get excited at every year’s end to see what next year’s trend is going to be. What the future of design is going to look like. What they can carry forward to the next year; And Neumorphism was one among the lists which gained great atte…

网页标题设置,为什么在SERP中,显示结果不一致?

在网站建设与运营的过程中&#xff0c;我们经常会遇到各种各样的问题&#xff0c;特别是关于网页标题设置的问题&#xff0c;如果一个页面标题出错&#xff0c;那么&#xff0c;你整个页面建设的过程&#xff0c;就完全是事倍功半&#xff0c;得不偿失。 那么&#xff0c;网页标…

阿里专有钉钉前端面试指南

大家好&#xff0c;我是若川。今天推荐这篇掘金高赞文章&#xff0c;欢迎留言交流。经作者子奕大佬授权转载&#xff0c;原文链接&#xff1a;https://juejin.cn/post/6986436944913924103作者介绍子弈[1]&#xff0c;专有钉钉前端团队成员&#xff0c;负责专有钉钉 PC 客户端的…