狠狠色丁香婷婷综合尤物/久久精品综合一区二区三区/中国有色金属学报/国产日韩欧美在线观看 - 国产一区二区三区四区五区tv

LOGO OA教程 ERP教程 模切知識(shí)交流 PMS教程 CRM教程 開發(fā)文檔 其他文檔  
 
網(wǎng)站管理員

webpack VS vite :從零構(gòu)建webpack

admin
2024年11月27日 10:43 本文熱度 779

本文轉(zhuǎn)載于稀土掘金技術(shù)社區(qū),作者:midsummer18

原文鏈接:https://juejin.cn/post/7410611033147228172

前言

工作流算是面試中的??碱}了,面試中主要圍繞著搞定復(fù)雜的前端開發(fā)工作流程的幾個(gè)工具:vite, webpack,rollup gulp。接下來用通俗一點(diǎn)的方式帶友友認(rèn)識(shí)下webpack,簡(jiǎn)單來說,Webpack 負(fù)責(zé)將你的源碼及其依賴轉(zhuǎn)換成瀏覽器可以理解的形式,并且將所有文件整合到一個(gè)或多個(gè) bundle 中,同時(shí)自動(dòng)處理好 HTML 文件中的腳本引用,使得整個(gè)應(yīng)用可以正常運(yùn)行。

一:webpack 與 vite區(qū)別

Webpack

  • 更適合大型項(xiàng)目:Webpack 的強(qiáng)大功能和靈活性使其適用于處理復(fù)雜的大型項(xiàng)目。
  • 配置復(fù)雜:為了滿足多樣化的需求,Webpack 的配置較為復(fù)雜。
  • 構(gòu)建較慢:由于需要對(duì)所有資源進(jìn)行打包處理,構(gòu)建速度相對(duì)較慢。
  • 功能強(qiáng)大:具備豐富的插件生態(tài)系統(tǒng),能夠處理各種類型的資源和構(gòu)建需求。

Vite

  • 更適合中小型項(xiàng)目:Vite 的簡(jiǎn)潔配置和快速啟動(dòng)使其適用于中小型項(xiàng)目的開發(fā)。
  • 配置簡(jiǎn)單:Vite 的配置較為簡(jiǎn)單,易于上手。
  • 啟動(dòng)速度快:Vite 采用按需編譯的方式,無需預(yù)先打包整個(gè)應(yīng)用。
  • 利用 ES 模塊:直接利用瀏覽器對(duì) ES 模塊的支持,簡(jiǎn)化了開發(fā)流程,但在高級(jí)特性和插件支持上功能相對(duì)有限。

二:Webpack 打包過程概述

讀取入口文件的內(nèi)容,分析入口文件,遞歸的去讀取模塊所依賴的其他文件內(nèi)容,生成 AST 語法樹 ,然后根據(jù) AST 語法樹生成瀏覽器能運(yùn)行的代碼(代碼版本的降級(jí))

2.1. HTTP 服務(wù)器

  • 使用 webpack-dev-server 創(chuàng)建一個(gè)本地開發(fā)服務(wù)器。
  • 配置服務(wù)器監(jiān)聽 5173 端口,并且能夠自動(dòng)刷新頁面。
  • 服務(wù)器會(huì)自動(dòng)識(shí)別打包輸出的文件,并在瀏覽器中加載。

2.2. 自動(dòng)生成 index.html

  • 使用 html-webpack-plugin 插件來自動(dòng)生成 index.html 文件。
  • 插件會(huì)在 index.html 中自動(dòng)插入打包后的 JavaScript 文件的引用(如 bundle.js)。
  • 這樣可以確保 HTML 文件與生成的 JS 文件正確關(guān)聯(lián)。

2.3. 打包 main.js

  • Webpack 從 main.js 開始解析應(yīng)用的所有依賴項(xiàng)。
  • 它會(huì)把所有依賴的模塊合并到一個(gè)或多個(gè)輸出文件(bundle)中。
  • 默認(rèn)情況下,這些文件會(huì)被命名為 bundle.js 并放在指定的輸出路徑下。

