Webpack核心技能:Webpack安裝配置與模塊化

一、webpack 的安裝和使用

1. webpack 簡介

webpack 是基于模塊化的打包 (構建)工具,它把一切視為模塊(包括 JS、CSS、圖片等資源文件)。

  • 工作原理:
    • 以開發時態的入口模塊為起點
    • 遞歸分析所有依賴關系
    • 經過壓縮、合并等處理
    • 最終生成運行時態的文件
    • 如上圖 webpack 官方首頁圖片;左邊的代碼不運行,只運行右邊的代碼。左邊的代碼和右邊的功能是一樣的,只不過瀏覽器喜歡右邊的代碼。

2. webpack 的特點:

    • 工程化解決方案: webpack誕生于2012年,專注于解決前端工程化問題 ,尤其是瀏覽器端工程化遇到的問題(node 端也用 webpack 只不過用的少),讓開發者專注業務代碼,把工程化過程中的問題(比如開發兼容性、執行效率等)交給 webpack 來處理。
    • 零配置使用:支持開箱即用,無需額外配置
    • 生態擴展性: 雖然核心功能有限,但通過擴展機制支持豐富的第三方插件,形成活躍的生態系統(目前生態活躍度遠超其他構建工具)
    • node.js :從入口文件開始要讀取文件,讀出來之后才能分析里邊用了 require/import 語句分析依賴關系,如果是在瀏覽器環境是讀取不了文件的。是圖片中間的過程需要 node 環境。
    • 基于模塊化:webpack 在構建過程中要分析依賴關系,方式是通過模塊化導入語句進行分析,它支持各模塊化標準,包括但不限于 CommonJS、ES6 Module。

3. webpack 的安裝

1) webpack 通過 npm 安裝

  • webpack:核心包,webpack 核心包包含構建過程中所需的所有 API ,用于處理模塊依賴分析和打包過程。
  • webpack-cli:提供命令行接口,通過調用 webpack 核心包的 api,來完成構建工程,開發者無需編寫構建代碼。
  • 安裝方式:必須用過 npm 安裝,因為 webpack 運行在 Node.js 環境中。

2) 安裝方式

  • 全局安裝與本地安裝
    • 全局安裝特點:
      • 優點:可在任意目錄使用 webpack 命令
      • 缺點:所有項目強制使用相同版本,無法滿足不同項目的版本需求
    • 本地安裝優勢:
      • 每個項目獨立管理 webpack 版本
      • 配合 npx 工具使用,無需全局安裝
      • 推薦使用本地安裝方式
  • 本地安裝步驟
    • 初始化項目:
      • 執行 npm init 創建 package.json 文件
      • 注意項目名稱需要符號 URL 規范(不含中文和特殊字符)
    • 安裝命令:

npm i -D webpack webpack-cli

為什么要加 -D 安裝開發依賴呢,是因為運行代碼時不需要 webpack ,從 webpack 首頁圖也能看出,webpack 是開發到運行的中間過程。

    • 驗證安裝:
      • 檢查node_modules/.bin目錄下的可執行文件
      • 查看package.json中的devDependencies字段

說一下安裝開發依賴時如何選擇開發依賴,生產環境只需運行構建后的代碼,不再需要 webpack,構建過程屬于開發階段的工作。我們想要區分就看運行時是否需要該依賴即可。

依賴類型有開發依賴和生產依賴,開發依賴僅在開發階段需要的工具(如 webpack、測試工具等),而生產依賴是項目運行時必須的包(如 React、Vue 等)

3)使用

  • webpack 的入口文件

webpack 要在開發時態分析依賴,那么就一定需要一個入口文件來分析,默認情況下,webpack 會以 ./src/index.js 作為入口文件分析依賴關系,打包到 ./dist/main.js 文件中(無論開發時有多少個模塊文件,最終都會合并成一個 main.js),必須要有 src/index.js 文件才能正常進行打包。

src 表示源代碼目錄(source),是開發階段代碼存放位置

dist 表示目標嗎目錄(destination),是運行時態代碼存放位置

從這張圖片可以看出,在開發時怎么簡便怎么來,不管是用 es 還是 common ,最終都會打包運行時轉換為普通的 js 函數,不會出現 commonjs 和 es6 模塊化。我們以后開發就可以集中精力開發 src ,dist 目錄不用管就行,我們只需把 src 寫好了運行一下 npx webpack 命令。

在之前寫的前端工程化包管理器文章中提到的腳本,在package.json文件中有一個scripts對象,用于定義可運行的腳本命令,這里我們可以定義一個腳本命令用于打包。

在 package.json 中配置 build 腳本執行 webpack ,通過 npm run build 命令觸發打包,開發時專注 src 目錄代碼,構建時運行打包命令生成 dist。

注意:為什么在腳本的值寫 webpack 而不是 npx webpack,是因為配置在 package.son 中的命令,它會自動查找 node_modules 中 .bin 中的 wepack 執行命令。

