webpack打包思路與流程解析

来源:https://www.cnblogs.com/zsbb/archive/2022/10/04/16753863.html
-Advertisement-
Play Games

一:創建一個新的工程,項目初始化 npm init -y 二:搭建項目框架 三:編寫main.js文件內容,在index.js中引入,在把index.js引入到index.html中 例: export default()=>{ function computer(){ let h2=documen ...


一:創建一個新的工程,項目初始化

npm init -y

二:搭建項目框架

 

三:編寫main.js文件內容,在index.js中引入,在把index.js引入到index.html中

例:

export default()=>{
    function computer(){
        let h2=document.createElement("h2");
        h2.innerHTML="Hello WebPack";
        return h2;
    }
    document.body.appendChild(h2);
}

 

import h2 from "./js/main"
h2();

 

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    
</body>
<script src="./index.js"></script>
</html>

 

四:安裝打包依賴,修改函數入口

npm i -D webpack webpack-cli

 

五:配置打包文件webpack.config.js,(還可以在packge.json中聲明打包代碼,方便運行)——可寫可不寫

module.exports={
    //入口
    entry:["./src/index.js"],
    //出口
    output:{
        //打包後的文件路徑,預設也是dist文件
        path:__dirname+"/dist",
        //文件名稱,這裡我用hash值來命名,防止每次打包名稱重覆
        filename:"[hash].js"
    },
    //配置打包環境/生產or開發
    mode:"production"
}

 

 

 

 

六:打包成功後效果圖

 

 

 

 

七:插件應用(webpack-plugins)自動引入打包好的外部文件

  一:引入插件

    npm i -D html-webpack-plugin

    

  二:在webpack.config.json文件中引入該插件並使用

const HemlWebpackPlugin =require("html-webpack-plugin")

module.exports={
    //入口
    entry:["./src/index.js"],
    //出口
    output:{
        //打包後的文件路徑,預設也是dist文件
        path:__dirname+"/dist",
        //文件名稱,這裡我用hash值來命名,防止每次打包名稱重覆
        filename:"[hash].js"
    },
    //使用html-webpack-plugin插件
    plugins:[
        new HemlWebpackPlugin({
            //模板路徑
            template:"./src/index.html",
            //打包生成的文件名
            filename:"index.html",
            //指定標題
            title:"Webpack Demo",
        })
    ],
    //配置打包環境/生產or開發
    mode:"development"
}

 

  三:運行打包後的效果圖

    

 

 

八:插件應用(Ts)

  一:編寫index.ts文件

export default(x:number,y:number):number=>{
    return x+y;
}

  二:編寫tsconfig.json文件

{
    "compilerOptions": {
        //Es的目標版本
        "target": "es2015",
        //模板化規範版本
        "module": "es2015",
        //是否總是啟用嚴格模式
        "alwaysStrict": true
    }
}

 

  三:編寫webpack.config.js文件並且修改packjson.js中的入口

const HemlWebpackPlugin =require("html-webpack-plugin")

module.exports={
    //入口
    entry:["./src/index.ts"],
    //出口
    output:{
        //打包後的文件路徑,預設也是dist文件
        path:__dirname+"/dist",
        //文件名稱,這裡我用hash值來命名,防止每次打包名稱重覆
        filename:"[hash].js"
    },
    //模塊處理
    module:{
        //模塊轉換集合
        rules:[
            {
                test: /\.ts$/, //匹配所有以.ts結尾的文件
                loader:"ts-loader",//使用ts-loader的模塊轉換器處理
                exclude:/node_modules/ //排除掉的目錄文件
            },
        ]
    },
    //模塊解析處理
    resolve:{
        //解析所有以.js/.ts結尾的文件
        extensions:[".js",".ts"]
    },
    //使用html-webpack-plugin插件
    plugins:[
        new HemlWebpackPlugin({
            //模板路徑
            template:"./src/index.html",
            //打包生成的文件名
            filename:"index.html",
            //指定標題
            title:"Webpack Demo",
        })
    ],
    //配置打包環境/生產or開發
    mode:"development"
}

 

    

 

  四:運行打包效果圖

    

 

 

 

 

    

 

九:插件應用(clean-webpack-plugin)打包後自動清理舊版本文件

  一:引入插件

    npm i -D clean-webpack-plugin

    

 

  二:編寫webpack.config.js

const HemlWebpackPlugin =require("html-webpack-plugin");
const {CleanWebpackPlugin}=require("clean-webpack-plugin");

module.exports={
    //入口
    entry:["./src/index.ts"],
    //出口
    output:{
        //打包後的文件路徑,預設也是dist文件
        path:__dirname+"/dist",
        //文件名稱,這裡我用hash值來命名,防止每次打包名稱重覆
        filename:"[hash].js"
    },
    //模塊處理
    module:{
        //模塊轉換集合
        rules:[
            {
                test: /\.ts$/, //匹配所有以.ts結尾的文件
                loader:"ts-loader",//使用ts-loader的模塊轉換器處理
                exclude:/node_modules/ //排除掉的目錄文件
            },
        ]
    },
    //模塊解析處理
    resolve:{
        //解析所有以.js/.ts結尾的文件
        extensions:[".js",".ts"]
    },
    //使用html-webpack-plugin插件
    plugins:[
        new CleanWebpackPlugin({
            //指定要刪除的文件類型
            cleanAfterEveryBuildPatterns:["**/*.js"]
        }),
        new HemlWebpackPlugin({
            //模板路徑
            template:"./src/index.html",
            //打包生成的文件名
            filename:"index.html",
            //指定標題
            title:"Webpack Demo",
        })
    ],
    //配置打包環境/生產or開發
    mode:"development"
}

 

  三:運行打包效果圖(自動刪除了舊版本的文件)

    

 

十:插件應用(webpack-dev-server)配置伺服器打包完成後自動啟動頁面,並且可以開啟熱模塊替換

  一:引入插件

    npm i -D webpack-dev-server

    

 

 

   

  二:編寫webpack.config.js文件,運行server的命令也可以打包到packjson.js中——可寫可不寫

devServer:{
        //是否自動打開
        open:true,
        historyApiFallback: true,
        //是否使用熱模塊替換
        hot: true,
        //是否壓縮
        compress: true,
        //地址
        host: "本地地址——cmd=>ipconfig查看",
        //
        port: 8089
    },

     

 

 

  三:運行打包後效果圖

    

 

十一:插件應用(css-loader style-loader)

  一:引入插件

    npm i -D css-loader style-loader

    

 

  二:編寫css文件並且在ts中引入

body{
    background-color: bisque;
}

 

import console from "./js/typescript";
//導入css,將把該css輸出引用到js的位置
import './css/index.css'

const x:number=200;
const y:number=100;

document.body.innerHTML=`<h1>${x}+${y}=${console(x,y)}</h1>`

 

  三:編寫webpack.config.js文件

module:{
        //模塊轉換集合
        rules:[
            {
                test: /\.css$/, //匹配所有以.css結尾的文件
                use:["style-loader","css-loader"],//從後向前使用loader處理指定文件
                exclude:/node_modules/ //排除掉的目錄文件
            },
            {
                test: /\.ts$/, //匹配所有以.ts結尾的文件
                loader:"ts-loader",//使用ts-loader的模塊轉換器處理
                exclude:/node_modules/ //排除掉的目錄文件
            },
        ]
    },

  

  四:打包運行效果圖

    

 

十二:插件應用(node-sass sass-loader)

  一:引入插件

    npm i -D node-sass sass-loader

    

 

  二:編寫scss文件並且在ts中引入

$color:#fff;
h1{
    color: $color;
    text-align: center;
}

 

import console from "./js/typescript";
//導入css,將把該css輸出引用到js的位置
import './css/index.css'
import './css/index.scss'

const x:number=200;
const y:number=100;

document.body.innerHTML=`<h1>${x}+${y}=${console(x,y)}</h1>`

 

  三:編寫webpack.config.js 

rules:[
            {
                test: /\.css$/, //匹配所有以.css結尾的文件
                use:["style-loader","css-loader"],//從後向前使用loader處理指定文件
                exclude:/node_modules/ //排除掉的目錄文件
            },
            {
                test: /\.scss$/, //匹配所有以.css結尾的文件
                use:[
                    {loader:"style-loader"},//將css添加到js中生產的style節點中
                    {loader:"css-loader"},//載入css
                    {loader:"sass-loader"} //把scss處理成css
                    //倒處理,從下往上
                ]
            },
            {
                test: /\.ts$/, //匹配所有以.ts結尾的文件
                loader:"ts-loader",//使用ts-loader的模塊轉換器處理
                exclude:/node_modules/ //排除掉的目錄文件
            },
        ]

 

  四:打包運行後效果圖

    

 

十三:插件應用(mini-css-extract-plugin)建議使用該方法,要不然css全放在js中js文件太大,用戶打開頁面就很慢

  一:引入插件

    npm i  -D mini-css-extract-plugin

    

 

  二:編寫webpack.config.js文件

const MiniCssExtractPlugin=require("mini-css-extract-plugin");  

    添加新的new MiniCssExtractPlugin()

plugins:[
        new CleanWebpackPlugin({
            //指定要刪除的文件類型
            cleanAfterEveryBuildPatterns:["**/*.js"]
        }),
        new HemlWebpackPlugin({
            //模板路徑
            template:"./src/index.html",
            //打包生成的文件名
            filename:"index.html",
            //指定標題
            title:"Webpack Demo",
        }),
        new MiniCssExtractPlugin()
    ],

    替換掉所有的style.loader

rules:[
            {
                test: /\.css$/, //匹配所有以.css結尾的文件
                use:[MiniCssExtractPlugin.loader,"css-loader"],//從後向前使用loader處理指定文件
                exclude:/node_modules/ //排除掉的目錄文件
            },
            {
                test: /\.scss$/, //匹配所有以.css結尾的文件
                use:[
                    {loader:MiniCssExtractPlugin.loader},//將css添加到獨立的文件中
                    {loader:"css-loader"},//載入css
                    {loader:"sass-loader"} //把scss處理成css
                    //倒處理,從下往上
                ]
            },
            {
                test: /\.ts$/, //匹配所有以.ts結尾的文件
                loader:"ts-loader",//使用ts-loader的模塊轉換器處理
                exclude:/node_modules/ //排除掉的目錄文件
            },
        ]

 

  三:打包運行後的效果圖

    

 

十四:插件應用(html-loader)

  一:引入插件

    npm i -D html-loader

    

  二:編寫webpack.config.js文件並且修改index.html以及ts文件的引入組件的方式

rules:[
      {
        test:/\.html$/,
        use:[{
            loader:"html-loader",
            options:{
            minimize:true //是否壓縮html
            }
         }]
      }
]

 

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title><%=htmlWebpackPlugin.options.title%></title>
</head>
<body>
    <img src="./img/clw.jpg">
</body>
</html>

原來的ts會把我們顯示的圖片給刷新覆蓋掉,所以這裡我們要修改一下我們的ts生產組件的代碼

import console from "./js/typescript";
//導入css,將把該css輸出引用到js的位置
import './css/index.css'
import './css/index.scss'

const x:number=200;
const y:number=100;

let p=document.createElement("div");
p.innerHTML=`<h1>${x}+${y}=${console(x,y)}</h1>`;
document.body.appendChild(p);

 

  三:打包運行後的效果圖

    


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 漢諾塔問題 在經典漢諾塔問題中,有 3 根柱子及 n 個不同大小的穿孔圓盤,盤子可以滑入任意一根柱子。一開始,所有盤子自上而下按升序依次套在第一根柱子上(即每一個盤子只能放在更大的盤子上面)。移動圓盤時受到以下限制: (1) 每次只能移動一個盤子; (2) 盤子只能從柱子頂端滑出移到下一根柱子; ( ...
  • 一、進行線程池創建 import cn.hutool.core.thread.ThreadFactoryBuilder; import lombok.extern.slf4j.Slf4j; import org.springframework.aop.interceptor.AsyncUncaugh ...
  • 一. 怎麼開啟斷點調試? 隨著開發的深入,越來越覺得高效的調試方法是多麼的重要了,但我們一般上來就是敲一些代碼,誰會去靜下心來學一些看似沒什麼用的調試技巧呢?但這恰恰就是新手和老手之間的區別。 斷點調試是很簡單的,只需要點擊idea上方的小蟲子,啟動調試即可,如下所示。 這當然不是本文的重點,只是開 ...
  • 一:背景 1. 背景 前段時間有位朋友咨詢說他的程式出現了非托管記憶體泄漏,說裡面有很多的 HEAP_BLOCK 都被標記成了 Internal 狀態,而且 size 都很大, 讓我幫忙看下怎麼回事? 比如下麵這樣。 1cbea000: 42000 . 42000 [101] - busy (41fe ...
  • U盤自動讀寫的小玩意 共有四種方法(我知道的方法,全是轉載。轉載也很不易,可望給個硬幣) 方法一(vbs方法 全自動,轉載自bilibili 點我跳轉)文件下載鏈接(點我下載) 方法二(cmd方法 需手動,轉載自bilibili 點我跳轉)文件下載鏈接(點我下載) 方法三(python方法 全自動, ...
  • 5.MySQL常用函數 5.1合計/統計函數 5.1.1合計函數-count count 返回行的總數 Select count(*)|count (列名) from table_name [WHERE where_definition] 練習 -- 統計一個班級共有幾個學生 SELECT COUN ...
  • 就像在學習之前先要識字,我想在介紹優化 JavaScript 代碼之前,先介紹一下自己對編程語言的理解。故事要從一隻叫做 Theseus 的機械鼠和其發明人克勞德-香農(Claude Shannon)說起。在傳記《A Mind at Play:How Claude Shannon Invented ... ...
  • 在 《基於 vite 創建 vue3 全家桶》一文整合了 *Element Plus*,並將 *Element Plus* 中提供的圖標進行全局註冊,這樣可以很方便的延續 *Element UI* 的風格 —— 通過 *el-icon-xxx* 的方式使用圖標(如果有問題的朋友可以先閱讀前面的文章:... ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...