webpack将vue3单页面应用改造成多页面应用

news/2025/2/23 0:09:37/

上篇文章搞了个单页面vue,现在要将其改成多页面,只是简单尝试,给了例子

其实也就是改个webpack的入口和html模版的配置,其他的话,每个页面都有自己的vue和路由实例,pinia的话就共享吧

!important,这里是根据上篇文章配置的更改,更具体的配置可以参考上篇文章

一、改一下项目结构

大概就是在src下新建一个pages目录,然后再文件件下新建一个单页面运用,每个页面都有自己的main.js和App.vue,此外还有自己的views和router,至于通用组件components和pinia文件夹就放在pages的目录的同级区域,截图如下:

这里我把index文件夹具体展开了,page1里面也是类似的结构,只不过page1当中的index.js换成了page1.js,index.vue换成了page1.vue(实际上全写成main.js和App.vue也没啥事,我就是手欠)。每个page的配置其实类似vue-cli生成的单页面运用。( 忽略一下最下面的templates,那是存放html模板的地方)

二、更改webpack的配置

两个部分,首先我们这里有两个page,就有两个入口文件

entry: {index: path.resolve(__dirname, './src/pages/index/index.js'),page1: path.resolve(__dirname, './src/pages/page1/page1.js')},output: {path: path.resolve(__dirname, 'dist'), // 打包出口filename: '[name].js', // 打包完的静态资源文件名clean: true,//每次打包都会删除dist里面旧的内容},

注意和上篇比较,我这里的output的filename有些更改,这些配置不是最终的,最后还有优化一下结构

第二个则是html模板的改变,这里的话需要创建两个模板

plugins: [new HtmlWebpackPlugin({template: path.resolve(__dirname, './templates/index.html'), // 我们要使用的 html 模板地址filename: 'index.html', // 打包后输出的文件名title: 'index页面',chunks: ["index"]}),new HtmlWebpackPlugin({template: path.resolve(__dirname, './templates/page1.html'), // 我们要使用的 html 模板地址filename: 'page1.html', // 打包后输出的文件名title: 'page1页面',chunks: ["page1"]}),new VueLoaderPlugin() //vue-loader插件],

 这里有两个htmlwebpackplugin的插件配置,每个配置对应了一个页面,两个模板我也放在了pages同级的template文件夹之中,template文件夹如下:

 里面的模版都是一样的,如下

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title><%= htmlWebpackPlugin.options.title %></title>
</head><body><div id="root"></div>
</body>

 就是body里面加了个id是root的格子,方便我们vue实例的挂载

另外要注意一下,我们两个page的vue实例是公用的一个pinia例子,我不太确定能不能用,所以的话,测试了一下,大体就是创建了一个userInfor的pinia模块,写下如下的配置

import { defineStore } from 'pinia'export const useUserStore = defineStore('user', {state: () => {return { userName: "黄烽" }},// 也可以这样定义// state: () => ({ count: 0 })actions: {changeName () {this.userName = "gss"}},
})

在index页面的views的Home.vue上进行一下展示,这个页面还有一个按钮,触发之后会触发change函数,将页面导向page1.html

<template><div class="msg">this msg is from page index<span>this is from span</span><br /><span>{{ "userName: " + user.userName }}</span><button @click="change">跳转</button></div>
</template>
<script setup>
import { onMounted } from 'vue';
import { useUserStore } from "../../../pinia/userInfor.js"
const user = useUserStore()
const testFunction = (msg) => {alert(msg)
}
onMounted(() => {testFunction("hhhh")
})
const change = () => {window.location.href = "./page1.html"
}
</script>
<style scoped lang="scss">
.msg {color: red;span {color: green;}
}
</style>

 对应的page1当中的Home.vue的配置如下

<template><div class="msg">this msg is from page1<span>this is from span</span><br /><span>{{ "userName: " + user.userName }}</span><button @click="change">改变用户姓名</button></div>
</template>
<script setup>
import { onMounted } from 'vue';
import { useUserStore } from "../../../pinia/userInfor.js"
const user = useUserStore()
const change = () => {user.changeName()
}
const testFunction = (msg) => {alert(msg)
}
onMounted(() => {testFunction("hhhh")
})
</script>
<style scoped lang="scss">
.msg {color: red;span {color: green;}
}
</style>

基本上是一样的,除了msg内容不同之外,就是这里的change函数测试的是pinia当中的一个mutation。

最后一步就是打开dev 服务器测试,npm run dev,然后就行了,虽然有点简单,但是基本的意思是有了 ,打包之后dist文件夹里就是这个样子

 三、结尾

其实还是比较简单的,难的还是相关的优化,我个人对优化还是有些模糊的,有机会写几个优化的例子。


http://www.ppmy.cn/news/73697.html

相关文章

CMake Practice 学习笔记四---使用动静态库

任务&#xff1a; 编写一个程序使用我们上一届构建的共享库 1、准备工作 在/backup/cmake目录建立t4目录 mkdir t4在t4目录中建立src目录&#xff0c;并编写源文件main.c cd t4 mkdir src && cd src touch main.cmain.c的内容如下&#xff1a; #include <hel…

如何用 ChatGPT 帮你10分钟读完数据库论文

本周&#xff0c;OpenAI 向所有 ChatGPT Plus 用户开放了两个重要功能&#xff1a; Web Browsing 和 Plugins 它俩都需要用户自己开启&#xff0c;才能使用&#xff0c;如下&#xff1a; 作为对数据库论文的爱好者&#xff0c;我第一款挑选的 Plugin 便是 ChatWithPDF,毕竟真的…

2023-05-18 题目

2023-05-18 题目 1、String 字符串 String 不是基本数据类型&#xff0c;且是不能被继承的&#xff0c;因为string类被final修饰 //源码 public final class Stringimplements java.io.Serializable, Comparable<String>, CharSequence {}常见题目&#xff1a; publi…

【开发者指南】如何在MyEclipse中使用HTML或JSP设计器?(下)

MyEclipse v2022.1.0正式版下载 三、设计编辑基础 “设计”窗口由所见即所得的网页设计画布和UI控制面板组成。在此窗口中&#xff0c;您可以插入、编辑、删除和移动 HTML 和 JSP UI 控件和文本。拖放操作可以轻松实现重新定位设计画布上的UI控件。扩展的复制/粘贴操作能够将…

SNK施努卡 - 工业视觉定位检测 工业视觉检测原理

工业视觉检测的原理是通过传感检测器检测到物体已靠近工业相机系统的视场中心&#xff0c;并向图像采集部分发送触发脉冲。对图像进行处理、分析和识别&#xff0c;得到测量结果或逻辑控制值。最后&#xff0c;对结果进行处理&#xff0c;以控制流水线的动作&#xff0c;执行定…

自动化测试与手工测试的区别是什么?

目录 什么是自动化测试? 自动化测试与手工测试的区别 自动化测试的困境 什么是自动化测试? 自动化测试是指利用软件测试工具自动实现全部或部分测试&#xff0c;它是软件测试的一个重要组成 部分&#xff0c;能完成许多手工测试无法实现或难以实现的测试。能够正确、合理地…

2023-5-22-C++异常处理机制学习

&#x1f37f;*★,*:.☆(&#xffe3;▽&#xffe3;)/$:*.★* &#x1f37f; &#x1f4a5;&#x1f4a5;&#x1f4a5;欢迎来到&#x1f91e;汤姆&#x1f91e;的csdn博文&#x1f4a5;&#x1f4a5;&#x1f4a5; &#x1f49f;&#x1f49f;喜欢的朋友可以关注一下&#xf…

【线性代数笔记】线性代数知识点总结、概念之间关系总结

矩阵的秩 1. 基础 初等变换不改变矩阵的秩。 阶梯形矩阵非零行的个数即为该矩阵的秩。 r ( A ) r ( A T ) r ( A T A ) r ( A A T ) r(\boldsymbol{A})r(\boldsymbol{A}^{\mathrm{T}})r(\boldsymbol{A}^{\mathrm{T}}\boldsymbol{A})r(\boldsymbol{A}\boldsymbol{A}^{\mat…