Webpack原理與實踐
導讀 | 簡單瞭解了幾個常用的外掛,一般適合用於任何型別的專案,不管是否使用了框架。webpack為每個工作環節都預留了合適的鉤子,擴充套件時只需要找到合適的時機去做合適的事情。 |
webpack外掛機制的目的是:為了增強webpack在專案自動化構建方面的能力。外掛最常見的應用場景是:
- 實現自動在打包之前清除dist目錄(上次打包的結果)
- 自動生成應用所需的html檔案
- 根據不同環境為程式碼注入類似API地址這種可能變化的部分
- 複製不需要參與打包的資原始檔到輸出目錄
- 壓縮webpack打包完成後輸出的檔案
- 自動釋出打包結果到伺服器實現自動部署
webpack每次打包的結果都是直接覆蓋到dist目錄,打包前,dist目錄中可能已經存在上一次打包操作時遺留的檔案,再次打包時,只能覆蓋掉同名檔案,已經移除的資原始檔會一直累積在裡面,最終導致部署上線時出現多餘檔案。很明顯這是不合理的。
更好的做法當然是:在每次完整打包淺,自動明清理dist目錄,每次打包過後,dist目錄中就只會存在那些必要的檔案。我們可以依賴第三方npm包:clean-webpack-plugin。安裝後回到webpack的配置檔案中,匯入clean-webpack-plugin外掛,該外掛模組匯出CleanWebpackPlugin。
//webpack.config.js const path = require("path") const {CleanWebpackPlugin} = require("clean-webpack-plugin") module.exports = { entry:"./src/index.js", output:{ filename:"bundle.js", }, mode:"none", plugins:[ new CleanWebpackPlugin() ] }
// src/index.js console.log("nihao nihao");
打包壓縮後的程式碼:
/******/ (() => { // webpackBootstrap var __webpack_exports__ = {}; console.log("nihao nihao"); /******/ })() ;
我們知道html檔案一般都是透過硬編碼的方式,單獨存放在專案的根目錄下,這種方式有兩個問題:
為此webpack也有相關的外掛自動生成html,相對於之前寫死html檔案的方式,自動生成html的優勢在於:
安裝後回到配置檔案,載入此模組,相對於clean-webpack-plugin需要解構內部成員所不同,html-webpack-olugin外掛預設匯出的就是外掛型別。
對於生成的html檔案,頁面的title需要修改,許多時候還需要我們自定義頁面的一些meta標籤和基礎dom結構。
const path = require("path") const {CleanWebpackPlugin} = require("clean-webpack-plugin") const HtmlWebpackPlugin = require("html-webpack-plugin") module.exports = { entry:"./src/index.js", output:{ filename:"bundle.js", }, mode:"none", plugins:[ new CleanWebpackPlugin(), new HtmlWebpackPlugin({ title:"hello webpack", template:"./src/index.html" }) ] }
指定要打包的html檔案:
html-webpack-olugin除了可以自定義輸出檔案內容,同時還可以輸出多個html檔案,透過HtmlWebpackPlugin建立的物件是用於生成index.html檔案的,玩去哪可以再建立一個新的例項物件,用於建立額外的html檔案。
對於專案中一些不需要參與構建的靜態檔案如:網站的favicon、robots.txt檔案等,但是需要釋出線上上。那麼可以將這類檔案統一放在根目錄下的public或static目錄中,希望webpack在打包時一併將這個目錄下所有的檔案複製到輸出目錄,這種需求可以使用copy-webpack-plugin外掛的實現。
plugins:[ new CleanWebpackPlugin(), new HtmlWebpackPlugin({ title:"hello webpack", template:"./src/index.html" }), new CopyWebpackPlugin([ "public"//需要複製的目錄或者路徑 ]) ]
《webpack原理與實踐》
《webpack中文文件》
簡單瞭解了幾個常用的外掛,一般適合用於任何型別的專案,不管是否使用了框架。webpack為每個工作環節都預留了合適的鉤子,擴充套件時只需要找到合適的時機去做合適的事情。
原文來自:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69955379/viewspace-2850206/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Webpack原理與實踐(一):打包流程Web
- webpack 原理與實戰Web
- angr原理與實踐(一)——原理
- MelGan原理與實踐篇
- Vue CLI 原理與實踐Vue
- RocketMQ的原理與實踐MQ
- Flutter原理與美團的實踐Flutter
- mysql 複製原理與實踐MySql
- 代理重加密原理與實踐加密
- Redis核心原理與實踐--事務實踐與原始碼分析Redis原始碼
- WebSocket原理與實踐(一)---基本原理Web
- Redis核心原理與實踐--列表實現原理之ziplistRedis
- JDK ThreadPoolExecutor核心原理與實踐JDKthread
- Guava Cache 原理分析與最佳實踐Guava
- Docker容器的原理與實踐 (下)Docker
- 前端效能優化原理與實踐前端優化
- 執行緒池原理與實踐執行緒
- webpack與SPA實踐之管理CSS等資源WebCSS
- webpack與SPA實踐之開發環境搭建Web開發環境
- 分散式鎖實現原理與最佳實踐分散式
- Redis核心原理與實踐--列表實現原理之quicklist結構RedisUI
- webpack多頁面實踐Web
- Webpack 4 配置最佳實踐Web
- Flink Sql Gateway的原理與實踐SQLGateway
- Spark Connector Reader 原理與實踐Spark
- 微服務快取原理與最佳實踐微服務快取
- 中間人攻擊原理與實踐
- 前端 JS 安全對抗原理與實踐前端JS
- WebSocket原理與實踐(二)---WebSocket協議Web協議
- Spring Boot Enable* 的原理與實踐Spring Boot
- 資訊保安原理與實踐(第2版)
- Redis、Zookeeper實現分散式鎖——原理與實踐Redis分散式
- 前端響應式佈局原理與實踐前端
- 典型伺服器模式原理分析與實踐伺服器模式
- 新書介紹 -- 《Redis核心原理與實踐》新書Redis
- 深入理解 ProtoBuf 原理與工程實踐(概述)
- 深入淺出 PLT/GOT Hook與原理實踐GoHook
- 流式處理新秀Flink原理與實踐