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.pswp.cn/news/275700.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/275700.shtml
英文地址,請注明出處:http://en.pswp.cn/news/275700.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

技術點

前端所用技術 后臺頁面 感謝 H-ui、FlatLab 提供靜態頁面支持Ztree:jQuery樹插件DataTables:jQuery表格插件Layer:web彈層組件Distpicker:中國省市區地址三級聯動插件KindEditor:富文本編輯器 簡潔方便 沒UEditor那么多…

掃描java類文件_java遞歸與非遞歸實現掃描文件夾下文件的實例代碼

java遞歸與非遞歸實現掃描文件夾下所有文件java掃描指定文件夾下面的所有文件,供大家參考,具體內容如下掃描一個文件夾下面的所有文件,因為文件夾的層數沒有限制可能多達幾十層幾百層,通常會采用兩種方式來遍歷指定文件夾下面的所…

【阿里內部應用】基于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 …

這10道springboot常見面試題你需要了解下

1、什么是Spring Boot?多年來,隨著新功能的增加,spring變得越來越復雜。只需訪問https://spring.io/projects頁面,我們就會看到可以在我們的應用程序中使用的所有Spring項目的不同功能。如果必須啟動一個新的Spring項目&#xff0…

Silverlight中使用MIRIA進行觸屏編程

Silverlight for Windows phone7中可以使用XNA提供的功能進行觸屏編程,不過暫時還沒有網頁Silverlight的XNA移植。經過搜索發現MIRIA這個開源項目http://miria.codeplex.com/ 可以在Silverlight中實現Touch、Gesture的功能。 用法如下: 1、項目中引用MIG…

React 核心開發者 Dan Abramov 訪談實錄

大家好,我是若川。面試、學習源碼系列、年度總結、JS基礎系列譯者注:本譯文是在「在線對話 React.js 核心開發者」一個半小時直播的基礎上進行的原文翻譯,包括了直播中的所有問答內容,盡可能保留了 Dan 回答的中心語義&#xff0c…

python ev3圖形化編程軟件下載_mPython(圖形化編程軟件)

mPython是盛思技術團隊在BBC官方原版PythonEditor基礎上、拓展開發的應用軟件。可以進行可視化代碼編程,有hex、python、blockly三種代碼讀寫等功能。功能介紹1、不依賴網絡,可離線安裝使用2、支持hex、python、blockly三種代碼的讀寫3、blockly模式下支…

02-15 GUCCI 我喜歡的

我覺得,GUCCI是低調的奢華,價格不是很高,容易接近,符合我的風格,是現階段我的選擇 樣式我喜歡 希望我的生活質量步步高升,將來不再為追求物質生活而奮斗。 轉載于:https://www.cnblogs.com/yd1227/archive/…

php 批量修改mysql 數據表,字段 字符集編碼

$sql"SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA 數據庫名稱";$r$pdo->query($sql,2);foreach($r as $v){//if($v[TABLE_NAME]!monxin_index_user){continue;} 代碼來源 夢行云軟件$sql"alter table ".$v[TABLE_NAME]." conver…

python如何安裝panda數據庫_在Pycharm中安裝Pandas庫方法(簡單易懂)

開發環境的搭建是一件入門比較頭疼的事情,在上期的文稿基礎上,增加一項Anaconda的安裝介紹。Anaconda是Python的一個發行版本,安裝好了Anaconda就相當于安裝好了Python,并且里面還集成了很多Python科學計算的第三方庫。比如我們需…

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

大家好,我是若川。在過去的五年中,我一直是一名 React 工程師。我愛React。我喜歡開發 React 應用程序。我認為它是目前最好的UI框架之一。但是,在這個領域有一些競爭對手。其中最大的是 Vue.js 。我以前玩過一些 Vue.js,但我認為…

表單提交中Get和Post方式的區別及EncType表明提交數據的格式詳解

表單提交中Get和Post方式的區別1. get是從服務器上獲取數據,post是向服務器傳送數據。2. get是把參數數據隊列加到提交表單的ACTION屬性所指的URL中,值和表單內各個字段一一對應,在URL中可以看到。post是通過HTTP post機制,將表單…

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 數組的所有知識。你將會學到復雜數據處理、解構、常用數組方法等內容。我為什么寫這篇…

Spoken English(001)

if he wants to make any changes,minor alternations can be made thenis there any way of ensuring well have enough time for our talks?so our evenings will be quite full then?We’ll leave some evenings free,that is, if it is all right with you.We’d have to…

美學設計評價_死亡的孩子無法使用的設計美學

美學設計評價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 …