JS 模塊化與打包工具

一、模塊化體系:ESM vs CJS 深入

1.語法與靜態性

(1)ESM:靜態語法,可被打包器做 Tree-shaking

  • export function play() {}
  • export default ...
  • import { play } from './mod.js'

(2)CJS:運行時 require() , 分析能力弱,不利于 Tree-shaking

2.Node 解析規則

(1)package.json 有 "type": "module"?→ .js 當 ESM,CJS 用 .cjs

(2)沒有"type":"moudle"?→ .js 當 CJS,ESM 用 .mjs

(3)ESM模式下導入需帶后綴:import './mod.js'

3.互操作常見坑

(1)從 CJS 默認導出到 ESM: import pkg from 'cjs-pkg' 可能需要 default ,視包而定

(2)ESM的頂層 await import() 可用于懶加載(瀏覽器需<script type="module">)

4.瀏覽器直載 ESM:<script type="module" src="/src/index.js"> 可工作,但生產一般仍用打包器做壓縮/緩存/分隔

二、npm 與依賴管理

1.依賴分層

(1) dependencies : 運行時要用(瀏覽器/Node 產物實際需要)

(2) devDependencies:僅開發/構建/測試(如 webpack 、typescript )

2.版本策略:^1.2.3:允許次/補丁更新;~1.2.3:只允許補丁更新。線上穩定期可固定版本

3.腳本編排: build/dev/test/lint/format 統一入口,CI 直接調用,冪等可重試

4.鎖文件:固定依賴樹,保證本地與 CI 一致性;發布或回歸時避免“幽靈問題”

三、打包器的價值與核心概念

1.為什么要打包

(1)體積與性能:壓縮、去未用代碼、緩存友好命名

(2)兼容性與生態:TS/SCSS/圖片/字體/JSON 等統一處理與優化

(3)架構能力:代碼分割(按需)、預渲染、資源內聯/懶載

2.Tree-shaking:需要 ESM 靜態導入;包需標記 sideEffects:false(或為有副作用文件列白名單)

3.代碼分割

(1)靜態多入口:

entry: { app: '...', admin: '...' }

(2)動態導入:

import('./scenes/scene1_birth')

?→ 自動生成獨立 chunk

4.緩存策略

(1)文件名包含 [contenthash] ,瀏覽器長期緩存;HTML/入口負責指向最新名

(2)依賴庫與業務分離提升復用緩存命中率

四、Webpack 入門到實踐要點

1.最小依賴

  • webpack
  • webpack-cli
  • typescript
  • ts-loader

2.基本配置點

  • entry/output
    :指定入口、
    filename: [name].[contenthash].js
    clean: true
  • resolve.extensions: ['.ts', '.js']
  • module.rules
    ts-loader
    處理?
    .ts
  • optimization.splitChunks: { chunks: 'all' }
    拆公共依賴

3.動態導入分包

ts

// 假設放在 src/index.ts
document.querySelector('#playScene1')?.addEventListener('click', async () => {const mod = await import('./scenes/scene1_birth'); // 產出獨立 chunkmod.play();
});

4.副作用控制:

  • package.json
    加?
    "sideEffects": false
    (若確無副作用的模塊),讓未用導出被安全移除。

5.資源處理:簡單可使用 asset/resource (內置)或拷貝插件,把 assets/ 拷到 build/assets/

6.HTML輸出:html-webpack-plugin 自動注入最新 hash 腳本,避免手改文件名

五、Vite / esbuild 對比

1.Vite (推薦開發體驗)

(1)Dev:原生 ESM + 極速 HMR

(2)Build:走 Rollup,分包/CSS/資源生態成熟

(3)TS支持好、配置輕

2. esbuild (極快):打包速度快;復雜生態與 HTML 注入等需額外方案

3.Webpack(覆蓋面最全):復雜/歷史項目強;配置相對繁瑣,Dev 體驗不如 Vite

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

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

相關文章

防御保護11

帶寬管理 --- 設備對自身的流量進行管理和控制&#xff0c;去提供帶寬保證、帶寬限制等等功能。 帶寬限制 帶寬保證 連接數限制 應用場景 實現帶寬管理 帶寬通道 --- 定義了被管理對象所能使用的帶寬資源 整體的保證帶寬和最大帶寬&#xff1b; SW1-SW2&#xff1a;VLAN 201 --…

