我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Webpack实现多页面打包的方法步骤

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Webpack实现多页面打包的方法步骤

1. 多页面应用(MPA)概念

单页面在开发时会把所有的业务放在一个大的入口里面去,不同的子业务还是同一个URL地址,只不过后面的hash会有所不同。

多页面相对于单页面的区别在于,项目发布上线以后,有多个入口文件,每一次页面跳转的时候,后台服务器都会返回一个新的html文档,这种类型的网站也就是多页面网站,也叫多页应用。

多页面有什么优势呢?主要有以下两点:

1. 多个页面之间是解耦的,利于维护;

2. 多页面对SEO更加友好;

2. 多页面打包基本思路

多页面打包的基本思路在于,每个页面对应一个entry,每个页面对应一个html-webpack-plugin,但这种方式每次在新增或删除页面时需要修改webpack配置,相当麻烦。

3. 多页面打包通用方案

1. 多个页面的文件名统一取名index,通过不同的文件夹来区分;

2. 动态获取 entry 和设置 html-webpack-plugin 数量;

4. 多页面打包实现

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');
// 优化控制台输出
const FriendlyErrorsWebpackPlugin = require('friendly-errors-webpack-plugin');
 
// 动态计算多页面打包
const setMPA = () => {
    const entry = {};
    const htmlWebpackPlugins = [];
    // 获取本地按规则修改好的文件
    const entryFiles = glob.sync(path.join(__dirname, './class="lazy" data-src/*/index.js'));
 
    Object.keys(entryFiles).map((index) => {
 
        const entryFile = entryFiles[index];
 
        // 'my-project/class="lazy" data-src/index/index.js'
 
        const match = entryFile.match(/class="lazy" data-src\/(.*)\/index\.js/);
        // 获取页面文件名
        const pageName = match && match[1];
 
        entry[pageName] = entryFile;
        // 根据本地定义的页面文件数量来定义htmlWebpackPlugin
        htmlWebpackPlugins.push(
            new HtmlWebpackPlugin({
                template: path.join(__dirname, `class="lazy" data-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'
    },
    // 开发模式
    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),
 
    // 热更新相关配置
    devServer: {
        // 基本目录
        contentBase: './dist',
        // 热更新
        hot: true,
        // 只输出报错
        stats: 'errors-only'
    },
    devtool: 'cheap-source-map'
};

到此这篇关于Webpack实现多页面打包的方法步骤的文章就介绍到这了,更多相关Webpack 多页面打包内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Webpack实现多页面打包的方法步骤

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Webpack实现多页面打包的方法步骤

本文主要介绍了Webpack实现多页面打包的方法步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
2023-01-09

Webpack打包时将文件内联方法实现

本文主要介绍了Webpack打包时将文件内联方法实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
2023-01-09

Vue如何实现多页面配置以及打包方式

这篇文章主要介绍了Vue如何实现多页面配置以及打包方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
2022-11-13

vue项目打包部署跨域的实现步骤

在前端Vue项目打包后,如果需要访问另一个域名下的接口,由于浏览器的同源策略限制,会出现跨域问题,本文就介绍一下vue项目打包部署跨域的实现步骤,感兴趣的可以了解一下
2023-05-20

编程热搜

目录