require和import有啥區別?
今天在研究react的lazyRequire時突然想到了這個問題,於是展開了一些列研究。。
要回答這個問題,必須從模組化說起。
所謂模組化主要就是解決程式碼分割、作用域隔離、模組之間的依賴管理。
通常一個檔案就是一個模組,有自己的作用域,只向外暴露特定的變數和函式。
流行的模組化規範有:CommonJS、AMD、CMD、ES6的模組系統。
這裡簡單介紹下CommonJS規範和ES6 Module。
1. CommonJS
使用module.exports定義當前模組對外輸出的介面,用require載入模組。
2. ES6 Module
其模組功能主要由兩個命令構成:export和import。
export用於規定模組的對外介面;import用於輸入其他模組提供的功能。
3. 兩者區別
CommonJS模組輸出的是一個值的拷貝,ES6模組輸出的是值的引用。
也就是說,在CommonJS模組中,一旦輸出一個值,模組內部的變化就影響不到這個值;而ES6輸出的是值的引用,export之後,內部對這個值進行修改,最終export的是修改過的值。
CommonJS模組是執行時載入,ES6模組是編譯時載入。
兩者各有用武之地:
- 可以利用require做懶載入
- 而import是在編譯時載入。可以只載入用到的介面,而require會把所有export的介面都載入。
如果大家對“編譯
”有疑惑,請看如下連結和微信聊天截圖: - 《不是說js不需要編譯嗎,那‘ES6模組是編譯時載入’是什麼意思》
- 微信聊天截圖
4.參考
https://juejin.im/post/5aaa37c8f265da23945f365c
https://imweb.io/topic/582293894067ce9726778be9
https://www.cnblogs.com/cag2050/p/7419258.html
http://es6.ruanyifeng.com/#docs/module
相關文章
- require()、import、import()有哪些區別?UIImport
- import和require的區別ImportUI
- require 和 import 的區別?UIImport
- require和import引用的區別UIImport
- 談談import和require的區別ImportUI
- require和require_once的區別UI
- require 和 import 詳解UIImport
- web前端技術分享:詳解模組化require 和 import的區別Web前端UIImport
- require OR importUIImport
- from module import 和 import 的區別Import
- 虛擬主機和ECS有啥區別
- require 和 include 區別小記UI
- Spring框架和Spring boot有啥區別?框架Spring Boot
- link和@import的區別Import
- #import、#include、@import modules區別Import
- Linux和Windows有啥區別?Linux基礎LinuxWindows
- 容器和虛擬機器到底有啥區別?虛擬機
- immer 和useImmer兩個庫有啥區別
- Python 中 "is" 與 "==" 有啥區別?Python
- css link和@import的區別CSSImport
- go語言中變數前加 *和& 有啥區別啊Go變數
- link和@import引入css 區別,不建議使用@importImportCSS
- CSS中 link 和@import的區別CSSImport
- 微服務間的呼叫和應用內呼叫有啥區別微服務
- Dell T40和Dell T140有啥區別?
- Java 8 中的抽象類和介面到底有啥區別?Java抽象
- CTO、技術總監和技術經理有啥區別?
- CTO,技術總監和技術經理有啥區別?
- TypeScript 中 unknown 與 any 有啥區別TypeScript
- JavaScript中使用import 和require打包後實現原理JavaScriptImportUI
- import tkinter與from tkinter import *的區別Import
- module.exports、exports 、export default之間的差異區別及與require、import的使用ExportUIImport
- 過濾器和攔截器有啥區別,這次會了!過濾器
- 所以,e.target 和 e.currentTarget 到底有啥區別呢?
- Android 中的Dalvik和ART是什麼,有啥區別?Android
- 中外程式設計師到底有啥區別?程式設計師
- PHP 中 include 和 require 的概要及區別介紹PHPUI
- import、#include和@class有什麼區別 、相互引用標頭檔案問題Import