精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

終于有人對 jQuery下手了,一鍵移除項目對它的依賴

開發 前端
最近新發現了一個有意思的工具,僅上線2周,就有 600+ 的Star,它說能幫助你的項目脫離對jquery的依賴,感覺是個不錯的想法,一起來看看吧~

 [[424009]]

大家好,我是 零一 。雖然現在很多前端項目都在用Vue、React,但依賴jquery的項目也不少,尤其是年代比較久遠的項目,那些還正在維護jquery項目的你,是否想將jquery從你的項目中移除?畢竟這個庫那么大,你能用到的代碼也就只有15%~30%,而且jquery對各個瀏覽器的兼容性也做了很大的處理(代碼量up up),但其實很多老項目也不會去考慮兼容很邊緣的瀏覽器了,所以其實jquery中兼容處理的代碼也沒太大必要

最近新發現了一個有意思的工具,僅上線2周,就有 600+ 的Star,它說能幫助你的項目脫離對jquery的依賴,感覺是個不錯的想法,一起來看看吧~

使用方式

這個工具的名字叫 replace-jquery ,據說是能幫你從項目中自動查找所有用到的jquery方法,并生成一套原生js的方法去替代

先來搞一個極簡的jquery項目

index.html

 

 

 

main.js

 

 


 

測試一下頁面的功能,是OK的

接下來我們用 replace-jquery 工具試著移除一下 main.js 中的jquery代碼

先全局下載一下

  1. npm install -g replace-jquery 

然后在項目目錄使用,語法為 replace-jquery 目標js文件 生成的js文件

  1. replace-jquery main.js newMain.js 

該工具會自動找到你文件中所有用到的jquery方法。此處有一個確認的步驟,你可以選擇想要替換哪些方法(默認是全選的)

 

 

生成過程

 

