Webpack技術入門與實踐

1.概念:
本質上, webpack是一個現代JavaScript應用程序的靜態模塊打包器,當webpack處理應用程序時,它會遞歸地構建一個依賴關系圖,其中包含應用程序需要的每個模塊,然后將所有這些模塊打包成一個或多個bundle;
四個核心概念:
(1)入口(entry): 示w ebpack應該使用哪個模塊,來作為構建起內部依賴圖的開始;進入入口起點后,webpack會找出有哪些模塊和庫是入口起點(直接和間接)依賴的;
每個依賴隨機被處理,最后輸出到稱之為bundles的文件中;
可以 通過在webpack配置中配置entry屬性,來指定一個入口起點(或多個入口起點),默認值是./src
文件:webpack.config.js
module.exports = {entry: './path/to/my/entry/file.js'};

(2)輸出(output): output屬性告訴webpack在哪里輸出它所創建的bundles,以及如何命名這些文件,默認值為./dist。
基本上,整個應用程序結構,都會被編譯到你指定的輸出路徑的文件夾中,你可以 通過在配置中指定一個?output字段,來配置這些處理過程:
const path = require('path');? //Node.js核心模塊,用于操作文件路徑module.exports = {entry: './path/to/my/entry/file.js',output: {path: path.resolve(__dirname, 'dist'),filename: 'my-first-webpack.bundle.js'}};