三:構(gòu)建webpack

3.1:初始化項(xiàng)目

  • 新建一個(gè)文件夾,因?yàn)楣ぷ髁魇且粋€(gè)后端項(xiàng)目,所以可輸入指令 npm init -y初始化為后端項(xiàng)目
  • 創(chuàng)建一個(gè)public文件夾,在該文件夾下新建文件index.html
  • src文件夾下創(chuàng)建main.js文件作為入口文件,隨便寫點(diǎn)輸出,測(cè)試效果

3.2:設(shè)置package.json文件

項(xiàng)目從npm run dev 啟動(dòng)

  • webpack :核心包,提供了Webpack的功能。
  • webpack-cli :個(gè)命令行工具,允許運(yùn)行Webpack。
  • webpack-dev-server :中間件,為開發(fā)提供了快速反饋循環(huán),具有熱更新能力。
  • html-webpack-plugin :插件,用于生成一個(gè)HTML文件,并將Webpack打包后的JS文件注入到該HTML文件中。
  • @babel/core :Babel的核心包,Babel是一個(gè)編譯器,可以將較新的JavaScript代碼轉(zhuǎn)換成向后兼容的代碼。
  • @babel/preset-env :預(yù)設(shè),告訴Babel如何轉(zhuǎn)換你的代碼以支持目標(biāo)環(huán)境。
  • babel-loader :Webpack加載器,用于將Babel集成到Webpack的工作流程中。
  "scripts": {
    "dev":"webpack serve --open"
  },
  "devDependencies": {
    "webpack":"^5.36.2",
    "webpack-cli":"^4.6.0",
    "webpack-dev-server":"^3.11.2",
    "html-webpack-plugin":"^5.3.2"
    "@babel/core":"7.15.0",
    "@babel/preset-env":"7.15.0",
    "babel-loader":"8.2.2"
  }

3.3:設(shè)置webpack.config.js文件

webpack 核心概念是通過編寫配置文件實(shí)現(xiàn)對(duì)項(xiàng)目工程的把控 以下是基于您提供的結(jié)構(gòu)整理的Webpack配置項(xiàng)概述,按照您所要求的格式進(jìn)行排列:

  1. 基礎(chǔ)配置

    • 入口 (entry):定義了應(yīng)用的起點(diǎn)文件,即Webpack從哪個(gè)文件開始構(gòu)建依賴圖。常見的入口文件是 main.js 或者其他類似的初始化腳本文件。
    • 輸出 (output):確定了最終打包文件的名稱以及它們將被放置的位置。例如,bundle.js 會(huì)被輸出到 dist 目錄下。
  2. 開發(fā)模式配置

    • 模式 (mode):設(shè)置為 development 模式可以啟用一些有助于提高開發(fā)體驗(yàn)的功能,如更詳細(xì)的錯(cuò)誤堆棧跟蹤、不壓縮代碼等。
    • 開發(fā)服務(wù)器 (devServer):用于配置開發(fā)環(huán)境中的HTTP服務(wù)器,可以指定服務(wù)器監(jiān)聽的端口、是否啟用熱模塊替換(Hot Module Replacement, HMR)等功能,幫助開發(fā)者更快地迭代開發(fā)工作。
  3. 加載與優(yōu)化

    • 加載器與規(guī)則 (module.rules):通過一系列規(guī)則定義了Webpack如何處理項(xiàng)目中的不同類型的資源文件。例如,.js 文件可能需要通過 babel-loader 進(jìn)行轉(zhuǎn)譯,而 .css 文件可能需要通過 css-loader 和 style-loader 來加載和應(yīng)用樣式。
    • 插件 (plugins):Webpack 插件用于執(zhí)行范圍更廣的任務(wù),如清理舊的構(gòu)建文件、優(yōu)化輸出結(jié)果、注入HTML模板等。一個(gè)常見的插件是 HtmlWebpackPlugin,它可以自動(dòng)生成 HTML 文件并將打包后的 JavaScript 文件自動(dòng)注入其中。