[激光原理與應用-254]:理論 - 幾何光學 - 自動對焦的原理

自動對焦&#xff08;Auto Focus, AF&#xff09;是現代光學系統&#xff08;如相機、手機攝像頭、監控設備等&#xff09;的核心功能之一&#xff0c;其原理是通過檢測成像面的清晰度或測量物體距離&#xff0c;驅動透鏡組移動至最佳對焦位置。以下是自動對焦的詳細原理及技術…

【Python辦公】Mermaid代碼轉圖片工具 - Tkinter GUI版本

目錄 專欄導讀 項目簡介 功能特性 ?? 直觀的圖形界面 ?? 代碼編輯功能 ??? 圖片生成與預覽 ?? 文件操作 ? 性能優化 技術架構 核心技術棧 架構設計 安裝與使用 環境要求 依賴安裝 運行程序 使用步驟 代碼示例 基本流程圖 時序圖 甘特圖 核心代碼解析 1. 主類結構 2. …

【Activiti】要點初探

Activiti 7.0.0配置 流程配置節點流程XML流程部署部署后會操作表&#xff1a;&#xff08;每部署一次增加一條記錄&#xff09; ACT_RE_DEPLOYMENT 流程定義部署表 ACT_RE_PROCDEF 流程定義表 ACT_GE_BYTEARRAY 流程啟動查看任務&#xff08;張三要查看準備辦理任務&#xff0…

VBS 字符串處理

一. 字符串是由Unicode字符組成的一串字符。通常由數字&#xff0c;字母&#xff0c;符號組成。二. 常用函數1. 消除空格 Ltrim: 刪除字符串左側的空格。 Rtrim: 刪除字符串右側的空格。 trim: 刪除字符串左側和右側的空格。a" hello " b"sx"msgbo…

《算法導論》第 21 章-用于不相交集合的數據結構

引言不相交集合&#xff08;Disjoint Set&#xff09;&#xff0c;也稱為并查集&#xff08;Union-Find&#xff09;&#xff0c;是一種非常實用的數據結構&#xff0c;主要用于處理一些元素分組的問題。它支持高效的集合合并和元素查找操作&#xff0c;在很多算法中都有重要應…

基于51單片機RFID智能門禁系統紅外人流量計數統計

1 系統功能介紹 本設計基于STC89C52單片機&#xff0c;集成RFID讀卡器、紅外避障傳感器、繼電器、LCD1602液晶顯示和蜂鳴器&#xff0c;實現智能門禁與人流量統計功能。系統能夠識別合法的RFID卡開門&#xff0c;并實時統計通過人數&#xff0c;具有安全報警和直觀顯示功能。具…

c#,vb.net全局多線程鎖,可以在任意模塊或類中使用,但盡量用多個鎖提高效率

Public ReadOnly LockObj As New Object() 全局多線程鎖 VB.NET模塊中的LockObj 可以在任意模塊或類中使用吧 在 VB.NET 中&#xff0c;模塊&#xff08;Module&#xff09;中聲明的 Public ReadOnly LockObj 可以被其他模塊或類訪問和使用&#xff0c;但需要注意其可見性范圍…

企業安全運維服務計劃書

安全運維服務計劃書 一、概述 為保障企業信息系統安全、穩定、高效運行,防范各類網絡安全風險,提升整體安全防護能力,特制定本安全運維服務計劃書。本計劃旨在通過系統化、規范化的安全運維流程,全面識別、評估、處置并持續監控企業網絡環境中的安全風險,構建主動防御與…

小杰python高級(four day)——matplotlib庫

1.繪制子圖的方式pyplot中函數subplotFigure類中的函數add_subplotpyplot中函數subplotsfig, ax plt.subplots(nrows1, ncols1, *, sharexFalse, shareyFalse,squeezeTrue, subplot_kwNone, gridspec_kwNone, **fig_kw) 功能&#xff1a;繪制多個子圖&#xff0c;可以一次生成…

C# 編程out 參數需要在函數體內部初始化,然后引用的時候無需初始化

