[轉]Webpack5(從入門到精通)

?

?

這里寫目錄標題

    • 1、webpack 初體驗
        • 全局安裝webpack
    • 2.打包樣式資源
        • 創建webpack.config.js文件(配置文件)
    • 3.打包html資源
        • webpack.config.js文件(配置文件)
    • 4.打包圖片資源
        • webpack.config.js文件(配置文件)
    • 5.打包其他資源
        • webpack.config.js文件(配置文件)
    • 6.devServer
        • webpack.config.js文件(配置文件)
    • 7.提取css成單獨文件
        • webpack.config.js文件(配置文件)
    • 8.css兼容
        • package.json增加
        • webpack.config.js文件(配置文件)
    • 9.css壓縮
    • 10.eslint 語法檢查
    • 11.js,html壓縮只要將mode改為production就會自動壓縮
    • 12.開發性能提升:HMR:熱模塊替換
    • 13.開發性能提升:source-map
    • 13.生產性能提升:tree-shaking(去除沒用到的代碼)

?

1、webpack 初體驗

全局安裝webpack

npm i webpack webpack-cli -g
/*index.js:webpack 入口起點文件1.運行指令:開發環境:webpack ./src/index.js -o ./build/built.js --mode=developmentwebpack會以 ./src/index.js 為入口文件開始打包,打包后輸出到 ./build/built.js生產環境:webpack ./src/index.js -o ./build/built.js --mode=productionwebpack會以 ./src/index.js 為入口文件開始打包,打包后輸出到 ./build/built.js2.結論:1.webpack能處理js/json資源,不能處理css/img等其他資源2.生產環境比開發環境多壓縮一個js文件*/
function add(x,y) {return x+y;
}
add(1,2)

執行打包 這個文件,打包成功
在這里插入圖片描述

總結: index.js:webpack 入口起點文件

1.運行指令:
開發環境:webpack ./src/index.js -o ./build/built.js --mode=development
webpack會以 ./src/index.js 為入口文件開始打包,打包后輸出到 ./build/built.js
生產環境:webpack ./src/index.js -o ./build/built.js --mode=production
webpack會以 ./src/index.js 為入口文件開始打包,打包后輸出到 ./build/built.js
2.結論:
1.webpack能處理js/json資源,不能處理css/img等其他資源
2.生產環境比開發環境多壓縮一個js文件

2.打包樣式資源

創建webpack.config.js文件(配置文件)

use 數組中順序執行:從右到左,從上到下

const {resolve} = require('path');module.exports = {// 入口entry:'./src/index.js',// 輸出output:{// 輸出文件名filename:'built.js',//輸出路徑path:resolve(__dirname,'build')},// loader的配置module:{rules:[{//匹配哪些文件test:/\.less/,//使用哪些loader進行處理use:['style-loader','css-loader',]},{//匹配哪些文件test:/\.css/,//使用哪些loader進行處理use:['style-loader','css-loader','less-loader']},]},// 模式mode:'development'
}

3.打包html資源

webpack.config.js文件(配置文件)

plugin 1.下載,2.引入,3.使用

const {resolve} = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin')
module.exports = {// 入口entry:'./src/index.js',// 輸出output:{// 輸出文件名filename:'built.js',//輸出路徑path:resolve(__dirname,'build')},plugins:[new HtmlWebpackPlugin({// 復制一個html文件,并引入template:'./src/index.html'})],// 模式mode:'development'
}

4.打包圖片資源

webpack.config.js文件(配置文件)

需要url-loader 和html-loader

const {resolve} = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin')
module.exports = {// 入口entry:'./src/index.js',// 輸出output:{// 輸出文件名filename:'built.js',//輸出路徑path:resolve(__dirname,'build')},// loader的配置module:{rules:[{//匹配哪些文件test:/\.less/,//使用哪些loader進行處理use:['style-loader','css-loader',]},{//匹配哪些文件test:/\.css/,//使用哪些loader進行處理use:['style-loader','css-loader','less-loader']},{// 處理圖片資源,但是處理不了html中img的路徑問題test: /\.(jpg|png|gif)$/,loader:'url-loader',options:{limit: 8* 1024,// 關閉es6esModule:false,name:'[hash:10].[ext]' //不重復名字},},{// 處理html中的imgtest: /\.html$/,loader:'html-loader'}]},plugins:[new HtmlWebpackPlugin({// 復制一個html文件,并引入template:'./src/index.html'})],// 模式mode:'development'
}

