」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > JavaScript 中的 require 與 import

JavaScript 中的 require 與 import

發佈於2024-11-07
瀏覽:892

require Vs import In JavaScript

我記得當我開始編碼時,我會看到一些js檔案使用require()來匯入模組和其他檔案使用import。這總是讓我感到困惑,因為我並不真正理解其中的差異是什麼,或者為什麼專案之間存在不一致。如果您想知道同樣的事情,請繼續閱讀!

什麼是 CommonJS?

CommonJS 是一組用於在伺服器端 JavaScript(主要是 Node.js 環境)中實作模組的標準。在這個系統中,模組是同步載入的,這意味著腳本執行將被阻塞,直到模組載入為止。這是一種簡單的方法,但缺點是如果您嘗試加載一堆不同的模組,則會影響效能,因為它們必須在其他模組運行之前一個接一個地加載。

使用 CommonJS 時,您可以使用 module.exports 匯出功能並使用 require() 匯入它。

這是程式碼中的範例。

// In file multiple.js

module.exports = function multiply(x, y) {
    return x * y;
};
// In file main.js

const multiply = require(‘./multiply.js’);

console.log(multiply(5, 4)); // Output: 20

什麼是 ECMAScript (ES6)?

ES6,也稱為 ECMAScript,是 2015 年發布的較新版本的 JavaScript。此版本提供了使用導入和匯出語句非同步導入模組的功能。這意味著您正在執行的腳本可以在載入模組時繼續執行,因此不存在瓶頸。這也實現了一種稱為「樹搖動」的效率,我將在後面的文章中介紹這一點,但基本上,這意味著您只從正在使用的模組載入JavaScript,並且不會載入死程式碼(未使用的程式碼)進入瀏覽器。這一切都是可能的,因為 ES6 支援靜態和動態導入。

這是之前的相同範例,但這次我們使用導入和匯出。

// In file multiply.js

export const multiply = (x, y) => x * y;
// In file main.js

import { multiply } from ‘./multiply.js’;

console.log(multiply(5, 4)); // Output: 20

主要區別:require 與 import

require() 是 CommonJS 模組系統的一部分,而 import 是 ES6 模組系統的一部分。您將看到 require() 在 Node.js 環境中用於伺服器端開發,主要是在尚未採用 ES6 的遺留項目上。您將看到 import 在伺服器端和前端開發中使用,尤其是較新的專案以及任何前端框架(如 React 或 Vue)。

為什麼 import 比 require 更好?

正如我們之前提到的,導入是異步的,這可以帶來更好的效能,特別是在大型應用程式中。此外,由於可以靜態分析導入,因此 linter 和捆綁器等工具可以更有效地優化程式碼並實現樹搖動,從而縮小捆綁包大小並加快載入時間。語法也比 require() 更容易閱讀,這可以帶來更好的開發人員體驗,我們都希望如此!

什麼時候使用 require 和 import

你會在下列情況下使用 require():

  • 您正在開發一個舊版 Node.js 項目,該項目在 ES6 發布之前就已啟動且尚未更新。

  • 您需要在運行時動態載入模組,例如在設定檔中,或者如果您需要有條件地載入模組。

您將在下列情況下使用匯入:

  • 任何其他時間,因為這是現在的標準並且更有效率。

概括

一般來說,建議盡可能使用 import,因為它提供更多好處,並且是更新、更廣泛採用的模組系統。但是,在某些情況下,require() 可能仍然是更好的選擇,這取決於您的特定要求和您所在的環境。

如果您發現本文有幫助,請訂閱我的時事通訊,我將每週將更多類似內容直接發送到您的收件匣!

