web前端技術分享:詳解模組化require 和 import的區別
在 前端開發中,我們可以使用很多模組化的庫來幫助我們更好的實現效果,有一些庫的功能類似很多同學就不知道該如何選擇,比如require和import,今天小千就給大家介紹一下兩者的區別。
一、區別
1.require是commonjs的規範,在node中實現的api,import是es的語法,由編譯器處理。所以import可以做模組依賴的靜態分析,配合webpack、rollup等可以做treeshaking。
2.commonjs匯出的值會複製一份,require引入的是複製之後的值(引用型別只複製引用),es module匯出的值是同一份(不包括export default),不管是基礎型別還是應用型別。
3.寫法上有差別,import可以使用import * 引入全部的export,也可以使用import aaa, { bbb}的方式分別引入default和非default的export,相比require更靈活。
二、require和import會不會迴圈引用?
答案是不會,因為模組執行後會把匯出的值快取,下次再require或者import不會再次執行。這樣也就不會迴圈引用了。比如a引入了b,b引入了a,如果a再次執行那麼會再引入b,那就迴圈起來了,但實際上會做快取,再次引入不會再執行。可以透過require.cache來檢視快取的模組,key為require.resolve(path)的結果。
三、模組中有定時器改變了匯出的值,匯出的值會不會變?
結果是import引入的值是2,而require引入的值一直是1,這也是require和imort很重要的一個區別,es module的export匯出的值會靜態的繫結,而commonjs exports匯出的值是一個物件,會複製一份。這樣也就出現了這樣的現象。
四、總結
問 require和import的區別就是問commonjs和es module的區別,這兩者一個是api的規範,一個是語言的語法,所以後者可以做靜態分析,基於這個實現treeshaking,同時es module會靜態的繫結匯出的值,而commonjs會複製一份。但兩者都會做快取,所以不會有迴圈引用問題。
以上就是require和import的區別介紹了。最後歡迎對web前端感興趣的小夥伴關注小千,後面會繼續分享更多web前端知識。
本文來自千鋒教育,轉載請註明出處。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31548651/viewspace-2789070/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- import和require的區別ImportUI
- require 和 import 的區別?UIImport
- require 和 import 詳解UIImport
- require和import引用的區別UIImport
- 談談import和require的區別ImportUI
- require和import有啥區別?UIImport
- require()、import、import()有哪些區別?UIImport
- web前端技術Mongoose詳解Web前端Go
- web前端技術分享:前端開發與後端開發的區別是什麼?Web前端後端
- require和require_once的區別UI
- 前端模組化,AMD和CMD的區別總結前端
- CommonJS,AMD,CMD,ES6,require 和 import 詳解JSUIImport
- from module import 和 import 的區別Import
- import、require、export、module.exports 混合使用詳解ImportUIExport
- import方法引入模組詳解Import
- 前端模組化,AMD與CMD的區別前端
- require OR importUIImport
- 好程式設計師web前端分享移動前端開發和web前端開發的區別程式設計師Web前端
- link和@import的區別Import
- Web前端技術分享:Javascript中的內建物件陣列講解Web前端JavaScript物件陣列
- 前端模組化詳解(完整版)前端
- require 和 include 區別小記UI
- web前端技術分享Electron之Renderer Process APIWeb前端API
- web前端技術分享Electron之IPC 通訊Web前端
- web前端技術分享:常用JavaScript框架有哪些?Web前端JavaScript框架
- Web除錯技術詳解Web除錯
- Web前端技術分享:學習HTML和CSS的5大理由Web前端HTMLCSS
- css link和@import的區別CSSImport
- web前端技術分享:多行文字溢位問題解決方案Web前端
- web前端技術分享之頁面元素水平居中Web前端
- Java技術分享:”==“和 equals 方法究竟有什麼區別?Java
- #import、#include、@import modules區別Import
- CSS中 link 和@import的區別CSSImport
- 好程式設計師web前端教程分享js中的模組化二程式設計師Web前端JS
- 好程式設計師web前端教程分享js中的模組化一程式設計師Web前端JS
- MyBatis中#{}和${}的區別詳解MyBatis
- cookie 和session 的區別詳解CookieSession
- Redis 和 Memcached 的區別詳解Redis