前言:前端时间分享了这些node开源工具你值得拥有(上) 主要围绕git、npm、命令行工具、加解密工具、数据校验、文档生成工具等方面。通过现成的
轮子
来提升我们的开发效率,来解决在不同场景应用中遇到的一些问题
通过阅读 awesome-nodejs
库的收录,我抽取其中一些应用场景比较多的分类,通过分类涉及的应用场景跟大家分享工具
可以使用以下工具:
sharp
: 调整JPEG,PNG,WebP和TIFF格式图像大小的最快模块。jimp
:纯JavaScript中的图像处理。gm
:GraphicsMagick 和 ImageMagick 封装lwip
:不需要ImageMagick的轻量级图像处理器如下裁剪图所示
啊翔同学:上面提到
ImageMagick
是个什么鬼? 官方介绍: ImageMagick是一套功能强大、稳定而且开源的工具集和开发包,可以用来读、写和处理超过89种基本格式的图片文件,包括流行的TIFF、JPEG、GIF、 PNG、PDF以及PhotoCD等格式。利用ImageMagick,你可以根据web应用程序的需要动态生成图片, 还可以对一个(或一组)图片进行改变大小、旋转、锐化、减色或增加特效等操作
可以使用以下工具:
node-qrcode
: 二维码和条形码生成器qr-image
: 二维码生成器啊乐同学:如果我想解析二维码的话,有没有什么轮子可以用?
你可以使用:
jsQR
: 一个纯javascript的二维码读取库。 该库接收原始图像,并将定位、提取和解析其中发现的任何二维码。可以使用以下工具:
pixelmatch
: 最小、最简单、最快的 JavaScript 像素级图像比较库。resemble.js
: 图片像素对比工具可以使用以下工具:
image-type
: 检测Buffer / Uint8Array的图像类型.可以使用以下工具:
webpack
: 打包浏览器的模块和资产。parcel
: 快速,零配置的Web应用构建工具。esbuild
: 极快的JavaScript打包压缩工具,不使用 ASTrollup
: 新一代的 ES2015 打包构建工具。grunt
:JavaScript任务执行器。gulp
:流式快速构建系统,支持代码而不是配置。snowpack
: 是一个相对轻量的 bundless 方案可以使用以下工具:
👩 啊开童鞋:什么是
Bundleless
?
Bundleless 模式是利用浏览器能够自主加载的特性,通过跳过打包环节,使得我们在项目启动时可以直接获取到极快的启动速度,而在本地更新时只需要重新编译单个文件
👩 啊乐童鞋:LRU缓存是啥?
LRU 全称叫 Least Recently Used
,也叫最近最少使用,是一种缓存淘汰算法。核心是内容是如果数据最近被访问过,那么将来被访问的几率也更高,相如果是很久都没用过的数据会优先对其删除,常用于优化缓存查询性能
,包括我们使用的框架vue中的keep-alive
也是基于该算法开发的
node-cache
:Node.js内存缓存模块。node-cache-manager
: Node.js Cache模块。应用的性能优化,我们会想到js、html、css的文件的压缩,使得其文件最小化,那么有什么轮子可以直接使用?
👩🎓 啊乐童鞋:我记得之前好像有个webpack插
件叫uglifyjs-webpack-plug
in,跟你说的这个有什么关系?
uglifyjs-webpack-plugin就是基于uglifyjs
开发的插件,只不过UglifyJs不支持直接处理ES6文件,只能处理ES5文件,对于ES6语法,我们之前的代码最小化过程如下所示向下
虽然后来出了Uglify-ES
支持处理ES6文件,但也因为存在bug太多,目前该项目也停止维护了。不过后来Terser
fork了Uglify-ES然后进行了维护迭代,也就后来有了terser-webpack-plugin
👩🎓 啊乐童鞋: 那有没有可以支持处理ES6 code的压缩工具
随着浏览器对es6特性支持更多,我们的代码最小化过程如下
可以使用以下工具:
babili
下面是个对比图👇
可以使用以下工具:
👩🎓 啊乐同学:我们在node服务一般通过什么信息去获取用户的ip信息
一般可以从下面的这些信息获取,当然有蛮多好的“轮子“可以使用哦~
可以使用以下工具:
👧 啊森同学:我们通过vue-cli这类脚手架运行项目本地开发环境的时候,会起一个本地服务并分配一个端口,他这个是怎么做的?
我们在vue-cli源码中,可以看到它使用的是node-portfinder
, 它不仅可以自动检测当前端口是否被占用如果占用还会返回新端口
可以使用以下工具:
我想通过起一个服务,或者做模拟数据,或者做静态资源服务器等等,有什么
轮子
可以用?
👧 啊宽同学:如果我想启动一个守护进程?
你可以使用比如pm2来启动服务,可以保证进程永远都活着
可以使用以下工具:
*.js
文件更改时重新启动脚本。我们常常可以在webpack中看到webpack-dev-server的配置,然后配置本地开发接口映射,以此接解决本地开发跨域存在的问题,本质上就是基于
http-proxy-middleware
中间件 ,通过把后端的API的请求代理到本地服务器上。包括mock服务也是一种代理服务,代理服务器只是起一个中转作用,总结用于解决以下三点
可以使用以下工具:
模板引擎是一个通过结合页面模板、要展示的数据生成HTML页面的工具,本质上是后端渲染(SSR)的需求,加上Node渲染页面本身是纯静态的,当我们需要页面多样化、更灵活,我们就需要使用模板引擎来强化页面,更好的凸显服务端渲染的优势
可以使用以下工具:
针对性能,我们将不同的工具进行渲染速度对比,可参考下图👇
函数式编程大量使用函数,使得我们重复代码减少,同时也不会改变外界的状态,因为如果依赖,会造成系统复杂性大大提高
可以使用以下工具:
我们知道Node体系中有
fs
模块, 对有关文件进行相应目录的创建、写入及删除操作等等。除了现有的api还有没有其他现成的轮子可以用
可以使用以下工具:
替换
fs.watch
可以使用以下工具: