前端工程化 Webpack基礎

来源:https://www.cnblogs.com/fanguangfe/archive/2022/03/29/16072541.html
-Advertisement-
Play Games

隨著ECMAScript 6.0(ES6)是JavaScript 語言的下一代標準的普及,各個大公司和大的廠商都推出了自己的前端開發框架,如Angular,React,Vue 等,微軟更是錦上添花,開發出Typescript 的JavaScript超集語言,更是讓各個前端框架所採用,這將是前端領域的 ...


前端工程化

  • 模塊化 (js模塊化,css模塊化,其他資源模塊化)
  • 組件化 (復用現有的UI結構、樣式、行為)
  • 規範化 (目錄結構的劃分、編碼規範化、介面規範化、文檔規範化、Git分支管理)
  • 自動化 (自動化構建、自動部署、自動化測試)

webpack

  • 前端項目工程化的具體解決方案
  • 提供友好的前端模塊化開發支持,以及代碼壓縮混淆、處理js相容性、性能優化等強大功能

安裝

  • 初始化項目
    npm init -y
  • 安裝
    npm install webpack webpack-cli --save-dev
  • 根目錄創建webpack配置文件 webpack.config.js
// webpack.config.js
module.exports = {
    ...
}

webpack.config.js 配置

1.mode模式

  • development
    • 開發環境
    • 不會對打包生成的文件進行代碼壓縮和性能優化
    • 打包速度快
  • production
    • 生產環境
    • 會對打包生成的文件進行代碼壓縮和性能優化
    • 打包速度慢
module.exports = {
    mode: 'development'
}

2.出入口文件

  • entry 打包文件入口,預設為:src/index.js
  • output 打包文件輸出,預設為: dist/main.js
const path = require('path')
module.exports = {
    entry: path.join(__dirname, './src/index.js'),   // 入口文件
    output: {
        path: path.join(__dirname, './dist'),        // 輸出目錄
        filename: 'bundle.js'                        // 輸出文件
    }
}

3.loader載入器

webpack文件載入器,webpack預設只能打包處理.js文件,其他非.js尾碼文件需要loader載入器處理完成後才能進行打包

3-1. less, css等樣式文件處理

  • 依賴安裝 npm install style-loader css-loader less-loader --save-dev
  • rules配置添加規則: test表示匹配文件類型,use表示要調用的loader,調用順序為從後往前
module.exports = {
    rules: [
        { test: /\.css$/, use: ['style-loader', 'css-loader'] },    // css文件處理
        { test: /\.less$/, use: ['style-loader', 'css-loader', 'less-loader'] },    // less文件處理
    ]
}

3-2. url路徑相關文件處理,如圖片、字體文件、csv、xml文件等

  • 依賴安裝 npm install url-loader file-loader csv-loader xml-loader --save-dev
  • url-loader參數:limit指定圖片大小,單位為Byte,<=limit大小圖片,才會被轉為base64格式圖片
  • 參數配置為url參數與與options對象兩種形式
module.exports = {
    rules: [
        // url參數形式配置
        { test: /\.jpg|png|gif$/, use: 'url-loader?limit=10000' },
        // url參數options形式配置
        {
            test: /\.jpg|png|gif$/,
            use: {
                loader: 'url-loader',
                options: { 
                    limit: 10000,
                    outputPath: 'image'       // 明確指定打包生成的圖片文件存放到dist目錄下的image文件夾中
                }
            }
        },
        // 字體文件
        {
            test: /\.(woff2?|eot|ttf|otf)(\?.*)?$/,
            use: {
                loader: 'url-loader',
                options: { limit: 10000 }
            }
        },
        // csv文件
        {
            test: /\.(csv|tsv)$/i,
            use: {
                loader: 'csv-loader'
            }
        },
        // xml文件
        {
            test: /\.xml$/i,
            use: {
                loader: 'xml-loader'
            }
        }
    ]
}

3-3. js高級語法處理

  • 依賴安裝 npm install ... --save-dev
名稱 描述
@babel/core babel核心工具
@babel/preset-env babel預定義環境
babel-loader babel載入器,編譯js文件用
core-js 使老版本瀏覽器相容新版ES語法
module.exports = {
    rules: [
        {
            test: /\.js$/,
            use: {
                loader: 'babel-loader',
                options: {
                    // 設置預定義環境
                    presets: [
                        [
                            '@babel/preset-env',    // 指定環境的插件
                            // 配置信息
                            {
                                // 相容的瀏覽器目標版本
                                targets: {
                                    'chrome': '58',
                                    'ie': '11'
                                },
                                // 指定core.js版本
                                'corejs': '3',
                                // 使用corejs方式 'usage':按需載入
                                'useBuiltIns': 'usage'
                            }
                        ]
                    ]
                }
            }
        }
    ]
}

