Webpack實(shí)現(xiàn)多頁(yè)面打包的方法步驟
1. 多頁(yè)面應(yīng)用(MPA)概念
單頁(yè)面在開發(fā)時(shí)會(huì)把所有的業(yè)務(wù)放在一個(gè)大的入口里面去,不同的子業(yè)務(wù)還是同一個(gè)URL地址,只不過后面的hash會(huì)有所不同。
多頁(yè)面相對(duì)于單頁(yè)面的區(qū)別在于,項(xiàng)目發(fā)布上線以后,有多個(gè)入口文件,每一次頁(yè)面跳轉(zhuǎn)的時(shí)候,后臺(tái)服務(wù)器都會(huì)返回一個(gè)新的html文檔,這種類型的網(wǎng)站也就是多頁(yè)面網(wǎng)站,也叫多頁(yè)應(yīng)用。
多頁(yè)面有什么優(yōu)勢(shì)呢?主要有以下兩點(diǎn):
1. 多個(gè)頁(yè)面之間是解耦的,利于維護(hù);
2. 多頁(yè)面對(duì)SEO更加友好;
2. 多頁(yè)面打包基本思路
多頁(yè)面打包的基本思路在于,每個(gè)頁(yè)面對(duì)應(yīng)一個(gè)entry,每個(gè)頁(yè)面對(duì)應(yīng)一個(gè)html-webpack-plugin,但這種方式每次在新增或刪除頁(yè)面時(shí)需要修改webpack配置,相當(dāng)麻煩。

3. 多頁(yè)面打包通用方案
1. 多個(gè)頁(yè)面的文件名統(tǒng)一取名index,通過不同的文件夾來區(qū)分;
2. 動(dòng)態(tài)獲取 entry 和設(shè)置 html-webpack-plugin 數(shù)量;

4. 多頁(yè)面打包實(shí)現(xiàn)
4.1. 安裝插件;
npm i glob -D
4.2. 配置Webpack文件;
'use strict';
// 引入插件
const glob = require('glob');
const path = require('path');
const webpack = require('webpack');
// 頁(yè)面打包插件
const HtmlWebpackPlugin = require('html-webpack-plugin');
// 自動(dòng)清理插件
const CleanWebpackPlugin = require('clean-webpack-plugin');
// 優(yōu)化控制臺(tái)輸出
const FriendlyErrorsWebpackPlugin = require('friendly-errors-webpack-plugin');
// 動(dòng)態(tài)計(jì)算多頁(yè)面打包
const setMPA = () => {
const entry = {};
const htmlWebpackPlugins = [];
// 獲取本地按規(guī)則修改好的文件
const entryFiles = glob.sync(path.join(__dirname, './src/*/index.js'));
Object.keys(entryFiles).map((index) => {
const entryFile = entryFiles[index];
// 'my-project/src/index/index.js'
const match = entryFile.match(/src\/(.*)\/index\.js/);
// 獲取頁(yè)面文件名
const pageName = match && match[1];
entry[pageName] = entryFile;
// 根據(jù)本地定義的頁(yè)面文件數(shù)量來定義htmlWebpackPlugin
htmlWebpackPlugins.push(
new HtmlWebpackPlugin({
template: path.join(__dirname, `src/${pageName}/index.html`),
filename: `${pageName}.html`,
chunks: [pageName],
inject: true,
minify: {
html5: true,
collapseWhitespace: true,
preserveLineBreaks: false,
minifyCSS: true,
minifyJS: true,
removeComments: false
}
})
);
});
return {
entry,
htmlWebpackPlugins
}
}
const { entry, htmlWebpackPlugins } = setMPA();
module.exports = {
// 入口文件
entry: entry,
// 輸出文件
output: {
path: path.join(__dirname, 'dist'),
filename: '[name].js'
},
// 開發(fā)模式
mode: 'development',
module: {
rules: [
{
test: /.js$/,
use: 'babel-loader'
},
{
test: /.css$/,
use: [
'style-loader',
'css-loader'
]
},
{
test: /.less$/,
use: [
'style-loader',
'css-loader',
'less-loader'
]
},
{
test: /.(png|jpg|gif|jpeg)$/,
use: [
{
loader: 'url-loader',
options: {
limit: 10240
}
}
]
},
{
test: /.(woff|woff2|eot|ttf|otf)$/,
use: 'file-loader'
}
]
},
plugins: [
// 熱更新插件
new webpack.HotModuleReplacementPlugin(),
// 自動(dòng)清理插件
new CleanWebpackPlugin(),
// 簡(jiǎn)化打包控制臺(tái)輸出
new FriendlyErrorsWebpackPlugin()
].concat(htmlWebpackPlugins),
// 熱更新相關(guān)配置
devServer: {
// 基本目錄
contentBase: './dist',
// 熱更新
hot: true,
// 只輸出報(bào)錯(cuò)
stats: 'errors-only'
},
devtool: 'cheap-source-map'
};到此這篇關(guān)于Webpack實(shí)現(xiàn)多頁(yè)面打包的方法步驟的文章就介紹到這了,更多相關(guān)Webpack 多頁(yè)面打包內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
JavaScript實(shí)現(xiàn)事件總線(Event?Bus)的方法詳解
Event?Bus?事件總線,通常作為多個(gè)模塊間的通信機(jī)制,相當(dāng)于一個(gè)事件管理中心。本文將介紹如何在JavaScript中實(shí)現(xiàn)事件總線,需要的可以參考一下2022-05-05
基于打包工具Webpack進(jìn)行項(xiàng)目開發(fā)實(shí)例
這篇文章主要介紹了基于打包工具Webpack進(jìn)行項(xiàng)目開發(fā)實(shí)例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-05-05
Js生成隨機(jī)數(shù)/隨機(jī)字符串的方法小結(jié)【5種方法】
這篇文章主要介紹了Js生成隨機(jī)數(shù)/隨機(jī)字符串的方法,結(jié)合實(shí)例形式總結(jié)分析了5種Js生成隨機(jī)數(shù)/隨機(jī)字符串的操作技巧,需要的朋友可以參考下2020-05-05
js實(shí)現(xiàn)課堂隨機(jī)點(diǎn)名系統(tǒng)
這篇文章主要介紹了js實(shí)現(xiàn)課堂隨機(jī)點(diǎn)名系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-11-11
網(wǎng)頁(yè)廣告中JS代碼的信息監(jiān)聽示例
在一些網(wǎng)頁(yè)廣告中提供的JS代碼可以進(jìn)行代碼注入,然后監(jiān)視各種元素,下面有個(gè)示例,大家可以參考下2014-04-04
Javascript 計(jì)算字符串在localStorage中所占字節(jié)數(shù)
本文給大家分享的是使用Javascript 計(jì)算字符串在localStorage中所占字節(jié)數(shù),分別對(duì)UTF-8和UTF-16兩種編碼進(jìn)行了詳細(xì)說明,有需要的小伙伴可以參考下。2015-10-10
JS組件Bootstrap Table使用實(shí)例分享
這篇文章主要為大家詳細(xì)介紹了JS組件Bootstrap Table分頁(yè)使用方法,具有一定的實(shí)用性,感興趣的小伙伴們可以參考一下2016-05-05