5.打包其他資源

webpack.config.js文件(配置文件)

主要用到 file-loader

const {resolve} = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin')
module.exports = {// 入口entry:'./src/index.js',// 輸出output:{// 輸出文件名filename:'built.js',//輸出路徑path:resolve(__dirname,'build')},// loader的配置module:{rules:[{//匹配哪些文件test:/\.less/,//使用哪些loader進行處理use:['style-loader','css-loader',]},{//匹配哪些文件test:/\.css/,//使用哪些loader進行處理use:['style-loader','css-loader','less-loader']},{// 處理圖片資源,但是處理不了html中img的路徑問題test: /\.(jpg|png|gif)$/,loader:'url-loader',options:{limit: 8* 1024,// 關閉es6esModule:false,name:'[hash:10].[ext]' //不重復名字},},{// 處理html中的imgtest: /\.html$/,loader:'html-loader'},{// 打包其他資源exclude: /\.(css|js|html)$/,loader: 'file-loader'}]},plugins:[new HtmlWebpackPlugin({// 復制一個html文件,并引入template:'./src/index.html'})],// 模式mode:'development'
}

6.devServer

// 自動打包運行
// 指令:npx webpack-dev-server

webpack.config.js文件(配置文件)

const {resolve} = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin')
module.exports = {// 入口entry:'./src/index.js',// 輸出output:{// 輸出文件名filename:'built.js',//輸出路徑path:resolve(__dirname,'build')},// loader的配置module:{rules:[{//匹配哪些文件test:/\.css/,//使用哪些loader進行處理use:['style-loader','css-loader','less-loader']},{// 處理html中的imgtest: /\.html$/,loader:'html-loader'}]},plugins:[new HtmlWebpackPlugin({// 復制一個html文件,并引入template:'./src/index.html'})],// 自動打包運行// 指令:npx webpack-dev-serverdevServer: {contentBase: resolve(__dirname,'build'),compress:true,port:3000,open:true},// 模式mode:'development'
}

7.提取css成單獨文件

用到mini-css-extract-plugin插件
并且將style-loader 改為 MiniCssExtractPlugin.loader,

webpack.config.js文件(配置文件)

const {resolve} = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin')
const MiniCssExtractPlugin = require('mini-css-extract-plugin')
module.exports = {// 入口entry:'./src/index.js',// 輸出output:{// 輸出文件名filename:'built.js',//輸出路徑path:resolve(__dirname,'build')},// loader的配置module:{rules:[{//匹配哪些文件test:/\.css/,//使用哪些loader進行處理use:[MiniCssExtractPlugin.loader,'css-loader',]},{// 處理html中的imgtest: /\.html$/,loader:'html-loader'}]},plugins:[new HtmlWebpackPlugin({// 復制一個html文件,并引入template:'./src/index.html'}),new MiniCssExtractPlugin()],// 自動打包運行// 指令:npx webpack-dev-serverdevServer: {contentBase: resolve(__dirname,'build'),compress:true,port:3000,open:true},// 模式mode:'development'
}

8.css兼容

package.json增加

在這里插入圖片描述

webpack.config.js文件(配置文件)

const {resolve} = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin')
const MiniCssExtractPlugin = require('mini-css-extract-plugin')// 設置nodejs環境變量
// process.env.NODE_ENV = "development"
module.exports = {// 入口entry:'./src/index.js',// 輸出output:{// 輸出文件名filename:'built.js',//輸出路徑path:resolve(__dirname,'build')},// loader的配置module:{rules:[{//匹配哪些文件test:/\.css/,//使用哪些loader進行處理use:[MiniCssExtractPlugin.loader,'css-loader',{loader: "postcss-loader",options:{ident:'postcss',plugins:()=>{require('postcss-preset-env')()}}}]},{// 處理html中的imgtest: /\.html$/,loader:'html-loader'}]},plugins:[new HtmlWebpackPlugin({// 復制一個html文件,并引入template:'./src/index.html'}),new MiniCssExtractPlugin()],// 自動打包運行// 指令:npx webpack-dev-serverdevServer: {contentBase: resolve(__dirname,'build'),compress:true,port:3000,open:true},// 模式mode:'development'
}

9.css壓縮

const MiniCssExtractPlugin = require(‘mini-css-extract-plugin’)