按回車鍵即可完成替換,并生成新的文件

  1. export class Utils { 
  2.     constructor(selector) { 
  3.         this.elements = Utils.getSelector(selector); 
  4.         this.element = this.get(0); 
  5.         return this
  6.     } 
  7.  
  8.     on(events, listener) { 
  9.         events.split(' ').forEach((eventName) => { 
  10.             this.each((el) => { 
  11.                 const tNEventName = Utils.setEventName(el, eventName); 
  12.                 if (!Array.isArray(Utils.eventListeners[tNEventName])) { 
  13.                     Utils.eventListeners[tNEventName] = []; 
  14.                 } 
  15.                 Utils.eventListeners[tNEventName].push(listener); 
  16.  
  17.                 // https://github.com/microsoft/TypeScript/issues/28357 
  18.                 if (el) { 
  19.                     el.addEventListener(eventName.split('.')[0], listener); 
  20.                 } 
  21.             }); 
  22.         }); 
  23.  
  24.         return this
  25.     } 
  26.     remove() { 
  27.         this.each((el) => { 
  28.             el.parentNode.removeChild(el); 
  29.         }); 
  30.         return this
  31.     } 
  32.     css(css, value) { 
  33.         if (value !== undefined) { 
  34.             this.each((el) => { 
  35.                 Utils.setCss(el, css, value); 
  36.             }); 
  37.             return this
  38.         } 
  39.         if (typeof css === 'object') { 
  40.             for (const property in css) { 
  41.                 if (Object.prototype.hasOwnProperty.call(css, property)) { 
  42.                     this.each((el) => { 
  43.                         Utils.setCss(el, property, css[property]); 
  44.                     }); 
  45.                 } 
  46.             } 
  47.             return this
  48.         } 
  49.         const cssProp = Utils.camelCase(css); 
  50.         const property = Utils.styleSupport(cssProp); 
  51.         return getComputedStyle(this.element)[property]; 
  52.     } 
  53.     static getSelector(selector, context) { 
  54.         if (selector && typeof selector !== 'string') { 
  55.             if (selector.length !== undefined) { 
  56.                 return selector; 
  57.             } 
  58.             return [selector]; 
  59.         } 
  60.         context = context || document; 
  61.  
  62.         // For performance reasons, use getElementById 
  63.         // eslint-disable-next-line no-control-regex 
  64.         const idRegex = /^#(?:[\w-]|\\.|[^\x00-\xa0])*$/; 
  65.         if (idRegex.test(selector)) { 
  66.             const el = document.getElementById(selector.substring(1)); 
  67.             return el ? [el] : []; 
  68.         } 
  69.         return [].slice.call(context.querySelectorAll(selector) || []); 
  70.     } 
  71.     get(index) { 
  72.         if (index !== undefined) { 
  73.             return this.elements[index]; 
  74.         } 
  75.         return this.elements; 
  76.     } 
  77.     each(func) { 
  78.         if (!this.elements.length) { 
  79.             return this
  80.         } 
  81.         this.elements.forEach((el, index) => { 
  82.             func.call(el, el, index); 
  83.         }); 
  84.         return this
  85.     } 
  86.     static setEventName(el, eventName) { 
  87.         // Need to verify https://stackoverflow.com/questions/1915341/whats-wrong-with-adding-properties-to-dom-element-objects 
  88.         const elementUUId = el.eventEmitterUUID; 
  89.         const uuid = elementUUId || Utils.generateUUID(); 
  90.         // eslint-disable-next-line no-param-reassign 
  91.         el.eventEmitterUUID = uuid; 
  92.         return Utils.getEventName(eventName, uuid); 
  93.     } 
  94.     static setCss(el, prop, value) { 
  95.         // prettier-ignore 
  96.         let cssProperty = Utils.camelCase(prop); 
  97.         cssProperty = Utils.styleSupport(cssProperty); 
  98.         el.style[cssProperty] = value; 
  99.     } 
  100.     static camelCase(text) { 
  101.         return text.replace(/-([a-z])/gi, (s, group1) => group1.toUpperCase()); 
  102.     } 
  103.     static styleSupport(prop) { 
  104.         let vendorProp; 
  105.         let supportedProp; 
  106.         const capProp = prop.charAt(0).toUpperCase() + prop.slice(1); 
  107.         const prefixes = ['Moz''Webkit''O''ms']; 
  108.         let div = document.createElement('div'); 
  109.  
  110.         if (prop in div.style) { 
  111.             supportedProp = prop; 
  112.         } else { 
  113.             for (let i = 0; i < prefixes.length; i++) { 
  114.                 vendorProp = prefixes[i] + capProp; 
  115.                 if (vendorProp in div.style) { 
  116.                     supportedProp = vendorProp; 
  117.                     break
  118.                 } 
  119.             } 
  120.         } 
  121.  
  122.         div = null
  123.         return supportedProp; 
  124.     } 
  125.     static generateUUID() { 
  126.         return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => { 
  127.             // eslint-disable-next-line no-bitwise 
  128.             const r = (Math.random() * 16) | 0
  129.             // eslint-disable-next-line no-bitwise 
  130.             const v = c === 'x' ? r : (r & 0x3) | 0x8
  131.             return v.toString(16); 
  132.         }); 
  133.     } 
  134.     static getEventName(eventName, uuid) { 
  135.         return `${eventName}__EVENT_EMITTER__${uuid}`; 
  136.     } 
  137.  
  138. Utils.eventListeners = {}; 
  139.  
  140. export default function $utils(selector) { 
  141.     return new Utils(selector); 

簡單看了一下,似乎就是把我們用到的jquery方法替換成了簡單的原生方法,并封裝在 Utils 這個類中,那么我們每次調用 $("xxx") 時,其實就是在調用該類上的方法,那么對這個文件做一些修改

  1. // 此處刪除export 
  2. class Utils { 
  3.  // ...省略一些代碼 
  4.  
  5. Utils.eventListeners = {}; 
  6.  
  7. // 此處刪除 export default,并將函數 $utils改成 $ 
  8. function $(selector) { 
  9.     return new Utils(selector); 

這樣就相當于我們在全局模擬jquery定義了一個 $ 方法。此時html文件中的jquery引用就可以刪除了,并把我們剛才生成的文件引進來

 

 

刪除jquery,注入替代品

 

 

再去頁面中嘗試操作dom,可以看到效果跟之前一樣,成功!

補充

如果你想用該工具生成jquery所有api的替代文件,即生成一個 super-mini-jquery ,你可以這么做

  1. replace-jquery --build-all super-mini-jquery.js 

將代碼混淆丑化以后大概只有10kb

 

 

super-mini-jquery包體大小

 

 

 因為這個工具剛發布才2個星期不到,只實現了大部分的jquery代碼替換,比如 ajax 暫時是沒辦法替換的,你如果嘗試去替換,工具也會提醒你

無法替換ajax

總的來說,這個工具想法不錯,希望后期能支持更多的語法替換!

 

責任編輯:張燕妮 來源: 前端印象
相關推薦

2020-02-23 16:33:02

GitHub印度子公司

2018-12-26 09:03:30

物聯網IOT智能

2024-07-17 13:11:22

2020-09-16 13:08:17

微信兒童版天眼查騰訊

2023-08-23 19:01:09

PythonExcel語言

2025-04-01 00:00:22

數據場景競品

2015-09-22 09:41:56

技術程序員

2015-09-29 11:37:45

技術依賴程序員

2022-03-27 20:32:28

Knative容器事件模型

2021-10-09 00:02:04

DevOps敏捷開發

2021-06-13 12:03:46

SaaS軟件即服務

2021-09-26 15:58:05

MySQL SQL 語句數據庫

2022-05-01 22:09:27

數據模型大數據

2015-01-23 10:04:56

bug程序員

2021-03-25 11:24:25

爬蟲技術開發

2021-10-17 20:38:30

微服務內存組件

2021-08-31 19:14:38

技術埋點運營

2021-12-03 18:25:56

數據指標本質

2021-09-03 18:38:13

數據湖數據倉庫

2020-11-03 07:04:39

云計算公有云私有云
點贊
收藏

51CTO技術棧公眾號

日韩精品一区二| 亚洲伦在线观看| 国产精品第一视频| 欧美少妇一区二区三区| 久草视频一区二区| 日韩欧美在线中字| 欧美不卡激情三级在线观看| 熟女人妇 成熟妇女系列视频| 黄网站视频在线观看| www.66久久| 成人黄色av网| 亚洲 欧美 日韩 综合| 欧美成人精品午夜一区二区| 欧美日韩日本国产| 欧美少妇一级片| 日本福利片高清在线观看| 国内国产精品久久| 日韩美女在线播放| 久热这里只有精品在线| 色婷婷热久久| 亚洲无亚洲人成网站77777| 成年人性生活视频| 麻豆久久久久| 色婷婷综合久久久中文字幕| 日本人体一区二区| 国产秀色在线www免费观看| 久久久久99精品一区| 国产乱码一区| a级片在线免费看| 老司机一区二区| 日本久久久久久久久| 日韩黄色在线视频| 韩国精品一区二区三区| 久热精品视频在线免费观看 | 国产精品视频一区视频二区 | 亚洲欧美久久久久| 国产小视频免费在线观看| 国产成人精品三级麻豆| 国产精品爽黄69天堂a| 日韩综合在线观看| 亚洲伊人观看| 日本欧美中文字幕| 久久国产黄色片| 国产日韩欧美一区在线 | 先锋影音欧美| 成人高潮成人免费观看| 日韩va亚洲va欧美va久久| 97国产一区二区精品久久呦| 久久久久无码国产精品不卡| 婷婷综合久久| 久久天天躁狠狠躁夜夜av| 少妇的滋味中文字幕bd| 久久人人99| 中文字幕视频一区二区在线有码| 人妻av无码一区二区三区| 久久av导航| 欧美日韩一区二区电影| 黄色高清无遮挡| 成人自拍av| 在线观看日韩国产| 粉色视频免费看| 99久久久国产| 日韩视频国产视频| 亚洲精品激情视频| 亚洲婷婷伊人| 91麻豆精品国产91久久久久久久久| 99热这里只有精品在线播放| 先锋影音网一区二区| 5858s免费视频成人| 色姑娘综合天天| 凹凸成人在线| 亚洲精品久久久久久久久| 亚洲国产欧美视频| 青青一区二区三区| 久久国产精品久久久久| 久久久国产成人| 一区二区三区福利| 久久视频在线直播| 伊人国产在线观看| 麻豆91精品| 国产日韩在线看片| 亚洲第九十九页| 久久综合色综合88| 亚洲一区三区| av老司机免费在线| 中文字幕一区av| 青青草综合视频| 日本在线影院| 欧美欧美欧美欧美| 无码日韩人妻精品久久蜜桃| 日韩色性视频| 亚洲福利视频专区| 欧美日韩国产黄色| 影音先锋久久| 国产精品久久久久国产a级| 国产精品久久久久久在线| 不卡的av在线播放| 99精彩视频| 欧美孕妇孕交| 亚洲人成网站影音先锋播放| 男人靠女人免费视频网站| 天堂久久一区| 日韩高清不卡av| 亚洲一区电影在线观看| 亚洲三级观看| 91久久久久久久久久久| 婷婷丁香花五月天| 亚洲特黄一级片| 免费在线观看的毛片| aaa国产精品视频| 最近2019中文字幕mv免费看| 日本熟妇色xxxxx日本免费看| 蜜臀av一区二区三区| 国产原创精品| 成人片在线看| 亚洲色图在线播放| 一本色道无码道dvd在线观看| 精品国产亚洲一区二区三区大结局| 国产视频精品一区二区三区| 精品爆乳一区二区三区无码av| 日韩高清在线一区| 激情小说综合区| 1stkiss在线漫画| 欧美日韩国产在线观看| 成年人在线观看av| 亚洲人成久久| 91亚色免费| www在线免费观看视频| 欧美亚洲综合另类| 中文字幕丰满乱子伦无码专区| 尤物在线精品| av成人午夜| 18videosex性欧美麻豆| 4438成人网| 免费黄色国产视频| 免费人成网站在线观看欧美高清| 欧美另类网站| 樱桃视频成人在线观看| 亚洲电影免费观看高清| 99热精品免费| 国产精品77777| 99精品一区二区三区的区别| 亚洲精品tv| 日韩在线免费视频| 国产精品久久婷婷| **网站欧美大片在线观看| www.99r| 日韩精品永久网址| 国产精品久久久久久av福利| 中文日本在线观看| 欧美精品v国产精品v日韩精品| 18啪啪污污免费网站| 捆绑变态av一区二区三区| 亚洲精品在线视频观看| 色综合视频一区二区三区日韩 | 婷婷色一区二区三区| 久久性天堂网| 图片区小说区区亚洲五月| 成人自拍视频网| 色妞色视频一区二区三区四区| 一级片视频播放| 亚洲蜜臀av乱码久久精品| 在线观看免费看片| 亚洲伦理精品| 欧美精品一区在线发布| 成人国产精选| 美女精品久久久| 亚洲精品久久久蜜桃动漫| 午夜在线成人av| 91久久免费视频| 秋霞影院一区二区| 欧美少妇在线观看| 丁香婷婷成人| 国产精品扒开腿做爽爽爽男男| 亚洲图片88| 日韩视频免费观看高清完整版在线观看 | 亚洲国产精品久久久久爰色欲| 国产日产精品_国产精品毛片| 色妞一区二区三区| 国产免费高清av| 天天色图综合网| 日本精品一区在线| 国产精品vip| 欧美高清性xxxxhd| 在线免费观看亚洲| 欧美亚州一区二区三区| 午夜国产福利在线| 亚洲电影免费观看高清完整版在线观看 | 精品美女国产在线| 国产真人真事毛片视频| 顶级嫩模精品视频在线看| 国产精彩免费视频| 欧美日本三区| 国产精品视频精品| 青草在线视频| 中文字幕日韩av综合精品| 亚洲欧美国产高清va在线播放| 色综合久久久久久久| 国产美女久久久久久| xnxx国产精品| 樱花草www在线| 久久精品动漫| 国产精品www在线观看| 全球成人免费直播| 久久本道综合色狠狠五月| 99亚洲男女激情在线观看| 2024亚洲男人天堂| 性网站在线观看| 在线观看日韩www视频免费| 国产精品7777777| 国产精品卡一卡二卡三| 亚洲av成人片色在线观看高潮 | 高潮久久久久久久久久久久久久 | 日韩在线精品强乱中文字幕| 国产精品 欧美在线| 波多一区二区| 欧美日本中文字幕| 欧洲美女少妇精品| 一区二区国产精品视频| 天天操天天操天天| 日韩欧美一级精品久久| 在线观看中文字幕2021| 欧美视频中文字幕在线| 国产一级一片免费播放放a| 亚洲欧美日韩国产一区二区三区| 免费在线观看a视频| 2021久久国产精品不只是精品| 国产精久久久久| 伊人久久久大香线蕉综合直播| 一区二区三区av| 国产成人1区| 久久亚洲免费| 丁香五月缴情综合网| 成人免费视频视频在| 清纯唯美激情亚洲| 国产日韩欧美在线视频观看| 精品女同一区二区三区在线观看| 欧美最近摘花xxxx摘花| 樱花草涩涩www在线播放| 高清欧美性猛交xxxx| 欧美四级在线| 久久久久国产视频| 美州a亚洲一视本频v色道| 精品亚洲男同gayvideo网站| 天堂在线视频观看| 亚洲国产精品视频在线观看| 国产1区在线观看| 欧美va亚洲va香蕉在线| 亚洲第一天堂影院| 精品电影一区二区三区| 精产国品一区二区| 91福利小视频| 亚洲天堂网视频| 在线综合视频播放| 午夜久久久久久噜噜噜噜| 日韩视频中午一区| 噜噜噜久久,亚洲精品国产品| 亚洲第一视频网| 人人九九精品| 一区二区三区日韩在线| 中文字幕在线免费| 久久91精品国产91久久跳| 182在线视频观看| 日韩av电影手机在线观看| 韩国成人在线| 91老司机在线| 91成人噜噜噜在线播放| 久久精品女人的天堂av| 精品盗摄女厕tp美女嘘嘘| 亚洲自拍的二区三区| 欧美搞黄网站| 内射国产内射夫妻免费频道| 美女精品一区| 日韩a一级欧美一级| 国产成人综合网| 人妻熟女aⅴ一区二区三区汇编| 国产人成亚洲第一网站在线播放| 天天看天天摸天天操| 亚洲成av人在线观看| 亚洲国产精品无码久久久| 51久久夜色精品国产麻豆| 日本成人动漫在线观看| 亚洲日韩欧美视频| 国产乱色在线观看| 538国产精品视频一区二区| 欧美综合影院| 精品蜜桃传媒| 亚洲字幕久久| 日本三区在线观看| 粉嫩绯色av一区二区在线观看| 精品人妻少妇嫩草av无码| 亚洲天堂中文字幕| 性无码专区无码| 日韩亚洲电影在线| 国产福利小视频在线观看| 欧美日本国产在线| 国产成人免费| 精品无人区一区二区三区竹菊| 国产大片一区| 六月丁香婷婷激情| 国产成人av电影在线| 五月天婷婷丁香网| 欧美午夜精品久久久久久人妖| 国内精品偷拍视频| 国产一区二区三区在线看| 免费影视亚洲| 91精品久久久久久久久久久久久| 精品丝袜久久| 999久久欧美人妻一区二区| 青青草91视频| 精品夜夜澡人妻无码av| 亚洲最新视频在线播放| 艳妇乳肉豪妇荡乳av| 亚洲区在线播放| 多野结衣av一区| 99理论电影网| 夜间精品视频| 亚洲第一天堂久久| 欧美国产精品久久| 中文字幕69页| 亚洲精品网址在线观看| av影视在线看| 国产精选一区二区| 国产精品草草| 欧美体内she精高潮| 中文字幕一区av| 一级片免费网站| 日韩综合中文字幕| 成人在线观看免费播放| 日本一区二区三区精品视频| 中文在线一区| 亚洲一区二区在线免费| 亚洲成av人影院在线观看网| www.色呦呦| 久久成人国产精品| 国产精品一区二区精品| 中文字幕免费高| 国内成人自拍视频| 污软件在线观看| 日韩一区二区精品葵司在线| av在线收看| 国产欧美日韩免费看aⅴ视频| 欧美综合久久| 日韩一区二区三区久久| 国产精品伦理一区二区| 中文字幕你懂的| 精品欧美一区二区在线观看| 成人看片免费| 99re资源| 亚洲黄色天堂| 一级特级黄色片| 一本到不卡精品视频在线观看| 日韩黄色影片| 国产精品美女999| 色135综合网| 操人视频免费看| 亚洲高清一区二区三区| 天堂在线中文网| 国产精品www网站| 婷婷激情图片久久| 国产人妖在线观看| 国产亚洲午夜高清国产拍精品| 不卡av电影在线| 久热精品视频在线观看一区| ady日本映画久久精品一区二区| 亚洲熟妇av日韩熟妇在线| 久久久亚洲午夜电影| 中文字幕一区二区三区四区免费看| www.日韩不卡电影av| 日韩在线成人| 国产av无码专区亚洲精品| 国产精品天干天干在线综合| 国产视频在线一区| 午夜剧场成人观在线视频免费观看| 在线看成人短视频| 激情文学亚洲色图| 图片区日韩欧美亚洲| 成年人免费在线视频| 99在线热播| 日韩精品一二三| 美女毛片在线观看| 亚洲精品自拍视频| 国产一区二区三区免费观看在线| 日韩国产一级片| 国产精品视频第一区| 国产91久久久| 国产精品吴梦梦| 激情综合网址| 国产真人真事毛片视频| 欧美精品一区二区久久婷婷| 搜成人激情视频| 久久男人资源站| 欧美经典一区二区三区| 亚洲黄色小说网址| 国产精品欧美一区二区| 在线精品一区| 久久噜噜色综合一区二区| 亚洲美女av黄| 日韩视频一区二区三区四区| 黄色三级视频片|