Babel 幫助開發(fā)者簡(jiǎn)化了開發(fā)流程,集中精力于業(yè)務(wù)邏輯而不是兼容性問題

  • Babel 是一個(gè) JavaScript 轉(zhuǎn)譯器,可將現(xiàn)代 JS 代碼轉(zhuǎn)換為向后兼容的代碼。
  • 允許開發(fā)者使用最新的 JavaScript 語法,而不用擔(dān)心瀏覽器兼容性問題。
  • AST (抽象語法樹) : Babel 通過解析源代碼生成 AST,然后基于此樹進(jìn)行轉(zhuǎn)換。
  • Presets (預(yù)設(shè)) : 一組 plugins (插件),告訴 Babel 如何進(jìn)行代碼轉(zhuǎn)換, @babel/preset-env: 根據(jù)目標(biāo)環(huán)境自動(dòng)選擇需要轉(zhuǎn)換的語法特性。
  • 通過 .babelrc 或 babel.config.js 文件指定 presets 和 plugins,可以設(shè)定特定的環(huán)境變量和條件來控制轉(zhuǎn)換行為。
  • 可以自動(dòng)添加 polyfills (對(duì)于一些新的 API 方法) 來保證舊環(huán)境下的功能實(shí)現(xiàn)。
// commonjs 模塊化
const path = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin');
module.exports = {
         mode'development'// 開發(fā)階段
         entry'./src/main.js'
         // 入口文件,沿著入口找到所有依賴模塊,將之打包成一個(gè)文件
         // 打包成bindle.js
         output: {
            filename'bundle.js',
            path: path.resolve(__dirname, 'dist')//resolve會(huì)校驗(yàn)路徑
        },
        //模塊車間
        module:{
            rules:[
                {
                    test:/.js$/,
                    exclude:/node_modules/,
                    use:{
                       loader:'babel-loader'
                    }
                }
            ]
        },
        devServer:{
            port:8080,
            contentBase:path.join(__dirname,'public'),//join拼接路徑
            hot:true
        },
        plugins:[
            new HtmlWebpackPlugin({
                template:'./public/index.html'
            })
        ]
    }

在main.js中輸入進(jìn)行測(cè)試

let a = 1
console.log(`${a}`)

使用Babel,需要在根目錄下創(chuàng)建一個(gè)名為.babelrc的文件

{
    "presets": [
        "@babel/preset-env"
    ]
}

通過上述配置,Webpack 將能夠處理項(xiàng)目的入口文件 main.js 及其依賴,生成一個(gè)或多個(gè)捆綁包(如 bundle.js),并啟動(dòng)一個(gè)開發(fā)服務(wù)器來服務(wù)于這些文件。同時(shí),通過 HtmlWebpackPlugin 插件自動(dòng)生成帶有正確腳本引用的 index.html 文件。友友們可以在命令行輸入npm run dev 啟動(dòng)項(xiàng)目,看看輸出

四:按需配置

4. 1:上線形式打包

  • webpack.config.js文件刪去 mode: 'development'
  • package.json文件中添加:
"scripts": {
    "build":"webpack --mode production"
  },
  • 運(yùn)行 npm run build,會(huì)發(fā)現(xiàn)自動(dòng)生成了一個(gè)dist文件夾


4.2:引入css

  1. webpack.config.js文件中的module.rules中添加
{
    test:/.css$/,
    use:[
        'style-loader',
        'css-loader'
    ]
}
  • test: /.css$/:這是一個(gè)正則表達(dá)式,用于匹配所有 .css 文件。

  • use 數(shù)組:指定了在處理 CSS 文件時(shí)使用的 loader。

    • 'style-loader':將 CSS 插入到 DOM 的 <style> 標(biāo)簽中。
    • 'css-loader':解析 CSS 文件中的 @import 和 url(),并將其處理為 JavaScript 模塊。
  1. package.json文件中說明依賴
 "devDependencies": {
    "css-loader":"6.0.0",
    "style-loader":"3.0.0"
  }

3.再簡(jiǎn)單設(shè)置一下css文件中的樣式

body{
    width100%;
    height100%;
    background-color#d31818;
}