核心規則方法內部必須初始化&#xff1a;在方法體中&#xff0c;必須在方法返回前對 out 參數顯式賦值&#xff08;未賦值會導致編譯錯誤&#xff09;調用時無需初始化&#xff1a;調用方傳遞 out 參數前不需要初始化變量&#xff08;可直接使用未賦值的局部變量&#xff09;下…

【Redis在數據治理與數據隱私保護策略中的優化】

## Redis的自動補全功能&#xff1a;用戶體驗的無縫之助Redis作為一款高效的開源緩存數據庫&#xff0c;始終在用戶體驗優化方面走在前列。其自動補全功能的引入&#xff0c;為用戶帶來了全新的搜索體驗。這種功能不僅提升了搜索效率&#xff0c;更為用戶提供了更智能化的服務。…

Sklearn 機器學習 異常值檢測 局部異常因子算法LOF

??親愛的技術愛好者們,熱烈歡迎來到 Kant2048 的博客!我是 Thomas Kant,很開心能在CSDN上與你們相遇~?? 本博客的精華專欄: 【自動化測試】 【測試經驗】 【人工智能】 【Python】 Sklearn 機器學習異常值檢測:局部異常因子算法(LOF) 在實際的機器學習任務中,異常…

衡量機器學習模型的指標

為了進一步了解模型的能力&#xff0c;我們需要某個指標來衡量&#xff0c;這就是性能度量的意義。有了一個指標&#xff0c;我們就可以對比不同的模型了&#xff0c;從而知道哪個模型相對好&#xff0c;哪個模型相對差&#xff0c;并通過這個指標來進一步調參以逐步優化我們的…

Day24|學習前端CSS

HTML把一大段雜亂無章的話&#xff0c;調整變成文章格式顏色rgba&#xff0c;16進制CSS選擇器&#xff08;從上往下&#xff0c;權重越低&#xff09;類選擇器#&#xff08;為多個元素設計相同樣式偽類選擇器&#xff1a;和類選擇器.元素選擇器p&#xff0c;div&#xff0c;li通…

初識數據結構——優先級隊列(堆!堆!堆!)

數據結構專欄 ?(click) 今天就讓我們來聊聊這個讓無數程序員又愛又恨的數據結構——堆&#xff08;Heap&#xff09;。 一、優先級隊列 vs 普通隊列 特性普通隊列優先級隊列出隊順序FIFO&#xff08;先進先出&#xff09;按優先級高低&#xff08;默認小的先出&#xff09;底…

嵌入式學習day25

fwrite&#xff1a;fread&#xff1a;fread/fwrite&#xff1a;拷貝圖片&#xff1a;#include <stdio.h>int main(void) {FILE *fsrc NULL;FILE *fdst NULL;char tmpbuff[4096] {0};size_t nret 0;fsrc fopen("src.jpg", "r");if (NULL fsrc){…

2025年中科院2區紅杉優化算法Sequoia Optimization Algorithm-附Matlab免費代碼

1. 簡介 提出了紅杉優化算法&#xff08;SequoiaOA&#xff09;&#xff0c;這是一種受紅杉森林生態系統自我調節動力學和彈性啟發的新型元啟發式方法&#xff0c;不同于傳統的奇異生物學或現象學靈感。開發一個全面的生態系統驅動框架&#xff0c;包括數學建模、系統分析和通過…

【C#】從 Queue 到 ConcurrentQueue:一次對象池改造的實戰心得

背景 最近在做一個圖像處理的 WPF 項目&#xff0c;底層使用 Halcon 的 HObject 來存放圖像。為了減少頻繁創建和釋放對象帶來的開銷&#xff0c;我實現了一個對象池&#xff0c;用來存放 HObject&#xff0c;方便后續流程復用。 最初的實現用的是 .NET 自帶的 Queue<T>&…

深度解析 AS32S601 芯片 CAN Bus Off 機制:從原理到應用的全流程指南

一、前言在汽車電子、工業自動化等眾多領域&#xff0c;CAN 總線作為一種可靠的通信協議被廣泛應用。而 AS32S601 芯片憑借其卓越的性能和可靠性&#xff0c;在這些領域也發揮著重要作用。其中&#xff0c;CAN Bus Off 功能作為 CAN 總線通信中的關鍵錯誤處理機制&#xff0c;對…