摘要:在這個(gè)過(guò)程中,會(huì)用到一些解析工具用來(lái)預(yù)處理一些模塊以及拓展語(yǔ)言例如這些工具的配置使用都是在中完成的。屬性,表示進(jìn)行轉(zhuǎn)換時(shí),應(yīng)該使用哪個(gè)。插件接口功能極其強(qiáng)大,可以用來(lái)處理各種各樣的任務(wù)。
對(duì)于前端工程化,webpack一個(gè)神奇的工具,既然是個(gè)神奇的工具。那我們保留我們的好奇心,來(lái)聊一聊它,首先我們要搞清楚webpack到底是用來(lái)解決什么問(wèn)題的,然后我們來(lái)看看它到底是怎么做的,最后來(lái)看看它的一些基本用法,下面就來(lái)侃一侃。
什么是webpack以及webpack的作用 (解決什么問(wèn)題)如今web前端的業(yè)務(wù)功能越來(lái)越復(fù)雜,實(shí)現(xiàn)方式也越來(lái)越豐富,在web頁(yè)面開(kāi)發(fā)過(guò)程中我們通常會(huì)引用很多第三方模塊以及一些拓展語(yǔ)言(stylus,Scss, JSX...)來(lái)簡(jiǎn)化開(kāi)發(fā)難度,而這些第三方模塊和一些拓展語(yǔ)言瀏覽器不能直接識(shí)別,所以要通過(guò)經(jīng)過(guò)打包過(guò)程生成可以讓瀏覽器識(shí)別的格式。webpack實(shí)現(xiàn)原理 (怎么做的)就像一幢居民樓,要建起這樣一座居民樓,最基本的材料是磚、瓦、鋼筋、混凝土。而要組合這些材料形成一幢建筑,肯定是有一定的方法流程以及工具的,比如第一步先搭建地基,后面用塔吊不斷的在地基上疊加完善就形成了一幢建筑。在這個(gè)過(guò)程中,用到的方法流程以及工具起到的作用就類(lèi)似于webpack。
進(jìn)入正題,webpack其實(shí)就是一個(gè)JavaScript模塊集成工具,同時(shí)具有壓縮文件以及優(yōu)化文件結(jié)構(gòu)的作用。經(jīng)過(guò)webpack打包生成的bundle包,可被瀏覽器識(shí)別解析。
在這個(gè)過(guò)程中,會(huì)用到一些loaders解析工具用來(lái)預(yù)處理一些模塊以及拓展語(yǔ)言(例如:stylus、Scss...),這些工具的配置使用都是在webpack中完成的。其中常用的loaders工具有:style-loader、 css-loader、 stylus-loader。
原理的理解可以參照上圖。
webpack的最核心的原理: 1、一切皆模塊 2、按需加載。
一切皆模塊 webpack會(huì)將源程序按照程序結(jié)構(gòu)分割成一個(gè)個(gè)獨(dú)立的小模塊,當(dāng)需要這些小模塊時(shí),進(jìn)行組合重構(gòu),避免冗余,達(dá)到重復(fù)利用。
按需加載 傳統(tǒng)的打包工具是將所有模塊編譯生成一個(gè)龐大的bundle.js文件,這樣形成的打包文件體積過(guò)于龐大,而webpack通過(guò)異步加載可以實(shí)現(xiàn)按需加載,減小了打包后的體積。
webpack的使用方法 (怎么用它)在使用webpack之前首先要理解四個(gè)基本概念:
1. 入口(entry)webpack要實(shí)現(xiàn)打包,首先我們得指定它的入口,指定入口后,webpack才會(huì)找出那些模塊和庫(kù)是入口起點(diǎn)(直接和間接)的依賴(lài)。
接下來(lái)我們來(lái)看一個(gè)最簡(jiǎn)單的entry的配置例子。
webpack.base.config.js
module.exports = { entry: "./src/main.js" };2. 出口(output)
出口即配置打包后的輸出文件路徑,以及如何命名這些文件,默認(rèn)值為 ./dist?;旧希麄€(gè)應(yīng)用程序結(jié)構(gòu),都會(huì)被編譯到你指定的輸出路徑的文件夾中。你可以通過(guò)在配置中指定一個(gè) output 字段,來(lái)配置這些處理過(guò)程:
webpack.base.config.js
const path = require("path"); module.exports = { entry: "./src/main.js", output: { path: path.resolve(__dirname, "dist"), // 輸出路徑 filename: "output.bundle.js" // 輸出文件名 } };3. loader
loader能夠?qū)⒎荍avaScript文件轉(zhuǎn)化為webpack識(shí)別的JavaScript文件,比如講圖片轉(zhuǎn)化為JavaScript可調(diào)用的格式,或者將一些擴(kuò)展語(yǔ)言文件轉(zhuǎn)化為瀏覽器可識(shí)別的文件格式。
本質(zhì)上,webpack loader 將所有類(lèi)型的文件,轉(zhuǎn)換為應(yīng)用程序的依賴(lài)圖(和最終的 bundle)可以直接引用的模塊。
在更高層面,在 webpack 的配置中 loader 有兩個(gè)目標(biāo):
test 屬性,用于標(biāo)識(shí)出應(yīng)該被對(duì)應(yīng)的 loader 進(jìn)行轉(zhuǎn)換的某個(gè)或某些文件。
use 屬性,表示進(jìn)行轉(zhuǎn)換時(shí),應(yīng)該使用哪個(gè) loader。
webpack.config.js
const path = require("path"); const config = { output: { filename: "my-first-webpack.bundle.js" }, module: { rules: [ { test: /.txt$/, use: "raw-loader" } ] } }; module.exports = config;4. 插件(plugins)
loader 被用于轉(zhuǎn)換某些類(lèi)型的模塊,而插件則可以用于執(zhí)行范圍更廣的任務(wù)。插件的范圍包括,從打包優(yōu)化和壓縮,一直到重新定義環(huán)境中的變量。插件接口功能極其強(qiáng)大,可以用來(lái)處理各種各樣的任務(wù)。
想要使用一個(gè)插件,你只需要 require() 它,然后把它添加到 plugins 數(shù)組中。多數(shù)插件可以通過(guò)選項(xiàng)(option)自定義。你也可以在一個(gè)配置文件中因?yàn)椴煌康亩啻问褂猛粋€(gè)插件,這時(shí)需要通過(guò)使用 new 操作符來(lái)創(chuàng)建它的一個(gè)實(shí)例。
webpack.config.js const HtmlWebpackPlugin = require("html-webpack-plugin"); // 通過(guò) npm 安裝 const webpack = require("webpack"); // 用于訪(fǎng)問(wèn)內(nèi)置插件 const config = { module: { rules: [ { test: /.txt$/, use: "raw-loader" } ] }, plugins: [ new HtmlWebpackPlugin({template: "./src/index.html"}) ] }; module.exports = config;其他一些詳細(xì)用法可以參考webpack官方文檔。 參考: webpack中文文檔
本文基于自己學(xué)習(xí)網(wǎng)絡(luò)中的webpack整理的一份基本概念文檔,是自己對(duì)于webpack使用的理解總結(jié),如有問(wèn)題,煩請(qǐng)?jiān)u論指正,共同學(xué)習(xí),共同進(jìn)步。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/105680.html
摘要:第節(jié)認(rèn)識(shí)的作用學(xué)習(xí)的一原因現(xiàn)在的前端網(wǎng)頁(yè)功能豐富,特別是單頁(yè)應(yīng)用技術(shù)流行后,的復(fù)雜度增加和需要一大堆依賴(lài)包,還需要解決,新增樣式的擴(kuò)展寫(xiě)法的編譯工作。在出現(xiàn)后,還肩負(fù)起了優(yōu)化項(xiàng)目的責(zé)任。其實(shí)就是獲取了項(xiàng)目的絕對(duì)路徑。 第01節(jié):認(rèn)識(shí)WebPack的作用: 學(xué)習(xí)的一原因: 現(xiàn)在的前端網(wǎng)頁(yè)功能豐富,特別是SPA(single page web application 單頁(yè)應(yīng)用)技術(shù)流行后,...
摘要:以為例,編寫(xiě)來(lái)幫助我們完成重復(fù)的工作編譯壓縮我只要執(zhí)行一下就可以檢測(cè)到文件的變化,然后為你執(zhí)行一系列的自動(dòng)化操作,同樣的操作也發(fā)生在這些的預(yù)處理器上。的使用是針對(duì)第三方類(lèi)庫(kù)使用各種模塊化寫(xiě)法以及語(yǔ)法。 showImg(https://segmentfault.com/img/bVbtZYK); 一:前端工程化的發(fā)展 很久以前,互聯(lián)網(wǎng)行業(yè)有個(gè)職位叫做 軟件開(kāi)發(fā)工程師 在那個(gè)時(shí)代,大家可能...
摘要:今天順便總結(jié)了下之前的一些經(jīng)驗(yàn),希望對(duì)大家的工作或者學(xué)習(xí)有一些幫助。老生常談的啥的就不多說(shuō)了,簡(jiǎn)單分享些插件和配置功能優(yōu)化,方便大家更省力地寫(xiě)代碼。另外,的正規(guī)操作常用于服務(wù)端項(xiàng)目的發(fā)布,增加了不少靈活性,一下子解放了運(yùn)維大哥。 前端工程化這些事情現(xiàn)在已經(jīng)算是深入人心了,即便不清楚具體含義vue-cli creat-react-app之類(lèi)的腳手架也幫助大家快速開(kāi)發(fā)了不少項(xiàng)目。 今天順便...
摘要:插件開(kāi)發(fā)前端掘金作者原文地址譯者插件是為應(yīng)用添加全局功能的一種強(qiáng)大而且簡(jiǎn)單的方式。提供了與使用掌控異步前端掘金教你使用在行代碼內(nèi)優(yōu)雅的實(shí)現(xiàn)文件分片斷點(diǎn)續(xù)傳。 Vue.js 插件開(kāi)發(fā) - 前端 - 掘金作者:Joshua Bemenderfer原文地址: creating-custom-plugins譯者:jeneser Vue.js插件是為應(yīng)用添加全局功能的一種強(qiáng)大而且簡(jiǎn)單的方式。插....
摘要:具體來(lái)說(shuō),包管理器就是可以通過(guò)命令行,幫助你把外部庫(kù)和插件放到你的項(xiàng)目里面并在之后進(jìn)行版本升級(jí),這樣就不用手工復(fù)制和更新庫(kù)。現(xiàn)在有的包管理器主要是和。 一、基礎(chǔ) 1、學(xué)習(xí)HTML基礎(chǔ) HTML給你的網(wǎng)頁(yè)賦予了結(jié)構(gòu)。它就像是人的骨架那樣讓你保持站立。首先你需要去學(xué)習(xí)語(yǔ)法以及它必須提供的一切。你的學(xué)習(xí)應(yīng)該聚焦在下面這些東西上: 學(xué)習(xí)HTML基礎(chǔ),了解如何編寫(xiě)語(yǔ)義HTML 理解如何把網(wǎng)頁(yè)分...
閱讀 2297·2021-11-24 11:15
閱讀 3182·2021-11-24 10:46
閱讀 1479·2021-11-24 09:39
閱讀 3986·2021-08-18 10:21
閱讀 1536·2019-08-30 15:53
閱讀 1458·2019-08-30 11:19
閱讀 3387·2019-08-29 18:42
閱讀 2421·2019-08-29 16:58