4.webpack-dev-server

  • webpack 開發環境http伺服器
  • 安裝 npm install webpack-dev-server --save-dev
  • package.json配置scripts
"scripts": {
    "dev": "webpack serve"
}
  • 啟動 npm run dev
  • webpack配置文件devServer節點
module.exports = {
    devServer: {
        open: true,             // npm run dev後,自動打開瀏覽器
        host: '127.0.0.1',      // 主機地址
        port: 8080              // 埠號,預設為8080
    }
}

5.插件

  • html-webpack-plugin 自定義輸出index.html內容,會將打包好的bundle.js自動註入index.html的底部
    • 安裝 npm install html-webpack-plugin --save-dev
    • plugins節點引入
const HtmlWebpackPlugin = require('html-webpack-plugin') 
module.exports = {
    plugins: [
        new HtmlWebpackPlugin({
            template: './src/index.html'   // 指定入口自定義的html文件
        })
    ]
}
  • clean-webpack-plugin 打包時自動清理dist目錄舊文件插件
    • 安裝 npm install clean-webpack-plugin --save-dev
    • 引入
const CleanWebpackPlugin = require('clean-webpack-plugin')
module.exports = {
    plugins: [
        new CleanWebpackPlugin()
    ]
}

6.SourceMap

  • 存儲代碼壓縮混淆前後的對應關係文件
  • 代碼出錯時,可以通過對應關係,直接顯示原始代碼出錯位置,方便後期調試
  • sourceMap選項很多,具體可參考webpack devtool sourcemap
  • 常用選項為: source-map inline-source-map eval-source-map
module.exports = {
    // eval-source-map 使"運行報錯的行數"與”源代碼行數“保持一致,但性能較低
    devtool: 'eval-source-map'
}
  • 實踐建議
    • 開發環境建議設置為 eval-source-map,可以精准定位到具體的錯誤行
    • 生成環境建議關閉sourceMap,或者設置值為 nosources-source-map,防止源碼泄露,提高安全性

打包發佈

  • package.json配置scripts
"scripts": {
    "build": "webpack --mode production"
}
  • 打包 npm run build

摘要

更多配置可查看官方文檔


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

-Advertisement-
Play Games
更多相關文章
  • 關於 HarmonyOS 開發中鴻蒙的無線輪播功能(效果圖如下)是一個很常見的功能,在鴻蒙中怎麼實現呢?今天寫一個demo來記錄一下該功能的實現,主要分為“準備工作”,“圖片輪播”,“無線輪播”,“運行效果”四個方面進行實 1. 準備工作 1.1 想要實現無線輪播功能需要查看PageSlider和“ ...
  • 一、transition(過渡、轉變的意思) transition 屬性是一個簡寫屬性,用於設置四個過渡屬性: 1. transition-property:設置過渡效果的屬性名稱(預設值是all); 2. transition-duration:設置過渡完成所需要的時間(預設值是0); 3. tr ...
  • 使用 Ajax 技術網頁應用能夠快速地將增量更新呈現在用戶界面上,而不需要重載(刷新)整個頁面,這使得程式能夠更快地回應用戶的操作。 ...
  • 一、冒泡排序 原理:相鄰兩元素之間兩兩比較,比較出大值進行賦值互換,再依次與相鄰的元素比較,層層遞進。#互換元素位置,相互賦值。 時間複雜度:最好O(n),最差O(n^2) 1、比較相鄰的兩個元素,如果前一個比後一個大,則交換位置。2、比較完第一輪的時候,最後一個元素是最大的元素。3、這時候最後一個 ...
  • 具體示例 //代碼 console.log(JSON.stringify({ x: 5, y: 6 },null,2)); //輸出結果 { "x": 5, "y": 6 } JSON.stringify() 介紹 JSON.stringify()方法將一個JavaScript對象或值轉換為JSON ...
  • 前言 VuePress 博客搭建系列是我寫的第 6 個系列文章,前 5 個系列分別是 JavaScript 深入系列,JavaScript 專題系列、underscore 系列、ES6 系列、TypeScript 系列。 VuePress 博客搭建系列共計 33 篇,講解使用 VuePress 搭建 ...
  • 中國軟體杯 電力客戶行為分析 圖表聯動echarts-demo(flask) 題目鏈接(可下載原始CSV數據集):http://www.cnsoftbei.com/plus/view.php?aid=715 註:其中引用的js文件自行查找 1)完整的原始數據(elec_0) 屬性含義: userid ...
  • 本人第一次發博客,用意在於記錄自己在開發過程中用到的實用工具並分享出來,寫的可能不好,請大家多多包涵!!! 工具官網:https://www.zwibbler.com 基於Canvas的一個前端繪畫工具。具體功能本人暫未深究。主要在項目中的應用場景如下: 1.將Canvas畫板植入前端 2.用戶可通 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...