const {resolve} = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin')
const MiniCssExtractPlugin = require('mini-css-extract-plugin')
const OptimizeCssAssetsWebpackPlugin = require('optimize-css-assets-webpack-plugin')
// 設置nodejs環境變量
// process.env.NODE_ENV = "development"
module.exports = {// 入口entry:'./src/index.js',// 輸出output:{// 輸出文件名filename:'built.js',//輸出路徑path:resolve(__dirname,'build')},// loader的配置module:{rules:[{//匹配哪些文件test:/\.css/,//使用哪些loader進行處理use:[MiniCssExtractPlugin.loader,'css-loader',{loader: "postcss-loader",options:{ident:'postcss',plugins:()=>{require('postcss-preset-env')()}}}]},{// 處理html中的imgtest: /\.html$/,loader:'html-loader'}]},plugins:[new HtmlWebpackPlugin({// 復制一個html文件,并引入template:'./src/index.html'}),new MiniCssExtractPlugin(),new OptimizeCssAssetsWebpackPlugin()],// 自動打包運行// 指令:npx webpack-dev-serverdevServer: {contentBase: resolve(__dirname,'build'),compress:true,port:3000,open:true},// 模式mode:'development'
}

10.eslint 語法檢查

注意:不檢查第三方 node_module

npm i eslint eslint-loader eslint-config-airbnb-base eslint-plugin-import

"eslintConfig": {"extends": "airbnb-base"}
const {resolve} = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin')
const MiniCssExtractPlugin = require('mini-css-extract-plugin')
const OptimizeCssAssetsWebpackPlugin = require('optimize-css-assets-webpack-plugin')
// 設置nodejs環境變量
// process.env.NODE_ENV = "development"
module.exports = {// 入口entry:'./src/index.js',// 輸出output:{// 輸出文件名filename:'built.js',//輸出路徑path:resolve(__dirname,'build')},// loader的配置module:{rules:[{//匹配哪些文件test:/\.css/,//使用哪些loader進行處理use:[MiniCssExtractPlugin.loader,'css-loader',{loader: "postcss-loader",options:{ident:'postcss',plugins:()=>{require('postcss-preset-env')()}}}]},{// 處理html中的imgtest: /\.html$/,loader:'html-loader'},// {//     test:/\.js$/,//     exclude:/node_modules/,//     loader:'eslint-loader',//     options:{//         fix:true//     }// }]},plugins:[new HtmlWebpackPlugin({// 復制一個html文件,并引入template:'./src/index.html'}),new MiniCssExtractPlugin(),new OptimizeCssAssetsWebpackPlugin()],// 自動打包運行// 指令:npx webpack-dev-serverdevServer: {contentBase: resolve(__dirname,'build'),compress:true,port:3000,open:true},// 模式mode:'development'
}

11.js,html壓縮只要將mode改為production就會自動壓縮

12.開發性能提升:HMR:熱模塊替換

在devServer中啟動hot:true,
css默認啟動hmr因為style-loader內部啟動了
js:需要在js中添加


if (module.hot){module.hot.accept('./print.js',function () {print();})
}

13.開發性能提升:source-map

方便找出開發中的錯誤

devtool: "source-map",
const {resolve} = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin')
const MiniCssExtractPlugin = require('mini-css-extract-plugin')
const OptimizeCssAssetsWebpackPlugin = require('optimize-css-assets-webpack-plugin')
// 設置nodejs環境變量
// process.env.NODE_ENV = "development"
module.exports = {// 入口entry:'./src/index.js',// 輸出output:{// 輸出文件名filename:'built.js',//輸出路徑path:resolve(__dirname,'build')},// loader的配置module:{rules:[{//匹配哪些文件test:/\.css/,//使用哪些loader進行處理use:[MiniCssExtractPlugin.loader,'css-loader',{loader: "postcss-loader",options:{ident:'postcss',plugins:()=>{require('postcss-preset-env')()}}}]},{// 處理html中的imgtest: /\.html$/,loader:'html-loader'}]},plugins:[new HtmlWebpackPlugin({// 復制一個html文件,并引入template:'./src/index.html'}),new MiniCssExtractPlugin(),new OptimizeCssAssetsWebpackPlugin()],// 自動打包運行// 指令:npx webpack-dev-serverdevServer: {contentBase: resolve(__dirname,'build'),compress:true,port:3000,open:true},devtool: "source-map",// 模式mode:'development'
}