4. 構建結果的運行環境

webpack 運行警告信息解釋

  • 警告原因:webpack 打包時缺少 mode 參數配置,默認會使用 production 模式
  • 環境區分:
    • 開發環境(development):代碼未完成,用于測試調試階段
    • 生產環境(production):代碼已完成,將部署到服務器運行
  • 模式影響:
    • 開發環境:保留代碼格式和注釋,便于調試
    • 生產環境:進行代碼壓縮等優化,減小體積
  • 配置方法:
    • 命令行方式:npx webpack --mode=development 或 --mode==production
    • npm 腳本配置:

  • 重要概念:
    • 開發階段:
      • 這是開發階段而不是開發環境,開發階段是編寫和修改代碼的過程
    • 運行環境:
      • 打包后代碼實際執行的環境
    • 環境差異:生產環境會進行更多優化,開發環境保留調試信息

二、模塊化兼容性

由于 webpack 同時支持 CommonJS 和 ES6 module 模塊化標準,也就是說我們無論是用 Common 還是 ES6 寫的代碼它都能識別它們的依賴,并且進行打包。在這里產生了一個問題,如果說一個模塊,是用 ES6 導出,但用 CommonJS 導入,webpack 會怎么來處理呢?它導入的是什么?導出的又是什么?這個時候我們就需要理解在不同的模塊化標準里邊,它們互相操作的時候 webpack 是如何處理的。

1. 同模塊化標準

當導出和導入使用同一種模塊化標準時,webpack 的處理效果與原生模塊化完全一致。

2. 不同模塊化標準

  • ES6 導出 + CommonJS 導入:

將 ES6 的基本導出和默認導出合并為一個對象,通過 require 直接獲取該對象

  • CommonJS 導出 + ES6 導入:

將 module.exports 內容作為默認導出

3. 模塊化兼容性

選擇一個模塊化標準,避免混合使用不同模塊化標準

項目開發中統一使用 ES6 或 CommomJS 中的一種

  • 第三方庫導入時:
    • 大部分庫使用 CommonJS 導出,可用 ES6 默認導入方式
    • 遇到 ES6 導出的庫時,注意默認導出在 default 屬性中

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

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

相關文章

數據結構---二級指針(應用場景)、內核鏈表、棧(系統棧、實現方式)、隊列(實現方式、應用)

一、二級指針的應用場景1、在被調函數中,想要修改主調函數中的指針變量,需要傳遞該指針變量的地址,形參用二級指針接收。2、指針數組的數組名是一個二級指針,指針數組的數組名作為參數傳遞時,可用二級指針接收。指針數…

NodeJs學習日志(1):windows安裝使用node.js 安裝express,suquelize,sqlite,nodemon

windows安裝使用node.js 安裝express,suquelize,sqlite 系統是win10,默認已經安裝好nodejs與npm包名作用expressWeb應用框架suquelize數據庫ORMsqlite數據庫nodemon代碼熱重載安裝express 添加express生成器 npm add express-generator4安裝e…

Cervantes:面向滲透測試人員和紅隊的開源協作平臺

Cervantes 是一個專為滲透測試人員和紅隊打造的開源協作平臺。它提供了一個集中式工作區,用于集中管理項目、客戶端、漏洞和報告。通過簡化數據組織和團隊協調,它有助于減少規劃和執行滲透測試所需的時間和復雜性。 作為 OWASP 旗下的開源解決方案&…

[Python 基礎課程]猜數字游戲

使用 Python 實現一個猜數字游戲,先隨機生成一個 1 到 100 之間的一個隨機整數,讓用戶猜測這個數是什么,每次都提示用戶猜大了還是猜小了,如果用戶猜對了,提示用戶猜對了,用了多少次,并且之前每…

文件加密實現

一、不依賴外部庫實現 使用自定義的XOR加密算法結合簡單的密鑰擴展。 實現說明 這個方案不依賴任何外部庫,僅使用C標準庫實現: 加密原理:采用XOR加密算法,這是一種簡單但有效的對稱加密方式,相同的密鑰可以用于加密和解…

Unity輕量觀察相機

一、腳本功能簡介ObserveCamera 是一個可直接掛載到任意 GameObject 上的通用攝像機控制腳本,支持以下功能:鼠標右鍵控制攝像機繞自身旋轉(俯仰、水平)鼠標左鍵拖拽目標對象進行平移(局部 XY 平面移動)鼠標…

1深度學習Pytorch-pytorch、tensor的創建、屬性、設備和類型轉換、數據轉換、常見操作(獲取元素、元素運算、形狀改變、相乘、廣播)