(3)loader:讓webpack能夠去處理那些非JavaScript文件(webpack自身只理解JavaScript). loader可以將所有類型的文件轉換為webpack能夠處理的有效模塊,然后就可以利用webpack的打包能力,對它們進行處理;
本質上,webpack?loader將所有類型的文件,轉換為應用程序的依賴圖(和最終的bundle)可以直接引用的模塊
在更高層面,在webpack的配置好中loader有兩個小目標:
*****test屬性,用于 標識出應該被對應的loader進行轉換的某個或某些文件
*****use屬性,表示進行轉換時,應該使用哪個loader
const path = require('path');const config = {output: {filename: 'my-first-webpack.bundle.js'},module: {? ? ? ? ? ? //告訴webpack編譯器:嘿,webpack編譯器,當你碰到在? require()/import?語句中被解析為? ".txt"的路徑時,在你對它打包之前,先使用raw-loader轉換一下rules: [{ test: /\.txt$/, use: 'raw-loader' }? ?//重要的是要記得,在webpack配置中定義的loader時,要定義的module.rules中,而不是rules]}};module.exports = config;

(4)插件(plugins):插件可以執行的范圍是:從打包優化和壓縮,一直到重新定義環境中的變量; 插件接口功能極其強大,可以用來處理各種各樣的任務;
想要使用一個插件,你 只需要?require()它,然后把它添加到?plugins數組中,這時就需要通過使用? ?new?操作符來創建它的一個實例
const HtmlWebpackPlugin = require('html-webpack-plugin'); // 通過 npm 安裝
const webpack = require('webpack'); // 用于訪問內置插件const config = {module: {rules: [{ test: /\.txt$/, use: 'raw-loader' }]},plugins: [new HtmlWebpackPlugin({template: './src/index.html'})]};module.exports = config;

2.webpack構建流程:
(1)解析webpack配置參數, 合并從shell傳入和webpack.config.js文件里配置的參數,生產最后的配置結果
(2)注冊所有配置的插件,好讓 插件監聽webpack構建生命周期的事件節點,以做出對應的反應
(3)從配置的entry入口文件開始解析文件構建AST語法樹( 以樹狀的形式表現 編程語言 的語法結構, 樹上的每個節點都表示源代碼中的一種結構),找出每個文件所依賴的文件,遞歸下去
(4)在解析文件遞歸的過程中根據文件類型和loader配置找出合適的loader用來對文件進行轉換
(5)遞歸完后得到每個文件的最終結果,根據entry配置生成代碼塊chunk
(6)輸出所有chunk到文件系統
3.單頁應用:
(1)一個單頁應用需要配置一個entry?指明執行入口,webpack會為entry?生成一個包含這個入口所有依賴的chunk,但要讓它在瀏覽器里跑起來還需要一個HTML文件來加載chunk生成的js文件,如果提取出了css還需要讓HTML文件引入提取出的css, web-webpack-plugin里的WebPlugin可以自動完成這些工作;
const { WebPlugin } = require('web-webpack-plugin');
module.exports = {entry: {app: './src/doc/index.js',},plugins: [// 一個WebPlugin對應生成一個html文件new WebPlugin({//輸出的html文件名稱filename: 'index.html',//這個html依賴的`entry`requires: ['app'],? ? //指明這個HTML依賴哪些entry,entry生成的js和css會自動注入到HTML里}),],
};

(2)可以配置這些資源的注入方式,支持如下屬性:
*****_dist :只是在生產環境下才引入該資源
*****_dev :?只有在開發環境下才引入該資源
*****_inline:?把該資源的內容潛入到html里
*****_ie :只有IE瀏覽器才需要引入的資源
new WebPlugin({filename: 'index.html',requires: {app:{_dist:true,_inline:false,}},
}),

4.一個項目管理多個單頁應用:
(1)一般項目里會包含多個單頁應用,雖然多個單頁應用也可以合并成一個但是這樣做會導致用戶沒訪問的部分也加載了,如果項目里有很多個單頁應用,為每個單頁應用配置一個entry?和 WebPlugin?如果項目又新增一個單頁應用,又去新增webpack配置?這樣做太麻煩了, web-webpack-plugin里的AutoWebPlugin可以方便的解決這些問題;
module.exports = {plugins: [// 所有頁面的入口目錄new AutoWebPlugin('./src/'),]
};

AutoWebPlugin會把? ./src/目錄下所有每個文件夾作為一個單頁頁面的入口, 自動為所有的頁面入口配置一個WebPlugin輸出對應的html。要新增一個頁面就在 ./src/下新建一個文件夾包含這個單頁應用所依賴的代碼,A

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

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

相關文章

【UE 材質】任務目標點效果

效果 步驟 1. 新建一個工程,創建一個Basic關卡 2. 新建一個材質,這里命名為“M_GoalPoint” 打開“M_GoalPoint”,設置混合模式為“半透明”,勾選“雙面” 在材質圖表中添加如下節點 此時預覽效果如下 繼續添加如下節點 此時效果…

無人機巡檢中臺揭秘,無人機管控平臺助力巡查無人機巡檢方案落地

隨著無人機智能巡檢的飛速發展,巡查無人機應用場景也日益多元,無人機巡檢方案被頻繁落地到工業生產及巡檢巡邏業務中。而無人機管控平臺應運而生,成為推動無人機智能巡檢的關鍵工具。那我們一起來看一下無人機管控平臺的作用: 一、…

微信小程序引入Vant Weapp修改樣式不起作用,使用外部樣式類進行覆蓋

一、引入Vant Weapp后樣式問題 在項目中使用第三方組件修改css樣式時,總是出現各種各樣問題,修改的css樣式不起作用,沒有效果,效果不符合預期等。 栗子(引入一個搜索框組件)實現效果: 左側有一個搜索文字背景為藍色,接著跟一個搜索框 wxml <view class"container&q…

【Python】 Python web開發庫大全

庫排序是按照使用人數和文檔的活躍度為參考進行的&#xff0c;建議大家使用排名靠前的框架&#xff0c;因為它們的文檔更齊全&#xff0c;技術積累要更多&#xff0c;社區更繁盛&#xff0c;能得到更好的支持&#xff0c;這樣在遇到自己無法解決的問題&#xff0c;可以更快更高…

數據結構:單鏈表——定義、插入、刪除

1、定義 注&#xff0c;以下都是帶頭節點的單鏈表 typedef struct LNode {ElementType data;struct LNode *next; }LNode,*LinkList;bool InitList(LinkList &L){L (LNode *)malloc(sizeof(LNode));if(LNULL){//內存不足return false;}L->nextNULL;return true; }這里…

Mint Blockchain,一個聚焦在 NFT 領域的 L2 網絡

Mint 是什么&#xff1f; Mint 是一個聚焦在 NFT 領域的創新型 L2 網絡。Mint Blockchain 致力于促進 NFT 資產協議標準的創新和現實商業場景中 NFT 資產的大規模采用。 不管是過去 3 年在以太坊網絡涌現的 NFT&#xff0c;還是當下在比特幣網絡活躍的“銘文” NFT&#xff0c…

通信協議 遠程調用RPC

1.通訊協議 所有的HDFS通訊協議都是建立在TCP/IP協議之上。 客戶端通過一個可配置的TCP端口連接到Namenode&#xff0c;通過ClientProtocol協議與Namenode交 互。而Datanode使用DatanodeProtocol協議與Namenode交互。 一個遠程過程調用(RPC)模型被抽象出來封裝ClientProtoc…

微信小程序引入vant-weapp爬出坑

最新的微信小程序的項目結構跟之前的不一樣&#xff0c;然后&#xff0c;按照vant-weapp上的官方文檔&#xff0c;安裝步驟失敗&#xff0c;提示了各種錯誤。如果你的微信小程序結構跟我的一致&#xff0c;可以采用和我一樣的方案。 微信小程序引入vant-weapp爬出坑 移動pack…

深入淺出:HTTPS單向與雙向認證及證書解析20231208

介紹: 網絡安全的核心之一是了解和實施HTTPS認證。本文將探討HTTPS單向認證和雙向認證的區別&#xff0c;以及SSL證書和CA證書在這些過程中的作用&#xff0c;并通過Nginx配置實例具體說明。 第一部分&#xff1a;HTTPS單向認證 定義及工作原理&#xff1a;HTTPS單向認證是一…

ELK架構監控MySQL慢日志

目錄 一、架構概述 二、安裝部署 三、Filebeat配置 四、Logstash配置 一、架構概述 本文使用將使用filebeat收集mysql日志信息&#xff0c;發送到redis中緩存&#xff0c;由logstash從redis中取出&#xff0c;發送es中存儲&#xff0c;再從kibana中展示。 二、安裝部署 ELK…

做數據分析為何要學統計學(5)——什么問題適合使用t檢驗?

t檢驗&#xff08;Students t test&#xff09;&#xff0c;主要依靠總體正態分布的小樣本&#xff08;例如n < 30&#xff09;對總體均值水平進行差異性判斷。 t檢驗要求樣本不能超過兩組&#xff0c;且每組樣本總體服從正態分布&#xff08;對于三組以上樣本的&#xff0…

同一個kmz數據同樣的底圖在QGIS上顯示位置正常, 在Mars3d中顯示就偏移了一些

問題&#xff1a; 1.同一個kmz數據同樣的底圖在QGIS上顯示位置正常, 在網頁中顯示就偏移了一些 在qgis上的顯示效果&#xff0c;和在mars3d的顯示效果&#xff1a;數據明顯存在偏移。 解決步驟&#xff1a; 1.查看了kmz數據&#xff0c;里面實際是tif圖片數據&#xff0c;估…

MES管理系統在非標制造企業中的應用

在當今制造業中&#xff0c;非標制造企業逐漸成為一種重要的存在。與傳統的批量生產制造企業不同&#xff0c;非標制造企業主要特點是能夠根據客戶需求進行定制化生產。這種定制化的生產模式對企業的管理提出了更高的要求&#xff0c;同時也帶來了更多的挑戰。在非標制造企業中…

mac蘋果電腦清除數據軟件CleanMyMac X4.16

在數字時代&#xff0c;保護個人隱私變得越來越重要。當我們出售個人使用的電腦&#xff0c;亦或者離職后需要上交電腦&#xff0c;都需要對存留在電腦的個人信息做徹底的清除。隨著越來越多的人選擇使用蘋果電腦&#xff0c;很多人想要了解蘋果電腦清除數據要怎樣做才是最徹底…

ELK(三)—安裝可視化工具

目錄復制 目錄 一、ElasticSearch-Head可視化工具介紹1.1特性&#xff1a;1.2用法&#xff1a; 二、安裝2.1docker安裝2.2Chrome插件安裝 一、ElasticSearch-Head可視化工具介紹 ElasticSearch-Head 是一個基于瀏覽器的 Elasticsearch 可視化工具&#xff0c;它提供了一個直觀…

【GAMES101】觀測變換

圖形學不等于 OpenGL&#xff0c;不等于光線追蹤&#xff0c;而是一套生成整個虛擬世界的方法 記得有個概念叫光柵化&#xff0c;就是把三維虛擬世界的事物顯示在二維的屏幕上&#xff0c;這里就涉及到觀察變換 觀察變換&#xff0c;叫viewing transformation&#xff0c;包括…

1、關于前端js-ajax繞過

1、Ajax知識 、js--Ajax 傳統請求跟js--Ajax請求的差別 在實例中用的上js-ajax的有 表單驗證&#xff1a; 在用戶填寫表單時&#xff0c;可以使用 Ajax 在不刷新頁面的情況下驗證表單字段&#xff0c;并提供即時反饋。 實時搜索&#xff1a; 在搜索框中輸入內容時&#xff0…

Gateway

網關的作用&#xff1a; 可以對訪問的用戶進行身份認證和權限校驗還可以服務路由&#xff0c;負載均衡還可以進行請求限流 網關本身也是微服務的一部分&#xff0c;所以需要使用nacos進行服務注冊和發現 網關路由的配置 路由id&#xff1a;路由唯一標識uri&#xff1a;路由…

使用STM32 HAL庫進行GPIO控制的實例

?作者簡介&#xff1a;熱愛科研的嵌入式開發者&#xff0c;修心和技術同步精進&#xff0c; 代碼獲取、問題探討及文章轉載可私信。 ? 愿你的生命中有夠多的云翳,來造就一個美麗的黃昏。 &#x1f34e;獲取更多嵌入式資料可點擊鏈接進群領取&#xff0c;謝謝支持&#xff01;…

獨立服務器的主要應用方向有什么_Maizyun

獨立服務器的主要應用方向有什么&#xff1f; 獨立服務器是指托管單一應用程序或網站的單臺服務器。隨著互聯網的發展&#xff0c;獨立服務器已經成為許多企業和個人用戶的重要選擇&#xff0c;因為它提供了更高的靈活性和控制權。本文將探討獨立服務器的主要應用方向。 一、…