13.生產性能提升:tree-shaking(去除沒用到的代碼)

1.必須es6模塊化,2.開啟生產環境
在package.json中配置

  "sideEffects":["*.css"]


---------------------
作者:培歌行
來源:CSDN
原文:https://blog.csdn.net/weixin_43964148/article/details/105313149
版權聲明:本文為作者原創文章,轉載請附上博文鏈接!
內容解析By:CSDN,CNBLOG博客文章一鍵轉載插件

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

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

相關文章

mybatis由淺入深day01_5mybatis開發dao的方法(5.1SqlSession使用范圍_5.2原始dao開發方法)...

5 mybatis開發dao的方法 5.1 SqlSession使用范圍 5.1.1 SqlSessionFactoryBuilder 通過SqlSessionFactoryBuilder創建會話工廠SqlSessionFactory 將SqlSessionFactoryBuilder當成一個工具類使用即可,不需要使用單例管理SqlSessionFactoryBuilder。 在需要創建SqlSes…

做?個?德地圖的 iOS / Android MAUI 控件(上)

點擊上方藍字關注我們(本文閱讀時間:10分鐘)Microsoft Build 2022 ?會上正式發布了 .NET MAUI , 對于 .NET 開發者可以? C# 完成跨平臺的前端應?開發。對?起 MAUI 的前身 Xamarin , MAUI 除了可以?傳統的原?開發模式外,還?持了 Blazor…

易康eCognition Developer 9.01安裝教程(附eCognition下載地址及中文教程)

eCognition是由德國Definiens Imaging公司2009年推出的智能化影像分析軟件,2010年被美國Trimble公司收購。eCognition是目前所有商用遙感軟件中第一個基于目標信息的遙感信息提取軟件,它采用決策專家系統支持的模糊分類算法,突破了傳統商業遙感軟件單純基于光譜信息進行影像…

[改善Java代碼]不要覆寫靜態方法

建議33: 不要覆寫靜態方法 我們知道在Java中可以通過覆寫(Override)來增強或減弱父類的方法和行為,但覆寫是針對非靜態方法(也叫做實例方法,只有生成實例才能調用的方法)的,不能針對…

C語言試題194之實現strcpy函數功能

??個人主頁:個人主頁 ??系列專欄:C語言試題200例 ??推薦一款刷算法、筆試、面經、拿大公司offer神器?? 點擊跳轉進入網站 ?作者簡介:大家好,我是碼莎拉蒂,CSDN博客專家(全站排名Top 50),阿里云博客專家、51CTO博客專家、華為云享專家 1、題目 題目: 實現st…

ArcGIS實驗教程——實驗四十三:ArcGIS柵格重分類(Reclass)案例詳解

文章目錄 一、重分類1. 新值替代2. 將值組合到一起3. 按相同等級對一組柵格的值進行重分類4. 將特定值設置為NoData 或者為 NoData像元設置某個值二、查找表三、分割四、使用表重分類五、使用ASCI文件重分類重分類就是對原有柵格像元值重新分類從而得到一組新值并輸出。重分類工…

[中文版] 可視化 CSS References 文檔

本文分享了我將可視化 CSS References 文檔翻譯成中文版的介紹,翻譯工作還在陸續進行中,供學習 CSS 參考。 1. 可視化 CSS References 文檔介紹 許多 CSS 的文檔都是屬性的介紹,而開源項目 css-reference 并沒有提供中文版,而當我…

對比 C# 聊聊 C++ 中幾類特殊成員函數

一:背景 在 C# 中要說類默認給我們定義的特殊成員函數,莫過于 構造函數,但在 C 中這樣的特殊函數高達 6 種,有必要整合一下聊一聊。二:特殊成員函數 1. 默認構造函數和 C# 一樣,很多書中都說,如…

Js 枚舉定義Layer Icon