4.在入口文件(main.js)中輸入import './common.css',這告訴 Webpack 處理這個(gè) CSS 文件,并將其打包到最終的 bundle 文件中.npm i 之后就可以利用webpack加載靜態(tài)資源


4.3:使用Vue

  1. webpack.config.js文件中的module.rules中添加說明,同時(shí)引入插件
{
    test:/.vue$/,
    use:{
        loader:'vue-loader'
    }
},
{
    test:/.styl(us)?$/,
    use:[
        'style-loader',
        'css-loader',
        'stylus-loader'
    ]                    
}
  • test: /.vue$/:匹配所有 .vue 文件。
  • use: { loader: 'vue-loader' }:使用 vue-loader 來處理 .vue 文件。
const { VueLoaderPlugin } = require('vue-loader')
plugins:[
    new VueLoaderPlugin()
]
  • VueLoaderPlugin:這是一個(gè) Vue 專用的 Webpack 插件,它在構(gòu)建過程中處理 Vue 組件。沒有這個(gè)插件,vue-loader 將無法正常工作
  1. package.json文件中說明依賴之后,npm i 安裝依賴
  "devDependencies": {
    "vue-loader""^16.2.0",
    "stylus-loader""^8.1.0",
    "stylus":"0.63.0"
  },
  "dependencies": {
    "vue""^3.0.0"
  },

3.設(shè)置main.js,與正常使用vue一樣

import './common.css' //webpack/vite加載靜態(tài)資源
import App from './App.vue'
import { createApp } from 'vue'

createApp(App)
    .mount('#app')

4.在src下創(chuàng)建App.vue

<template>
    <div class="title">
        App {{ word }}
    </div>

</template>

<script setup>
import { ref, onMounted } from 'vue'
const word = ref('Hello')
onMounted(() => {
    setTimeout(() => {
        word.value = 'World'
    }, 2000)
})
</
script>
<style lang="stylus">
.title
    font-size 30px
    color green
</style>

項(xiàng)目跑起來之后效果如圖


(ps:如果運(yùn)行不起來,報(bào)錯(cuò)配置有問題,嘗試刪除 node_modules 文件夾和 package-lock.json 文件,然后重新安裝依賴)

五:webpack 與 vite區(qū)別

構(gòu)建完webpack之后,相信友友們?cè)俅位卮疬@個(gè)問題時(shí),會(huì)有更深的理解了

  1. 配置與核心概念:

    • Webpack: 配置文件較為復(fù)雜,核心概念包括 entry (入口點(diǎn))、output (輸出配置)、module (使用 loader 處理各種文件類型) 和 plugins (插件擴(kuò)展功能)。Webpack 的靈活性允許用戶高度定制化其構(gòu)建流程。Webpack 在早期沒有支持 <script type="module">,所有模塊必須通過 Webpack 的模塊依賴系統(tǒng)打包,處理完所有文件后才能運(yùn)行,充當(dāng)了一個(gè)全面的打包器 (bundler)。
    • Vite: 采用約定大于配置的理念,配置需求極少,旨在簡(jiǎn)化開發(fā)過程。Vite 內(nèi)置了現(xiàn)代構(gòu)建工具的最佳實(shí)踐,減少了用戶配置的復(fù)雜性。Vite 支持原生 ES6 模塊 (<script type="module">),允許懶加載和按需加載模塊。當(dāng)切換路由或引入新功能時(shí),Vite 只會(huì)在需要時(shí)動(dòng)態(tài)加載相關(guān)模塊,從而提高了啟動(dòng)速度。
  2. 背景與發(fā)展:

    • Webpack: 作為早期的工作流解決方案,Webpack 在其早期版本中建立了成熟的生態(tài)系統(tǒng),適用于各種項(xiàng)目需求。它的高度可配置性和插件系統(tǒng)使其適合企業(yè)級(jí)應(yīng)用。
    • Vite: 由 Vue 3 團(tuán)隊(duì)推出,作為 Vue 3 的官方構(gòu)建工具,Vite 更加現(xiàn)代,提供了更快的開發(fā)體驗(yàn)。Vite 的構(gòu)建流程不需要傳統(tǒng)的打包步驟,通過使用原生 ES6 模塊和支持懶加載,顯著提高了開發(fā)速度和性能。Vite 的缺點(diǎn)是目前只能支持 IE11 及之后版本的瀏覽器。
  3. 性能:

    • Webpack: 在處理大型項(xiàng)目時(shí),Webpack 的構(gòu)建速度可能會(huì)變得很慢,特別是在啟動(dòng)階段,構(gòu)建時(shí)間可能需要幾十秒到幾分鐘。隨著項(xiàng)目規(guī)模的增加,性能問題愈加顯著。Webpack 需要將所有文件處理完畢才能運(yùn)行,導(dǎo)致較長(zhǎng)的構(gòu)建時(shí)間。
    • Vite: 通過不需要傳統(tǒng)的打包過程來顯著提高性能。Vite 利用原生 ES6 模塊進(jìn)行即時(shí)的模塊熱重載,使啟動(dòng)速度更快,并且能在切換路由或引入新功能時(shí)進(jìn)行按需加載。這樣,Vite 提供了更加流暢的開發(fā)體驗(yàn),盡管在支持瀏覽器的范圍上有一定限制。
  4. 生態(tài)系統(tǒng):

    • Webpack: 擁有廣泛的生態(tài)系統(tǒng)和社區(qū)支持,支持各種插件和加載器,滿足復(fù)雜的配置需求。其成熟的工具鏈和社區(qū)資源使其成為企業(yè)級(jí)項(xiàng)目的首選。
    • Vite: 盡管較新,但其生態(tài)系統(tǒng)正在迅速發(fā)展,尤其是與 Vue 的緊密集成帶來了良好的體驗(yàn)。隨著時(shí)間的推移,Vite 的生態(tài)系統(tǒng)和社區(qū)也在不斷壯大。

