Node.js 模塊導入的基本流程

Node.js 模塊導入的基本流程,主要是 CommonJS 模塊加載機制(即使用 require())的內部執行步驟。下面我用清晰的結構給你梳理一下這個過程:


? Node.js 模塊導入的基本流程(使用 require()

const someModule = require('./someModule');

👣 加載流程詳解:


解析模塊路徑

  • Node.js 會先判斷傳入的是:
    • 核心模塊(如 fs, http 等);
    • 第三方模塊(node_modules 中找);
    • 相對路徑模塊(以 ./../ 開頭);
    • 絕對路徑模塊(如 /Users/...)。

定位文件(模塊路徑解析)

  • 以相對路徑為例:require('./someModule'),Node.js 會嘗試依次查找以下幾種形式:
./someModule.js
./someModule.json
./someModule.node
./someModule/index.js   # 如果是目錄

緩存檢查

  • Node.js 會先查看該模塊是否已在 緩存 中(require.cache)。
  • 如果存在緩存,則直接返回緩存結果(即模塊導出的對象)。

編譯模塊

  • Node.js 根據不同文件類型執行不同的加載方式:
文件類型加載方式
.js作為 JavaScript 代碼加載(包一層函數)
.json使用 JSON.parse() 解析為對象
.node使用 C++ 插件方式加載(動態鏈接庫)
  • 對于 .js 文件,Node.js 會將模塊代碼包裝成如下形式:
(function(exports, require, module, __filename, __dirname) {// 原始模塊代碼
})

這叫做 模塊包裝(Module Wrapper),讓模塊擁有自己的作用域。


執行模塊代碼

  • 在模塊包裝完成后,Node.js 執行模塊代碼,并把 module.exports 作為結果返回。

返回 exports 對象

  • 最終,require() 返回的是 module.exports 的內容。

💡 一個完整的生命周期圖示(簡略):

require() 調用↓
路徑解析↓
緩存檢查(require.cache)↓
文件定位(.js/.json/.node)↓
模塊包裝(function wrapper)↓
模塊執行(module.exports)↓
結果返回

🧠 補充:模塊緩存細節

  • 所有加載過的模塊都會被緩存(除非手動清理):
    delete require.cache[require.resolve('./someModule')];
    

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/77829.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/77829.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/77829.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

n8n 中文系列教程_02. 自動化平臺深度解析:核心優勢與場景適配指南

在低代碼與AI技術深度融合的今天,n8n作為開源自動化平臺正成為開發者提效的新利器。本文深度剖析其四大核心技術優勢——極簡部署、服務集成、AI工作流與混合開發模式,并基于真實場景測試數據,厘清其在C端高并發、多媒體處理等場景的邊界。 一…

【C++ Qt】信號和槽(內配思維導圖 圖文并茂 通俗易懂)

每日激勵:“不設限和自我肯定的心態:I can do all things。 — Stephen Curry” 緒論?: 本章是Qt中的第三章,也是我們理解Qt中必備的點 信號槽,它本質由信號和槽兩個來實現,其中將細致的講述如何自定義信號…

【項目】基于MCP+Tabelstore架構實現知識庫答疑系統

基于MCPTabelstore架構實現知識庫答疑系統 整體流程設計(一)Agent 架構(二)知識庫存儲(1)向量數據庫Tablestore(2)MCP Server (三)知識庫構建(1&a…

免費將靜態網站部署到服務器方法(僅支持HTML,CSS,JS)

原視頻鏈接:把HTML免費部署到網站上,實現別人也能訪問的教程來啦QAQ_嗶哩嗶哩_bilibili 注意:僅支持HTML、CSS、JS。不支持Vue等框架。 1.打開網站www.wordpress.org 點擊紅框按鈕 點擊紅框按鈕下載wordpress模板文件并解壓。 將自己編寫的…

游戲引擎學習第235天:在 Windows 上初始化 OpenGL

奇怪有問題 之前沒注意到 這個問題是Count 0 GlobalConstants_Renderer_UsedDebugCamer 打開的話會有Bug Count是零的話就不讓排序了 game.h: 查閱 TODO 列表 大家好,歡迎來到 game Hero,這是一檔我們在直播中一起編寫完整游戲的節目。不幸的是&a…

使用eCharts繪制中國地圖

eCharts官網&#xff1a;https://echarts.apache.org/zh/index.html 1. 首先新建一個html頁面&#xff0c;并引入echarts <html lang"en"><head><meta charset"UTF-8" /><meta name"viewport" content"widthdevice-…

Linux與Anaconda環境部署與管理(運維交接)

文章目錄 一、前言二、Linux基礎命令三、進程管理與監控四、后臺任務與服務管理五、Anaconda環境管理六、JAR包的運行與管理七、網絡與端口映射八、安全與權限管理九、故障排查與日志分析十、附錄 一、前言 本文將詳細介紹Linux系統下的常用命令以及Anaconda環境管理&#xff…

php:實現壓縮文件上傳、解壓、文件更名、刪除上傳臨時文件、存入數據庫等操作

一、效果圖 1.上傳文件 2.壓縮包文件 3.itemno1文件 二層結構 或 三層結構 4.上傳到系統路徑\ItemNo 5.更名后的itemno1文件(命名:當天日期+六位隨機數) 二、普通實現 1、內容介紹 含有兩種結構 二層結構:zip->料號文件夾->料號文件三層結構:zip->總文件夾-&g…

基于大語言模型的減肥健身計劃系統設計與實現

基于大語言模型的減肥健身計劃系統設計與實現 【包含內容】 【一】項目提供完整源代碼及詳細注釋 【二】系統設計思路與實現說明 【三】功能演示與部署指南 【技術棧】 ①&#xff1a;系統環境&#xff1a;Python 3.x Django 4.2 ②&#xff1a;開發環境&#xff1a;Web服務…

c#開發大沖鋒游戲登錄器

1 前言 本文主要分享登錄器的簡要開發過程&#xff0c;只適合小白選手&#xff0c;高手請自動避讓。 此項目是復刻大沖鋒計劃中的子集。 &#xff08;注&#xff1a;大沖鋒是迅雷代理的一款次時代多職業第一人稱FPS射擊游戲&#xff0c;目前已經關服嗝屁。&#xff09; 2 …

Linux[基礎指令][2]

Linux[基礎指令][2] cp(復制) 格式:cp [-rf] 源文件 {普通文件,目錄} 拷貝 cp -r 遞歸拷貝目錄 藍色為目錄,白色為具體文件 拷貝后面加一個不存在的文件會新建文件再拷貝 cp -ir -i是覆蓋的時候詢問 如果目標文件存在就會覆蓋原有文件 mv(重命名/剪切) 格式:mv 源文件…

React18+ 項目搭建-從初始化、技術選型到開發部署的全流程規劃

搭建一個 React 項目需要從項目初始化、技術選型到開發部署的全流程規劃。以下是詳細步驟和推薦的技術棧&#xff1a; 一、項目初始化 1. 選擇腳手架工具 推薦工具&#xff1a; Vite&#xff08;現代輕量級工具&#xff0c;支持 React 模板&#xff0c;速度快&#xff09;&am…

人工智能學習框架完全指南(2025年更新版)

一、核心框架分類與適用場景 人工智能框架根據功能可分為深度學習框架、機器學習框架、強化學習框架和傳統工具庫,以下是主流工具及選型建議: 1. 深度學習框架 (1)PyTorch 核心優勢:動態計算圖、靈活性強,適合科研與快速原型開發,支持多模態任務(如NLP、CV) 。技術生…

MySQL 詳解之事務管理

MySQL 詳解之事務管理 在數據庫領域,事務是一個核心概念,它確保了數據操作的可靠性和一致性。尤其是在處理涉及多個步驟且必須全部成功或全部失敗的業務場景時,事務更是不可或缺。本篇文章將深入探討 MySQL 中的事務管理,幫助您全面理解事務的工作原理及其在實際應用中的重…

SpringAI+DeepSeek大模型應用開發——5 ChatPDF

ChatPDF 知識庫 RAG檢索增強 由于訓練大模型非常耗時&#xff0c;再加上訓練語料本身比較滯后&#xff0c;所以大模型存在知識限制問題&#xff1a; 知識數據比較落后&#xff0c;往往是幾個月之前的&#xff1b;不包含太過專業領域或者企業私有的數據&#xff1b; 為了解決…

SSH 互信被破壞能導致 RAC 異常關閉嗎

一、 SSH 互信和 RAC 的關系 1、SSH 互信對 RAC 的作用 Oracle 11g R2 在安裝 Grid Infrastructure 的時候&#xff0c;能夠通過安裝程序配置節 點間的 SSH 用戶等效性&#xff0c;之所以要在安裝之前配置 SSH 用戶等效性&#xff0c;是為了能 夠在安裝前使用 C…

【數字圖像處理】立體視覺信息提取

雙目立體視覺原理 設一個為參考平面&#xff0c;一個為目標平面。增加了一個攝像頭后&#xff0c;P與Q在目標面T上有分別的成像點 雙目立體視覺&#xff1a;從兩個不同的位置觀察同一物體&#xff0c;用三角測量原理計算攝像機到該物體的距離的 方法 原理&#xff1a;三角測量…

基于springboot+vue的校園二手物品交易平臺

開發語言&#xff1a;Java框架&#xff1a;springbootJDK版本&#xff1a;JDK1.8服務器&#xff1a;tomcat7數據庫&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;數據庫工具&#xff1a;Navicat11開發軟件&#xff1a;eclipse/myeclipse/ideaMaven包&#xff1a;…

【Redis】Redis基本命令(1)

KEYS 返回所有滿足樣式&#xff08;pattern&#xff09;的key。 KEY * 返回所有key&#xff0c;不簡易使用 性能問題&#xff1a;當 Redis 存儲百萬級鍵時&#xff0c;會消耗大量 CPU 和內存資源&#xff0c;Redis 是單線程模型&#xff0c;KEYS * 執行期間會阻塞其他所有命令…

C#通用常見面試題-精心整理

以下是優化后的版本,在原有內容基礎上補充了應用場景,其他結構保持不變: 上位機面試題解答(技術詳解+示例) C#-IOC框架 1. 值類型和引用類型的本質區別 解釋 值類型:存儲在棧中,直接保存數據值(如 int, struct)。引用類型:存儲在堆中,變量保存對象地址(如 class,…