文章目錄PyTorchTensor1 Tensor 的創建1.torch.tensor2.torch.Tensor3. 線性張量4. 隨機張量5. 特定數值的張量2 Tensor 常見屬性1 屬性2 設備切換3 類型轉換torch.Tensor.to(dtype)類型專用方法創建張量時直接指定類型與 NumPy 數組的類型互轉4 數據轉換(淺拷貝與深…

五、Istio管理網格外部服務

因語雀與csdn markdown 格式有區別,請查看原文: https://www.yuque.com/dycloud/pss8ys 一、Egress Listener 流量策略 前面學習了 sidecar 自動注入原理、inbound Listener、outbound Listener 等概念,也知道了 EgressListener 的流量策略…

Ubuntu20.04 離線安裝 FFmpeg 靜態編譯包

系統版本 Ubuntu20.04 去現場部署項目,發現現場的設備連接的內網,無法使用apt直接安裝ffmpeg ,想解決也簡單,數據線連接手機使用共享網絡,再使用命令sudo apt install ffmpeg安裝即可,奈何現場百多臺設備&a…

C語言高級編程技巧與最佳實踐

C語言高級編程技巧與最佳實踐 - 完整版 目錄 宏定義與預處理技巧內存管理高級技巧函數指針與回調機制數據結構設計并發與多線程錯誤處理與異常機制性能優化技巧調試與測試技巧跨平臺編程安全編程實踐綜合演示示例 宏定義與預處理技巧 1. 條件編譯與平臺檢測 /*** 平臺和編譯…

cygwin+php教程(swoole擴展+redis擴展)

cygwin 1.下載cygwin安裝程序 :在Windows上獲得Linux的感覺 ? 2. 打開安裝包:setup-x86_64.exe 3.選擇安裝類型 從互聯網安裝首次安裝下載而不安裝僅下載軟件包不安裝從本地目錄安裝遷移程序時使用 4.選擇安裝目錄 5.選擇本地軟件包目錄&#xff…

Ethereum: Uniswap V3核心”Tick”如何引爆DEX的流動性革命?

大家好,今天,我們來聊聊一個在去中心化交易所(DEX)領域,尤其是自Uniswap V3問世以來,變得至關重要的概念——Tick(流動性邊界)。 如果大家接觸過DeFi,可能聽說過Uniswap …

【概念學習】什么是深度學習

人工智能 人工智能的簡潔定義如下:努力將通常由人類完成的智力任務自動化。 因此,人工智能是一個綜合性的領域,不僅包括機器學習與深度學習,還包括更多不涉及學習的方法。 在相當長的時間內,許多專家相信,只…

【MATLAB】(八)矩陣

一.矩陣的定義MATLAB 以矩陣作為數據操作的基本單位,這使得矩陣運算變得非常簡捷、方便、高效。矩陣是由m*n個數q(i1,2,…,m;j1,2,…,n),排成的m行n列數表,記成稱為 mxn 矩陣,也可以記成aij或Am*n。其中,i表示行數,j表…

python的高校考研交流系統

前端開發框架:vue.js 數據庫 mysql 版本不限 后端語言框架支持: 1 java(SSM/springboot)-idea/eclipse 2.NodejsVue.js -vscode 3.python(flask/django)–pycharm/vscode 4.php(thinkphp/laravel)-hbuilderx 數據庫工具:Navicat/SQLyog等都可以 在當今社…

從零開始部署Qwen3-8b大模型到本地

一、方法一(使用docker鏡像進行部署) 安裝Linux服務器,本機測試系統為Ubuntu系統;(帶有2張A100的GPU服務器) 思路為:使用docker部署python環境鏡像在此基礎上安裝vllm拉取Qwen3-8b模型 docker-compose.yml文件部分配…

AI產品經理如何理解和應用Transformer架構,以提升產品的技術能力和用戶體驗?

?你好,我是 ?三橋君? 助你邁向AGI時代!!! 📌本文介紹📌 >> 一、引言 在當今的AI浪潮中,Transformer架構已不再是一個陌生的技術名詞。從OpenAI的GPT系列到Google的BERT,再…

數據結構(四)內核鏈表、棧與隊列

一、內核鏈表基礎1. 什么是 Linux 內核鏈表?Linux 內核鏈表是一種高效的 雙向循環鏈表,廣泛應用于內核模塊開發中,用于管理數據結構。每個節點通過指針連接前一個和后一個元素,實現插入和刪除的高性能。2. 鏈表的定義與初始化在 L…

軟考信息安全工程師11月備考

目前是在職備考,主業是移動端開發工程師。第一個月(8.4-9.6),將分享完下面所有章節內容,平均不到兩天更新一節1.網絡信息安全概述2.網絡攻擊原理與常用方法3.密碼學基本理論4.網絡安全體系與網絡安全模型5.物理與環境安全技術6.認證技術與原理…

使用DrissionPage實現xhs筆記自動翻頁并爬取筆記視頻、圖片

使用DrissionPage實現xhs筆記自動翻頁并爬取筆記視頻、圖片 聲明: 本文章中所有內容僅供學習交流使用,不用于其他任何目的,不提供完整代碼,抓包內容、敏感網址、數據接口等均已做脫敏處理,嚴禁用于商業用途和非法用途,否則由此產生的一切后果均與作者無關! 本文章未經…