最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Webpack實現(xiàn)多頁面打包的方法步驟

 更新時間:2023年01月09日 10:18:36   作者:aiguangyuan  
本文主要介紹了Webpack實現(xiàn)多頁面打包的方法步驟,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

1. 多頁面應(yīng)用(MPA)概念

單頁面在開發(fā)時會把所有的業(yè)務(wù)放在一個大的入口里面去,不同的子業(yè)務(wù)還是同一個URL地址,只不過后面的hash會有所不同。

多頁面相對于單頁面的區(qū)別在于,項目發(fā)布上線以后,有多個入口文件,每一次頁面跳轉(zhuǎn)的時候,后臺服務(wù)器都會返回一個新的html文檔,這種類型的網(wǎng)站也就是多頁面網(wǎng)站,也叫多頁應(yīng)用。

多頁面有什么優(yōu)勢呢?主要有以下兩點:

1. 多個頁面之間是解耦的,利于維護;

2. 多頁面對SEO更加友好;

2. 多頁面打包基本思路

多頁面打包的基本思路在于,每個頁面對應(yīng)一個entry,每個頁面對應(yīng)一個html-webpack-plugin,但這種方式每次在新增或刪除頁面時需要修改webpack配置,相當麻煩。

3. 多頁面打包通用方案

1. 多個頁面的文件名統(tǒng)一取名index,通過不同的文件夾來區(qū)分;

2. 動態(tài)獲取 entry 和設(shè)置 html-webpack-plugin 數(shù)量;

4. 多頁面打包實現(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');
 
// 頁面打包插件
const HtmlWebpackPlugin = require('html-webpack-plugin');
// 自動清理插件
const CleanWebpackPlugin = require('clean-webpack-plugin');
// 優(yōu)化控制臺輸出
const FriendlyErrorsWebpackPlugin = require('friendly-errors-webpack-plugin');
 
// 動態(tài)計算多頁面打包
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/);
        // 獲取頁面文件名
        const pageName = match && match[1];
 
        entry[pageName] = entryFile;
        // 根據(jù)本地定義的頁面文件數(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(),
        // 自動清理插件
        new CleanWebpackPlugin(),
        // 簡化打包控制臺輸出
        new FriendlyErrorsWebpackPlugin()
 
    ].concat(htmlWebpackPlugins),
 
    // 熱更新相關(guān)配置
    devServer: {
        // 基本目錄
        contentBase: './dist',
        // 熱更新
        hot: true,
        // 只輸出報錯
        stats: 'errors-only'
    },
    devtool: 'cheap-source-map'
};

到此這篇關(guān)于Webpack實現(xiàn)多頁面打包的方法步驟的文章就介紹到這了,更多相關(guān)Webpack 多頁面打包內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • javascript 24點游戲代碼

    javascript 24點游戲代碼

    非常不錯的技術(shù)24點的游戲代碼,他的算法值得學(xué)習(xí),希望喜歡游戲的朋友,可以來看看
    2008-06-06
  • Js實現(xiàn)動態(tài)添加刪除Table行示例

    Js實現(xiàn)動態(tài)添加刪除Table行示例

    這篇文章主要介紹了Js動態(tài)添加刪除Table行的具體實現(xiàn),需要的朋友可以參考下
    2014-04-04
  • 關(guān)于layui的動態(tài)圖標不顯示的解決方法

    關(guān)于layui的動態(tài)圖標不顯示的解決方法

    今天小編就為大家分享一篇關(guān)于layui的動態(tài)圖標不顯示的解決方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-09-09
  • 關(guān)于BootstrapTable 導(dǎo)出數(shù)據(jù)的問題最終解決方案

    關(guān)于BootstrapTable 導(dǎo)出數(shù)據(jù)的問題最終解決方案

    這篇文章主要介紹了BootstrapTable 導(dǎo)出數(shù)據(jù)的問題,本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-03-03
  • IE7提供XMLHttpRequest對象為兼容

    IE7提供XMLHttpRequest對象為兼容

    IE7提供XMLHttpRequest對象為兼容...
    2007-03-03
  • js字符串處理之絕妙的代碼

    js字符串處理之絕妙的代碼

    這篇文章主要介紹了js字符串處理之絕妙的代碼,包括字符串去重、將字符放在對象中遍歷拼接出字符串、把字符串的奇數(shù)位和偶數(shù)位分別提取到兩個數(shù)組中、將兩個數(shù)組按奇數(shù)位和偶數(shù)位插入拼接為字符串,有時候需要對字符進行處理的時候可以用得到
    2019-04-04
  • bootstrap下拉分頁樣式 帶跳轉(zhuǎn)頁碼

    bootstrap下拉分頁樣式 帶跳轉(zhuǎn)頁碼

    這篇文章主要為大家詳細介紹了bootstrap下拉分頁樣式,帶跳轉(zhuǎn)頁碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-12-12
  • 微信小程序如何獲取圖片寬度與高度

    微信小程序如何獲取圖片寬度與高度

    這篇文章主要給大家介紹了關(guān)于微信小程序如何獲取圖片寬度與高度的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • 一個極為簡單的requirejs實現(xiàn)方法

    一個極為簡單的requirejs實現(xiàn)方法

    下面小編就為大家?guī)硪黄粋€極為簡單的requirejs實現(xiàn)方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-10-10
  • JavaScript三種方法解決約瑟夫環(huán)問題的方法

    JavaScript三種方法解決約瑟夫環(huán)問題的方法

    約瑟夫環(huán)問題又稱約瑟夫問題或丟手絹問題,是一道經(jīng)典的算法問題,本篇將以循環(huán)鏈表、有序數(shù)組、數(shù)學(xué)遞歸三種方式來解決約瑟夫環(huán)問題。感興趣的可以了解一下
    2021-09-09

最新評論

南皮县| 寻乌县| 博罗县| 樟树市| 三江| 资溪县| 天等县| 永和县| 绥滨县| 宝应县| 钟山县| 宜川县| 香格里拉县| 称多县| 伽师县| 什邡市| 武山县| 井研县| 江门市| 宁津县| 高阳县| 邛崃市| 铜陵市| 关岭| 榆中县| 东阿县| 和龙市| 张北县| 鹤庆县| 永嘉县| 明星| 聊城市| 台中县| 常山县| 兴宁市| 交口县| 南昌县| 巴塘县| 太仆寺旗| 区。| 农安县|