詳解通用webpack多頁(yè)面自動(dòng)導(dǎo)入方案
前言
在之前,我寫(xiě)了一個(gè)webpack的模板。在平時(shí)我寫(xiě)栗子或者是寫(xiě)幾個(gè)頁(yè)面的時(shí)候會(huì)用到它。當(dāng)這個(gè)模板需要多個(gè)頁(yè)面時(shí)需要手動(dòng)到webpack.config.ts文件中配置entry和HtmlWebpackPlugin,有點(diǎn)麻煩。
思考
我們項(xiàng)目中的頁(yè)面都是存放在src/pages/*.html中的,我們可以搜索這里文件夾下的html文件我們可以利用node中的glob包中的.sync方法,用來(lái)匹配搜索我們想要的文件。將匹配到的文件名自動(dòng)生成一個(gè)entrys對(duì)象賦值到webpack.config.ts文件中的entry屬性即可。HtmlWebpackPlugin同理。
安裝glob
pnpm add glob
創(chuàng)建工具類(lèi)
在src目錄下創(chuàng)建uilts/index.ts文件,引入所需的依賴(lài)包(glob、path、html-webpack-plugin)。
src ? └─uilts ? ?? ?└─index.ts
// uilts/index.ts import Glob from 'glob'; import path from 'path'; import HtmlWebpackPlugin from 'html-webpack-plugin';
getEntry
封裝getEntry方法,用于搜索頁(yè)面所引入的腳本文件,該方法需要傳入一個(gè)匹配規(guī)則也就是路徑,使用glob包中的.sync方法進(jìn)行搜索,該方法返回匹配到的數(shù)據(jù)集。將獲獎(jiǎng)到的文件名稱(chēng)及路徑拼接成entry對(duì)象所需的key:value即可,最終getEntry返回一個(gè)對(duì)象。
export function getEntry(globPath: string): entryObj { ? const entries: entryObj = { main: './src/main.ts' }; ? Glob.sync(`${globPath}.ts`).forEach((entry: string) => { ? ? const basename: string = path.basename(entry, path.extname(entry)); ? ? const pathname: string = path.dirname(entry); ? ? entries[basename] = `${pathname}/${basename}`; ? }); ? return entries; }
getHtmlWebpackPlugin
封裝getHtmlWebpackPlugin方法,用于輸出所有匹配到的HtmlWebpackPlugin對(duì)象。它同樣傳入一個(gè)匹配規(guī)則,匹配所有*.html文件,
export function getHtmlWebpackPlugin(globPath: string): HtmlWebpackPlugin[] { ? const htmlPlugins: HtmlWebpackPlugin[] = []; ? Glob.sync(`${globPath}.html`).forEach((entry: string) => { ? ? const basename: string = path.basename(entry, path.extname(entry)); ? ? const pathname: string = path.dirname(entry); ? ? htmlPlugins.push(new HtmlWebpackPlugin({ ? ? ? title: basename, ? ? ? filename: `${basename}.html`, ? ? ? template: `${pathname}/${basename}.html`, ? ? ? chunks: [basename, 'main'], ? ? ? minify: true, ? ? })); ? }); ? return htmlPlugins; }
二次封裝
有了這兩個(gè)方法之后,在把兩個(gè)方法再封裝成getPages函數(shù).,到時(shí)候在webpack.config.ts中調(diào)用它就可以直接拿到entry對(duì)象和htmlPlugins數(shù)組。
interface getPagesType { ? entries: entryObj, ? htmlPlugins: HtmlWebpackPlugin[] } export function getPages(pagePath: string): getPagesType { ? const entries: entryObj = getEntry(pagePath); ? const htmlPlugins: HtmlWebpackPlugin[] = getHtmlWebpackPlugin(pagePath); ? return { ? ? entries, ? ? htmlPlugins, ? }; }
應(yīng)用
在webpack.config.ts中使用getPages函數(shù)。
引入getPages函數(shù),傳入項(xiàng)目中頁(yè)面所在的路徑。使用ES6的解構(gòu)獲獎(jiǎng)返回的數(shù)據(jù)對(duì)象。
// webpack.config.ts const { entries, htmlPlugins } = getPages('./src/pages/**/*'); const config: Configuration = { ? mode: 'development', ? entry: entries, ? // ... ? plugins: [ ? ? ...htmlPlugins, ? ], };
到此這篇關(guān)于詳解通用webpack多頁(yè)面自動(dòng)導(dǎo)入方案的文章就介紹到這了,更多相關(guān)webpack多頁(yè)面自動(dòng)導(dǎo)入內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- 詳解webpack 多頁(yè)面/入口支持&公共組件單獨(dú)打包
- webpack構(gòu)建react多頁(yè)面應(yīng)用詳解
- webpack4打包vue前端多頁(yè)面項(xiàng)目
- 詳解webpack4多入口、多頁(yè)面項(xiàng)目構(gòu)建案例
- 解決webpack多頁(yè)面內(nèi)存溢出的方法示例
- 詳解webpack多頁(yè)面配置記錄
- webpack打包多頁(yè)面的方法
- 詳解webpack編譯多頁(yè)面vue項(xiàng)目的配置問(wèn)題
- WebPack配置vue多頁(yè)面的技巧
- vue webpack多頁(yè)面構(gòu)建的實(shí)例代碼
相關(guān)文章
JS實(shí)現(xiàn)字符串翻轉(zhuǎn)的方法分析
這篇文章主要介紹了JS實(shí)現(xiàn)字符串翻轉(zhuǎn)的方法,結(jié)合實(shí)例形式分析了javascript字符串使用reverse方法、字符串遍歷方法以及針對(duì)輸入字符串的遍歷、逆序輸出等方法實(shí)現(xiàn)字符串反轉(zhuǎn)相關(guān)操作技巧,需要的朋友可以參考下2018-08-08淺談在js傳遞參數(shù)中含加號(hào)(+)的處理方式
下面小編就為大家?guī)?lái)一篇淺談在js傳遞參數(shù)中含加號(hào)(+)的處理方式。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-10-10詳解小程序如何動(dòng)態(tài)綁定點(diǎn)擊的執(zhí)行方法
這篇文章主要介紹了詳解小程序如何動(dòng)態(tài)綁定點(diǎn)擊的執(zhí)行方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-11-11Javascript中apply、call、bind的巧妙使用
Javascript中apply、call、bind都是為了改變函數(shù)體內(nèi)部 this 的指向。下面通過(guò)本文重點(diǎn)給大家介紹js中apply,call,bind的巧妙使用方法,感興趣的朋友一起學(xué)習(xí)吧2016-08-08符合W3C Web標(biāo)準(zhǔn)的圖片連續(xù)無(wú)間隙水平滾動(dòng)
很久以前就有這個(gè)問(wèn)題,總是找不到通用的,或比較簡(jiǎn)單的“圖片連續(xù)無(wú)間隙向左滾動(dòng),無(wú)間隙向右滾動(dòng),符合W3C Web標(biāo)準(zhǔn)”2008-06-06詳解如何用webpack打包一個(gè)網(wǎng)站應(yīng)用項(xiàng)目
本篇文章主要介紹了如何用webpack打包一個(gè)網(wǎng)站應(yīng)用,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-07-07淺談Webpack自動(dòng)化構(gòu)建實(shí)踐指南
本篇文章主要介紹了Webpack自動(dòng)化構(gòu)建實(shí)踐指南,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-12-12JS將光標(biāo)聚焦在文本最后的實(shí)現(xiàn)代碼
這篇文章主要介紹了JS將光標(biāo)聚焦在文本最后的方法,需要的朋友可以參考下2014-03-03屏蔽鼠標(biāo)右鍵、Ctrl+n、shift+F10、F5刷新、退格鍵 的javascript代碼
屏蔽鼠標(biāo)右鍵、Ctrl+n、shift+F10、F5刷新、退格鍵 的javascript代碼...2007-04-04