webpack5 创建多页面应用配置

02-webpack5学习-多入口打包 webpack5多入口打包 阅读详情

简单版webpack创建多页面应用,只要把配置文件复制下来,然后npm安装相应插件,正常是能跑起来了

创建

  1. 初始化
    npm init生成package.json文件
  2. 安装webpack
    npm i -D webpack webpack-cli webpack-dev-server
  3. 创建main.js入口文件和webpack.config.js文件
  4. 安装html-webpack-plugin
    文件打包好之后,我们不可能每次在html文件钟手动引入打包好的js,这时候就需要使用html-webpack-plugin创建html页面,并将打包后的js文件引入到html中
  5. scss、bootstrap那些按需引入,具体可以直接复制下方的package.json文件,然后直接执行npm i下载相关的插件

配置文件

// webpack.config.js
const path = require("path");
const webpack = require("webpack");
const HtmlWebpackPlugin = require("html-webpack-plugin");
const { CleanWebpackPlugin } = require("clean-webpack-plugin");
const MiniCssExtractPlugin = require('mini-css-extract-plugin')
const CssMinimizerPlugin = require('css-minimizer-webpack-plugin');
const resolve = dir => path.resolve(__dirname, dir);
module.exports = {
    mode: 'development',
    entry: {	// 入口文件
        main: path.resolve(__dirname, './src/main.js'),
        home: path.resolve(__dirname, './src/js/home.js'),
        aboutus: path.resolve(__dirname, './src/js/aboutus.js')
    },
    output: {	// 出口文件
        path: path.resolve(__dirname, 'dist'),
        filename: "./js/[name].js",
        assetModuleFilename: 'img/[hash][ext][query]'
    },
    devServer: {
        hot: true
    },
    optimization: {
        minimizer: [
            new CssMinimizerPlugin(),
        ],
    },
    module: {
        // webpack 本身只支持处理js, json文件,将其他转换成有效模块
        rules: [
            {
                test: /.html$/,
                loader: 'html-loader',
                options: {
                    esModule: false
                }
            },
            {   // 样式
                test: /\.css$/,
                use: ["style-loader", "css-loader"]
            },
            {   // 图片
                test: /\.(png|svg|jpg|jpeg|gif)$/,
                type: 'asset',
                generator: {
                    filename: 'image/[name].[contenthash:8][ext][query]'
                }
            },
            {   // scss
                test: /\.(scss|sass)$/,
                use: [
                    MiniCssExtractPlugin.loader,
                    // "style-loader",
                    "css-loader",
                    {
                        loader: 'postcss-loader',
                        options: {
                            postcssOptions: {
                                plugins: () => [
                                    require('autoprefixer')
                                ]
                            }
                        }
                    },
                    'sass-loader'
                ],
            },
        ],
    },
    resolve: {
        alias: {
            "@": resolve('src')
        }
    },
    plugins: [
        new webpack.HotModuleReplacementPlugin(),
        new HtmlWebpackPlugin({
            template: path.join(__dirname, './src/pages/index.html'),
            filename: 'index.html',
            chunks: ['index']
        }),
        new HtmlWebpackPlugin({
            template: path.join(__dirname, "./src/pages/home.html"),
            filename: 'home.html',
            chunks: ['home']
        }),
        new HtmlWebpackPlugin({
            template: path.join(__dirname, './src/pages/aboutus.html'),
            filename: 'aboutus.html',
            chunks: ['aboutus']
        }),
        new CleanWebpackPlugin(),
        new MiniCssExtractPlugin({
            filename: 'css/[name].[fullhash].css'
        })
    ]
}
// package.json
{
  "name": "test",
  "version": "1.0.0",
  "description": "",
  "scripts": {
    "dev": "webpack-dev-server --port 3001 --hot --config webpack.config.js",
    "test": "echo \"Error: no test specified\" && exit 1",
    "build": "webpack"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "devDependencies": {
    "clean-webpack-plugin": "^4.0.0",
    "css-minimizer-webpack-plugin": "^7.0.0",
    "html-loader": "^5.1.0",
    "html-webpack-plugin": "^5.6.0",
    "mini-css-extract-plugin": "^2.9.0",
    "webpack": "^5.93.0",
    "webpack-cli": "^5.1.4",
    "webpack-dev-server": "^5.0.4"
  },
  "dependencies": {
    "bootstrap": "^5.3.3",
    "css-loader": "^7.1.2",
    "jquery": "^3.7.1",
    "node-sass": "^9.0.0",
    "postcss-loader": "^8.1.1",
    "sass": "^1.77.8",
    "sass-loader": "^14.2.1",
    "style-loader": "^4.0.0"
  }
}

遇到的问题

1. output配置了一个出口导致报错

报错提示
多入口也要多出口,输出的文件也要是多个:

entry: {
   main: path.resolve(__dirname, './src/main.js'),
   home: path.resolve(__dirname, './src/js/home.js'),
   aboutus: path.resolve(__dirname, './src/js/aboutus.js')
},
output: {
    path: path.resolve(__dirname, 'dist'),
    filename: "./js/[name].js",			// 正确写法
    // filename: './js/bundle.js',		// 错误写法
    assetModuleFilename: 'img/[hash][ext][query]'
},

2. html-webpack-plugin配置不正确导致页面404

404页面报错
除了index.html能正常显示外,其他页面都显示404,一开始以为是路由配置或者入口没设置正确,后面发现filename跟其他不一样就试了一下,没想到真是这里的问题

plugins: [
	new HtmlWebpackPlugin({
	    template: path.join(__dirname, './src/pages/index.html'),
	    filename: 'index',	// 这里必须跟地址一样。如这里写的是 index.html 的话,链接上必须也要带上.html,即 localhost:3001/index.html
	    chunks: ['index']
	}),
]

在这里插入图片描述

这里的filename要加上.html后缀才可以。如果不写后缀,打包之后html文件会没有后缀导致出错!

3. html页面引入css文件报错

<!-- 原代码 index.html -->
<head>
	<link rel="stylesheet" href="../assets/css/home.css">
</head>

cmd报错
后面查到有资料说用webpack的css文件不能写在html,要放在入口文件引入,所以后来在入口文件引入css

// home.js ---- 入口文件
import "../assets/css/home.css"

但是css文件在浏览器开发者工具的network可以看见已经引入了,但是样式不生效,而且css文件名有乱码
css乱码
查了很久,发现MiniCssExtractPlugin.loader不能在development环境用

// webpack.config.js
// 原本配置
module.exports = {
	module: {
		rules: [
			{   // 样式
                test: /\.css$/,
                use: [
                    MiniCssExtractPlugin.loader,
                    {
                        loader: 'css-loader',
                        options: {
                            modules: {
                                localIdentName: '[hash:base64:8]',
                            }
                        }
                    }
                ]
            },
		]	
	}
}

// 正确配置
module.exports = {
	module: {
		rules: [
			{   // 样式
                test: /\.css$/,
                use: ["style-loader", "css-loader"]
            },
		]	
	}
}

4. 代理问题proxy要写成array

之前设置代理的写法是这样的:
代理代码配置
但是webpack5好像必须是写成array的形式才可以,不然会报下面的错误。一开始是不信的,看了好多资料都说可以写成object,但是死活运行不了。后面改了之后发现能正常运行了…
报错图片

// 正确写法
proxy: [{
    context: ['/api'], 
    target: 'http://localhost:3600',
    changeOrigin: true,
    ws: true
}]
webpack5配置传统jQuery多页面应用 大家好,我是chenms,最近我们公司有要求需要开发几个以前传统的前后端不分离的jQuery老项目,现在大部分都是用vue或者react开发习惯了组件化的方式,所以我这边打算用webpack5配置一个可以打包传统jQuery多页面应用。 阅读详情

相关推荐

webpack 多页面 打包

最近有一个需求,需要把多页面使用webpack进行编译,但是网上进行多页面编译的资料很少,今天把自己配置的webpack多页面打包编译分享给大家demo地址:https://github.com/mengYu007/webpack3代码启动:    打开cmd进入文件目录npm install   编译文件:npm run build   启动文件:npm run start文件目录:packag...

jiu_meng的博客 6774

webpack多页面应用

webpack多页面应用

qq_34631220的博客 1435

Python-OpenCV及cv2,numpy库最新安装教程[最全步骤]

安装教程目录前言OpenCV-Python安装教程报错解决cv2安装numpy安装opencv安装(附加)总结 前言 首先,我知道一些看到我的Blog的人已经在网上找了很多歪路子,现在已经火冒三丈了(我也是这样过来的hhhh),那么现在,深呼吸,跟着我的教程,不要着急,每一步都要读一遍。完整安装过程需要1个小时左右(仅供参考,本人第一次安装python花了一天(确信)) OpenCV-Python...

qq_45425286的博客 7431

webpack常用配置

1.加载CSS 命令行输入 npm install --save-dev style-loader css-loader webpack.config.js配置如下 const path = require('path'); module.exports = { entry: './src/index.js', output: { filename: 'bund...

weixin_30868855的博客 301

Python量化交易入门:天勤量化TqSdk保姆级教程(含避坑指南)

本文提供Python量化交易入门指南,重点介绍天勤量化TqSdk的使用方法,包括环境配置、核心API实战、策略开发技巧及实盘部署。教程涵盖中国期货市场,帮助个人投资者快速掌握量化交易技术,避开常见陷阱。

weixin_29065791的博客 834

微信小程序利用Echarts加载中国地图的步骤

微信小程序如何利用Echarts加载地图?可按照如下四个步骤进行。(阅读时间大概3分钟)。

成都都成 5275

webpack单页面项目与多页面项目学习搭建

webpack--配置(单页面与多页面)

beilingxiaogu的博客 1889

新手小白入门编程第2讲 JAVA编程环境搭建 JDK与环境变量、Eclipse

1 JDK 1.1 JDK概述 JDK是 Java 语言的软件开发工具包,主要用于移动设备、嵌入式设备上的java应用程序。 JDK是整个java开发的核心,它包含了: JAVA开发工具(jdk\bin) 基础开发库(jdk\jre\lib\rt.jar) 基础开发库的源码(jdk\src.zip) 1.2 JDK下载与安装 本次使用的是JDK1.8,详细安装步骤可以参见”JDK培优安装手册”. 注意事项: 同时安装多个JDK时需要使用执行环境变量来确认使用的是哪个jdk 安装时选择默认选项安装到默认

程序媛泡泡的博客 4万+

webpack多页面配置

wenpack多页面基础配置

duan739984186的博客 1789

【yolo】YOLOv8模型导出完全指南:从PT到ONNX及其他格式的完整实践

摘要:本文全面介绍了YOLOv8模型从PT格式导出为ONNX等部署格式的完整流程与最佳实践。重点解析了关键参数(如format、imgsz、simplify)的作用机制,特别强调输入尺寸imgsz会自动继承训练尺寸的特性,并提供了ONNX、TensorRT等格式的典型导出配置方案。文章还总结了常见问题解决办法,推荐使用simplify优化模型性能,同时分享了通过C#实现模型重命名的实用技巧。最后指出"训练决定能力,导出定义接口"的核心原则,帮助开发者高效完成模型部署转换。

songhuangong123的博客 1917

webpack5配置多页面

1. 初始化项目 npm init -y 2. 安装需要的依赖 yarn add -D webpack webpack-cli html-webapck-plugin 3. 创建目录结构 在 src 目录下创建三个不同的页面目录 page1,page2, page3,再在页面目录中依次创建 index.html,index.js 文件。 node_modules src -| pages -----| page1 ---------| index.html ---------| index.js ---

bidang3275的博客 1323

深入浅出SCSI子系统(一)Linux 内核中的 SCSI 架构

scsi系统

sinat_37817094的博客 6489

使用@vue/cli 5.0.8的Vue2多页面项目搭建与打包基本操作

使用@vue/cli 5.0.8的Vue2多页面项目搭建与打包基本操作

billowson的博客 6474

资产会计 Transaction Type 与业务交易的 Post to Affiliated Company 不一致导致的 AAPO176:成因剖析与修复指引

本文解析了SAP资产会计中常见的"AAPO176"错误提示,指出当交易类型(TType)与业务交易(Business Transaction)的"关联公司过账"(Post to Affiliated Company)标志不一致时,系统会拒绝过账。作者详细说明了该标志的作用机制,并提供了四种解决方案:修正交易类型使用、匹配正确的业务交易、调整系统配置或建立映射关系。文章还通过实际案例展示了配置错误对集团合并报表的影响,并附带了用于检查配置一致性的ABAP脚本。该错误通常

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 398

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

实战 Vue 之配置多页面应用

最近一直在做企业钉钉应用开发,即每个功能模块都是一个单独的应用,单独的页面,配置到钉钉里面,就可以单独访问了。比如开发登陆模块的时候,会搭建一套环境,创建 login.html 以及相应的 js 和 css。再开发注册模块的时候,又搭建一套环境,创建 register.html 以及相应的 js 和 css。

杏子 2万+

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

实战 | 使用 Webpack5 搭建多页面应用

介绍react-multi-page-app 是一个基于 webpack5 搭建的 react 多页面应用。为什么搭建多页面应用:多个页面之间业务互不关联,页面之间并没有共享的数据多个页...

我本可以容忍阳光,如果我不曾见过太阳,然而阳光已使我荒凉,成为更新的荒凉。 2411

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

webpack 多页面应用配置小结

今年公司一直在推行前后端分离开发,刚好有个活动开发的需求,于是想用react多页面应用去实现。该项目在create-react-app(@3.0.1)脚手架的基础上开发。 准备工作 下载安装create-react-app(@3.0.1,其他版本配置可能略微不同)脚手架,并将CRA中的配置全部反编译到当前项目(方法参考:juejin.im/post/5a5d5b… 建立文件夹规范约束 规范如下(参...

weixin_33724570的博客 815

React-Webpack5-TypeScript多页面应用搭建指南

本文介绍了如何从零搭建一个基于React、Webpack5和TypeScript的工程化多页面应用(MPA)。首先对比了MPA与SPA的特点,然后详细说明了项目搭建步骤,包括初始化项目、目录结构规划、核心配置文件的编写(TypeScript、Babel、Webpack)。重点讲解了动态生成入口和HTML插件的Webpack配置方案,并提供了基础模板和页面示例。最后还提出了代码分割、静态资源处理等进阶工程化建议,强调多页面应用的核心在于动态管理入口和HTML生成。

油墨香^-^的博客 1499

vue.config.js 文件中webpack配置,webpack 多种应用场景配置, 优化及多页面应用开发

vue cli3 webpack精讲

gcyaozuodashen的博客 1万+

webpack配置多页面项目

相信经常使用webpack的人已经深刻体验到自动化工具给我们带来的便利。我自己最常用的是vue,平时就是使用vue-cli或者nuxt构建的项目,聪明的前辈已经为我们配好了项目,可以让我们不必去配置就可以轻松使用。 然而在真正的项目中,我们常常需要写一些简单的页面,并不基于vue这样比较大的框架,比如我明天上班就要做的这个公众号介绍,只有几个页面,但是我又希望能使用webpack来辅助我更好完成

生如夏花 炫至茶靡 1万+

Webpack5构造React多页面应用

来源 |https://github.com/zhedh/react-multi-page-app/介绍react-multi-page-app是一个基于webpack5构造的reac...

web前端开发 345

Webpack5多页面打包通用方案

文章目录背景官方多入口配置多项目打包步骤安装glob模块修改webpack.config.js 配置,新增entries函数,修改entry:entries(),修改output的filename为"[name].js"测试执行打包命令`npm run build`,结果如下。 背景 前面介绍过,Webpack不单单只支持单页面项目(SPA),也支持多页面项目(MPA)的打包。那么在多页面项目开发过程中,每新增一个页面模块,都需要修改webpack.config.js配置文件(增加一个入口),这个时候我们就

人生百年几今日,今日不为真可惜。 3231

vue webpack 实现多页面应用

1.安装脚手架 npm install vue-cli -g 2.vue init webpack 项目名 3.安装步骤操作 回车 4.cd 项目名 npm install 5.npm run dev 这样脚手架搭建好了 并且可以运行起来了 我们开始搭建多页面应用 1.安装glob glob是webpack安装时依赖的一个第三方模块,该模块允许你使用 *等符号, 例如utils/...

李小乐er 1621

Webpack4打包多页面工程基本教程——小白的填坑之旅

背景 Webpack是当下使用人数最多的网页打包工具。当前其github主页的star数量为49.2k,比另一个流行的打包工具parcel(31.9k)要高不少。本人(小白一枚)由于项目需要的原因,最近几个月断断续续学习和使用webpack进行多页面工程的打包,可以说是一路挖坑一路填坑,最终实现了令人满意的效果。本文将回顾一路以来遇到的主要问题,简单分析并着重给出解决方案。希望给遇到同样问题的读者...

HouGISer的博客 6690

webpack高级应用篇(八):多页面应用程序

尽管单页面应用很流行,但是我们并不总是需要它。 在多页面应用程序中,server 会拉取一个新的 HTML 文档给你的客户端。页面重新加载此新文档,并且资源被重新下载。然而,这给了我们特殊的机会去做很多事,例如使用 为页面间共享optimization.splitChunks的应用程序代码创建 bundle。由于入口起点数量的增多,多页应用能够复用多个入口起点之间的大量代码/模块,从而可以极大地从这些技术中受益。

知之为知之,不知为不知 1427
上一篇: 【Webpack 踩坑】CSS加载缓慢
下一篇: 微信小程序添加图片验证码
①条咸鱼
博客等级 码龄9年 42粉丝 61原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值