layer的icon有7種樣式:1-7 [圖片來自:https://blog.csdn.net/beauxie/article/details/60959971] 有時候常常記不住 😣,不防自己定義一哈: var layerIcon {//無none: -1,//成功success: 1,//失敗error: 2,//提問、疑…

前端進階之路: 前端架構設計(2)-流程核心

可能很多人和我一樣, 首次聽到"前端架構"這個詞, 第一反應是: "前端還有架構這一說呢?" 在后端開發領域, 系統規劃和可擴展性非常關鍵, 因此架構師備受重視, 早在開發工作啟動之前, 他們就被邀請加入到項目中, 而且他們會跟客戶討論即將建成的平臺的架構要…

C語言試題195之實現strnchr函數功能

??個人主頁:個人主頁 ??系列專欄:C語言試題200例 ?作者簡介:大家好,我是碼莎拉蒂,CSDN博客專家(全站排名Top 50),阿里云博客專家、51CTO博客專家、華為云享專家 1、題目 題目: 實現strnchr函數功能 函數名稱:在字符串中查找字符 函數原型:char *strnchr(cons…

8.2設備文件及磁盤分區

2019獨角獸企業重金招聘Python工程師標準>>> 概覽: 設備文件的創建 權限 設備名 類型 主設備號 次設備號 mknod [-m MODE] NAME type [MAJOR MINOR] 創建時,先查看是否存在設備號的沖突 零磁道零扇區是MBR:Maste…

【ArcGIS風暴】ArcGIS求一個矢量圖層中多個圖斑的“四至點”坐標案例教程

如圖所示,為ArcGIS軟件自帶的全球矢量數據,怎樣求取每個大洲(圖斑)的四至坐標(xmin、ymin、xmax、ymax)呢? 參考閱讀:【ArcGIS遇上Python】python批量獲取柵格數據四至(top,bottom,left,right)坐標代碼 文章目錄 1. 矢量數據加載2. 四至計算結果3. 四至計算過程1.…

一個關于導出excel模板的實例

1 首先jsp頁面 點擊模板下載&#xff0c;會自動下載模板&#xff45;&#xff58;&#xff43;&#xff45;&#xff4c;&#xff0c;效果如下 讓我們看源碼&#xff1a; &#xff11; &#xff4a;&#xff53;&#xff50;頁面 <div class"tab-pane" id"p…

騰訊視頻VIP會員,周卡特價9.5元!

今天給大家推薦特價充值騰訊視頻VIP會員的平臺——幻海優品&#xff0c;騰訊視頻在線直充&#xff0c;VIP會員實時生效&#xff01;騰訊視頻VIP會員特價充值周卡&#xff1a;原價12元&#xff0c;特價9.5元月卡&#xff1a;原價30元&#xff0c;特價22元季卡&#xff1a;原價68…

解決安裝SQL Server 2005開發版時,出現“SQL Server 服務無法啟動 ”點擊重試或取消的解決方法

問題描述&#xff1a; 安裝SQL Server 2005開發版時&#xff0c;提示SQL Server服務無法啟動&#xff0c;有關詳細信息&#xff0c;請參閱SQL Server聯機叢書中的主題如何查看SQL Server 2005安裝日志文件和手動啟動SQL Server&#xff0c;如下圖所示。 此時&#xff0c;如果點…

C語言試題196之實現strstr函數功能

??個人主頁:個人主頁 ??系列專欄:C語言試題200例 ?作者簡介:大家好,我是碼莎拉蒂,CSDN博客專家(全站排名Top 50),阿里云博客專家、51CTO博客專家、華為云享專家 1、題目 題目: 實現strstr函數功能 C 庫函數 char *strstr(const char *haystack, const char *nee…

svnsync實現版本庫的同步備份

svnsync實現版本庫的同步備份 實驗環境&#xff1a;A&#xff0c;172.17.201.243&#xff08;主&#xff09;B&#xff0c;172.17.201.88&#xff08;備&#xff09;項目需求&#xff0c;生產環境要求svn服務器實現熱備機制&#xff0c;于是就想到了svn自帶的svnsync機制&#…

關于數據結構(二)

文章目錄[點擊展開](?)[] 一UI返回功能思路分析實現方法二當前正在CD技能接著上文<<關于數據結構(一)>>&#xff0c;關于數據結構&#xff0c;在實際的開發中或多或少都有涉及到&#xff0c;只是看自己平時沒有積累到。下面是我在項目中的幾個實例&#xff1a; 一…

JDBC 之 事務

1.概念&#xff1a;事務指邏輯上的一組操作&#xff0c;組成這組操作的各個單元&#xff0c;要么全部成功&#xff0c;要么全部不成功。 2.數據庫開啟事務的命令dtl&#xff1a; Start transaction開啟事務 Rollback回滾事務&#xff08;撤銷&#xff09; Commit提交事務 3.JDB…