總結(jié)

Webpack 提供了全面的功能和高度的配置能力,適用于各種復(fù)雜的開發(fā)場(chǎng)景,而 Vite 則通過簡(jiǎn)化配置和提高性能,提供了更加流暢的開發(fā)體驗(yàn),特別適合需要快速反饋的現(xiàn)代前端開發(fā)環(huán)境。Vite 的原生 ES6 模塊支持和按需加載特性進(jìn)一步增強(qiáng)了開發(fā)速度,但目前的瀏覽器支持范圍有所限制。


該文章在 2024/11/27 10:43:56 編輯過
相關(guān)文章
正在查詢...
點(diǎn)晴ERP是一款針對(duì)中小制造業(yè)的專業(yè)生產(chǎn)管理軟件系統(tǒng),系統(tǒng)成熟度和易用性得到了國(guó)內(nèi)大量中小企業(yè)的青睞。
點(diǎn)晴PMS碼頭管理系統(tǒng)主要針對(duì)港口碼頭集裝箱與散貨日常運(yùn)作、調(diào)度、堆場(chǎng)、車隊(duì)、財(cái)務(wù)費(fèi)用、相關(guān)報(bào)表等業(yè)務(wù)管理,結(jié)合碼頭的業(yè)務(wù)特點(diǎn),圍繞調(diào)度、堆場(chǎng)作業(yè)而開發(fā)的。集技術(shù)的先進(jìn)性、管理的有效性于一體,是物流碼頭及其他港口類企業(yè)的高效ERP管理信息系統(tǒng)。
點(diǎn)晴WMS倉儲(chǔ)管理系統(tǒng)提供了貨物產(chǎn)品管理,銷售管理,采購管理,倉儲(chǔ)管理,倉庫管理,保質(zhì)期管理,貨位管理,庫位管理,生產(chǎn)管理,WMS管理系統(tǒng),標(biāo)簽打印,條形碼,二維碼管理,批號(hào)管理軟件。
點(diǎn)晴免費(fèi)OA是一款軟件和通用服務(wù)都免費(fèi),不限功能、不限時(shí)間、不限用戶的免費(fèi)OA協(xié)同辦公管理系統(tǒng)。
Copyright 2010-2025 ClickSun All Rights Reserved