JavaScript?中require?和?import區(qū)別及用法示例對(duì)比
在 JavaScript 中,require 和 import 都是用來(lái)導(dǎo)入模塊的語(yǔ)法,但它們屬于不同的模塊系統(tǒng):CommonJS 和 ECMAScript Modules(ESM)。下面是它們之間的主要區(qū)別:
? 1.模塊系統(tǒng)不同
require: 是 CommonJS 的語(yǔ)法,主要用于 Node.js 環(huán)境。import: 是 ES6 (ECMAScript 2015) 引入的標(biāo)準(zhǔn)模塊系統(tǒng),廣泛用于現(xiàn)代前端框架(如 React、Vue)和現(xiàn)代瀏覽器。
? 2.加載方式不同
require 是 運(yùn)行時(shí)同步加載 模塊:
const fs = require('fs'); // 同步加載import 是 編譯時(shí)異步加載 模塊(靜態(tài)導(dǎo)入):
import fs from 'fs'; // 編譯時(shí)處理
?? 注意:import 也可以使用動(dòng)態(tài)導(dǎo)入(import())實(shí)現(xiàn)異步加載,返回一個(gè) Promise:
import('fs').then(fs => {
// 使用 fs
});? 3.導(dǎo)出語(yǔ)法對(duì)應(yīng)關(guān)系
| CommonJS | ES Modules |
|---|---|
module.exports | export default |
exports.xxx | export const xxx |
require() | import ... from ... |
? 4.使用環(huán)境不同
| 語(yǔ)法 | Node.js 支持情況 | 瀏覽器支持情況 |
|---|---|---|
require | 默認(rèn)支持(舊版本) | 不支持(需打包工具) |
import | 需設(shè)置 "type": "module" | 支持(現(xiàn)代瀏覽器) |
? 5.示例對(duì)比
?? 文件結(jié)構(gòu):
math.js main.js
math.js內(nèi)容:
// CommonJS
exports.add = (a, b) => a + b;
module.exports = { add };
// ES Module
export const add = (a, b) => a + b;
export default { add };main.js對(duì)比:
使用require:
const math = require('./math');
console.log(math.add(2, 3));使用import:
import { add } from './math';
console.log(add(2, 3));
// 或者導(dǎo)入默認(rèn)導(dǎo)出
import math from './math';
console.log(math.add(2, 3));? 6.兼容性與趨勢(shì)
- Node.js 從 v12 開(kāi)始支持 ESM,但需要設(shè)置
"type": "module"或使用.mjs擴(kuò)展名。 - 前端開(kāi)發(fā)推薦使用
import,它是未來(lái)的標(biāo)準(zhǔn)。 require仍然在很多老項(xiàng)目中使用,尤其是在 Node.js 生態(tài)中。
? 總結(jié)對(duì)比表
| 特點(diǎn) | require | import |
|---|---|---|
| 模塊系統(tǒng) | CommonJS | ES Modules (ES6+) |
| 加載時(shí)機(jī) | 運(yùn)行時(shí)同步 | 編譯時(shí)(靜態(tài)) |
| 是否支持異步 | ? 不支持 | ? 支持 (import()) |
| 默認(rèn)導(dǎo)出/具名導(dǎo)出 | ? 支持(需手動(dòng)設(shè)置) | ? 天然支持 |
| 推薦使用場(chǎng)景 | 老版 Node.js 項(xiàng)目 | 現(xiàn)代前端/Node.js ESM 項(xiàng)目 |
如果你是在寫(xiě)現(xiàn)代項(xiàng)目(如 Vue、React、TypeScript),建議使用 import;如果是維護(hù)舊的 Node.js 項(xiàng)目,則可能繼續(xù)用 require。
到此這篇關(guān)于JavaScript 中require 和 import區(qū)別及用法示例對(duì)比的文章就介紹到這了,更多相關(guān)JavaScript 中require 和 import區(qū)別內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
基于Css3和JQuery實(shí)現(xiàn)打字機(jī)效果
最近做項(xiàng)目,有需求實(shí)現(xiàn)一個(gè)字符逐個(gè)出現(xiàn),類(lèi)似于打字機(jī)效果,于是上網(wǎng)搜了相關(guān)資料,接下來(lái),小編就給大家詳細(xì)介紹基于Css3和JQuery實(shí)現(xiàn)打字機(jī)效果,需要的朋友可以參考下2015-08-08
JS+CSS實(shí)現(xiàn)電子商務(wù)網(wǎng)站導(dǎo)航模板效果代碼
這篇文章主要介紹了JS+CSS實(shí)現(xiàn)電子商務(wù)網(wǎng)站導(dǎo)航模板效果代碼,涉及JavaScript結(jié)合css動(dòng)態(tài)操作頁(yè)面元素屬性的相關(guān)技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2015-09-09
JavaScript數(shù)據(jù)結(jié)構(gòu)之鏈表的實(shí)現(xiàn)
鏈表是一種常見(jiàn)的數(shù)據(jù)結(jié)構(gòu)。它是動(dòng)態(tài)地進(jìn)行存儲(chǔ)分配的一種結(jié)構(gòu)。本文主要介紹JavaScript數(shù)據(jù)結(jié)構(gòu)中鏈表的實(shí)現(xiàn),具有很好的參考價(jià)值。下面跟著小編一起來(lái)看下吧2017-03-03
基于函數(shù)執(zhí)行的踩坑(addEventListener)
這篇文章主要介紹了基于函數(shù)執(zhí)行的踩坑(addEventListener),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-01-01
JSON 數(shù)據(jù)詳解及實(shí)例代碼分析
這篇文章主要介紹了JSON 數(shù)據(jù)詳解及實(shí)例代碼分析的相關(guān)資料,需要的朋友可以參考下2017-01-01
JavaScript將字符轉(zhuǎn)換為ASCII碼的實(shí)現(xiàn)方法
在Web前端開(kāi)發(fā)中,字符編碼是處理文本數(shù)據(jù)時(shí)不可或缺的一部分,ASCII是一種廣泛使用的字符編碼標(biāo)準(zhǔn),它為每個(gè)字符分配了一個(gè)唯一的數(shù)字表示,解如何將字符轉(zhuǎn)換為ASCII碼,對(duì)于解析、生成和操作字符串具有重要意義,本文將詳細(xì)介紹這一過(guò)程,并提供多個(gè)實(shí)用的代碼示例2024-12-12
JavaScript中工廠函數(shù)與構(gòu)造函數(shù)示例詳解
這篇文章主要給大家介紹了關(guān)于JavaScript中工廠函數(shù)與構(gòu)造函數(shù)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用JavaScript具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-05-05
javascript禁止訪客復(fù)制網(wǎng)頁(yè)內(nèi)容的實(shí)現(xiàn)代碼
這篇文章主要介紹了javascript禁止訪客復(fù)制網(wǎng)頁(yè)內(nèi)容的方法,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-08-08