版本聲明 本文轉載於:https://dev.to/travislramos/require-vs-import-in-javascript-1ah4?1如有侵犯,請聯絡[email protected]刪除
最新教學 更多>
  • 購買亞馬遜評論
    購買亞馬遜評論
    https://dmhelpshop.com/product/buy-amazon-reviews/ 购买亚马逊评论 当谈到在亚马逊上进行商务和销售产品时,评论的重要性怎么强调都不为过。一条评论就可以决定购买的成败,而潜在的买家往往会犹豫是否购买缺乏评论的产品。缺乏评论可以起到威慑作用,这就是为什么...
    程式設計 發佈於2024-11-07
  • 使用 DTO 簡化 Laravel 中的資料傳輸
    使用 DTO 簡化 Laravel 中的資料傳輸
    這是如何使用 Laravel Data: 建立資料傳輸物件 (DTO) 的逐步範例 1. 安裝Laravel封包 首先,使用 Composer 安裝 spatie/laravel-data 套件。該軟體包有助於創建 DTO 並有效管理資料。 composer require spa...
    程式設計 發佈於2024-11-07
  • Go中如何找到與原始檔案相關的檔案?
    Go中如何找到與原始檔案相關的檔案?
    在Go中尋找相對於原始檔的檔案與解釋性語言不同,Go程式是經過編譯的,執行時不需要來源文件。因此,Ruby 中使用 __FILE__ 來相對於原始檔案定位檔案的概念在 Go 中並不適用。 相反,Go 提供了 runtime.Caller 函數,該函數會傳回呼叫時的檔名。彙編。但是,此資訊對於動態定位...
    程式設計 發佈於2024-11-07
  • 如何在 Python 中高效率地統計專案出現次數?
    如何在 Python 中高效率地統計專案出現次數?
    提高效率的 Python 中項目頻率計數計算清單中項目的出現次數是一項常見的程式設計任務。這個問題探討了在 Python 中解決此問題的更有效方法。 最初提供的程式碼雖然功能強大,但涉及到對清單進行兩次迭代,從而導致效能不佳。關鍵的挑戰在於找到一種 Pythonic 方法來計算專案出現次數,而無需重...
    程式設計 發佈於2024-11-07
  • 探索非同步 Deepgram API:使用 Python 進行語音轉文本
    探索非同步 Deepgram API:使用 Python 進行語音轉文本
    今天將探索用於將語音轉換為文字的 Deepgram API [轉錄]。無論是建立語音助理、轉錄會議還是創建語音控制應用程序,Deepgram 都讓入門變得比以往更容易。 什麼是 Deepgram? Deepgram 是一個強大的語音辨識平台,它使用先進的機器學習模型來即時轉錄音訊。...
    程式設計 發佈於2024-11-07
  • 如何處理 PHP JSON 編碼中格式錯誤的 UTF-8 字元?
    如何處理 PHP JSON 編碼中格式錯誤的 UTF-8 字元?
    處理PHP JSON 編碼中格式錯誤的UTF-8 字元使用json_encode() 序列化包含俄語字元的陣列時,您可能會遇到與格式錯誤的UTF-8 字元相關的錯誤。若要解決此問題,請執行下列步驟:步驟 1:識別字元編碼使用 mb_detect_encoding() 決定包含俄語字元的欄位的編碼。確...
    程式設計 發佈於2024-11-07
  • 在 Java 認證考試中使用 Var 的 ips
    在 Java 認證考試中使用 Var 的 ips
    Java 認證考試需要深入了解該語言及其各種功能,包括使用 var 進行局部變數類型推斷。雖然這看起來像是一個小細節,但它會極大地影響程式碼的可讀性和效率。為了幫助您在 Java 認證考試中取得好成績,這裡有四個在程式碼中使用 var 的技巧: 1.在增強的 for 迴圈中使用 var: 由於迴圈控...
    程式設計 發佈於2024-11-07
  • 透過製作(愚蠢的)故事產生器來學習狀態管理(學習 Modulo.js - 第 f 部分
    透過製作(愚蠢的)故事產生器來學習狀態管理(學習 Modulo.js - 第 f 部分
    ?欢迎回来!没听懂第 1 部分吗?不用担心,您可以从头开始,也可以直接从这里开始! 简介:SillyStory Web 组件 本教程中我们的任务是构建一个故事生成组件。这将为我们提供大量使用 State 的练习。上次我们以一个有点像下面的片段结束。然而,在本教程中,我们更改了“模板”...
    程式設計 發佈於2024-11-07
  • 取得下一行學習如何處理檔案描述符和系統 I/O 的項目
    取得下一行學習如何處理檔案描述符和系統 I/O 的項目
    在 C 编程领域,有效管理输入、输出和内存是基础。为了帮助您掌握这些关键概念,您将在 get_next_line 项目中编写一个使用文件描述符逐行读取文件的函数。每次调用该函数都会从文件中读取下一行,从而允许您一次一行处理整个文件内容。 了解系统中的文件描述符和 I/O ...
    程式設計 發佈於2024-11-07
  • 為什麼Go的main函數有死迴圈?
    為什麼Go的main函數有死迴圈?
    Go 運行時:主函數中無限循環之謎Go 運行時的核心位於src/runtime/proc.go,其中有一個令人費解的功能:主函數末尾有一個無限的for 迴圈。人們可能想知道為什麼運行時中存在這樣一個看似毫無意義的構造。 目的:偵測致命錯誤深入研究程式碼,很明顯循環服務於錯誤處理的關鍵目的。當發生致命...
    程式設計 發佈於2024-11-07
  • iostream 與 iostream.h:現代 C++ 應該使用哪一個?
    iostream 與 iostream.h:現代 C++ 應該使用哪一個?
    iostream 和iostream.h 之間的區別在C 中,程式設計師可能會遇到兩個具有類似目的的術語:iostream 和iostream.h 。本指南旨在闡明兩者之間的根本差異。 iostream.h:已棄用的舊版iostream.h 是 C 函式庫中的一個頭文件,它提供一組輸入/輸出函數。對...
    程式設計 發佈於2024-11-07
  • VLONE Clothing:重新定義都市時尚的街頭服飾品牌
    VLONE Clothing:重新定義都市時尚的街頭服飾品牌
    VLONE 是少数几个在快速变化的市场中取得超越街头服饰行业所能想象的成就的品牌之一。 VLONE 由 A$AP Mob 集体的电影制片人之一 A$AP Bari 创立,现已发展成为一个小众项目,有时甚至成为都市时尚界的国际知名品牌。 VLONE 凭借大胆的图案、深厚的文化联系和限量版发售,在时尚界...
    程式設計 發佈於2024-11-07
  • 如何使用PDO查詢單行中的單列?
    如何使用PDO查詢單行中的單列?
    使用 PDO 查詢單行中的單列處理針對單行中特定列的 SQL 查詢時,通常需要檢索直接取值,無需循環。要使用 PDO 完成此操作,fetchColumn() 方法就派上用場了。 fetchColumn() 的語法為:$col_value = $stmt->fetchColumn([column...
    程式設計 發佈於2024-11-07
  • 我如何建立 PeerSplit:一個免費的點對點費用分攤應用程式 — 從構思到發布僅需數週時間
    我如何建立 PeerSplit:一個免費的點對點費用分攤應用程式 — 從構思到發布僅需數週時間
    我构建了 PeerSplit——一个免费的、点对点的 Splitwise 替代品——从想法到发布仅用了两周时间! PeerSplit 是一款本地优先的应用程序,用于分配团体费用。它可以离线工作,100% 免费且私密,不需要注册或任何个人数据。 以下是我如何构建它以及我在此过程中学到的一切。 ...
    程式設計 發佈於2024-11-07

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3