vue多页实践-开发

article/2025/9/10 15:52:31

环境

  • node v12.5.0
  • 系统 win
  • vuecli @vue/cli 4.5.15
  • ide WebStorm 2021.1 x64

本文是将vue-cli创建的spa应用改造为多页应用。

我们可以把多页应用理解为由多个单页构成的应用,而何谓多个单页呢?其实你可以把一个单页看成是一个 html 文件,那么多个单页便是多个 html 文件,多页应用便是由多个 html 组成的应用,如下图所示:

image.png

  • 文章 示例代码仓库 建议先大概看一遍文章-在看示例代码。

开始改造

更改目录

  • 多页应用的每个单页都可以拥有单页应用 src 目录下的文件及功能
  • src 下新建 pages 文件夹,将 public文件夹中 index.html、src 文件夹中 App.vue、main.js 复制到相应的应用文件夹内修改文件名称,然后删除即可。
  • 创建如下图所示文件目录,文件夹的名称不做要求但需要同名的入口js、html文件边配置多页会用到。
  • 拿index文件夹来举例说明
    • index.js 相当于 main.js
    • index.html 相当于 public文件夹中 index.html
    • index.vue 相当于 src 文件夹中 App.vue
  • src 下的 router、store 文件夹保留与否 看具体场景,是所用应用共用一个还是需要分开。比如应用的 router、store 文件差别很大,那就需要分开或者使用命名空间,如果几乎一样那就可以共用一个文件(数据不共享)。

image.png

更改 vue.config.js

  • 这里先看下 vuecli 文档

image.png

  • 单页应用中入口文件默认指定 main.js,多页应用入口文件则包含了 page1.js、page2.js、index.js等,数量取决于 pages 文件夹下目录的个数,动态生成 pages 对象是一个很好的选择。

动态获取 pages 对象

  • 安装 yarn add glob 扫描文件夹,并返回我们需要的文件
const path = require('path')
const glob = require('glob')// 配置pages多页面获取当前文件夹下的html和js
function getEntry (globPath) {const entries = {}let basenamelet tmplet pathnameglob.sync(globPath).forEach(function (entry) {basename = path.basename(entry, path.extname(entry))tmp = entry.split('/').splice(-3)pathname = basename // 正确输出js和html的路径entries[pathname] = {entry: 'src/' + tmp[0] + '/' + tmp[1] + '/' + tmp[1] + '.js',template: 'src/' + tmp[0] + '/' + tmp[1] + '/' + tmp[2],title: tmp[2],filename: tmp[2],chunks: ['chunk-vendors', 'chunk-common', tmp[1]]}})return entries
}const pages = getEntry('./src/pages/**?/*.html')
  • 获取到的对象 可以在 vue.config.js 进行打印
    image.png
  • vue.config.js 中的 module.exports 对象写入多页配置(也就是比单页多了一个 pages 配置)

image.png

配置动态引入js css文件

  • 配置动态引入需要使用 html-webpack-plugin 插件,多页会存在多个配置 只配置一个就会抛错 如下图。

image.png

  • 错误也让人摸不着头脑
    image.png
  • 可以这样做

image.png

  • html使用动态配置的 js,css 图中红框为模板语法具体查看文档
    image.png

image.png

完整的配置

const path = require('path')
const glob = require('glob')// 配置pages多页面获取当前文件夹下的html和js
function getEntry (globPath) {const entries = {}let basenamelet tmplet pathnameglob.sync(globPath).forEach(function (entry) {basename = path.basename(entry, path.extname(entry))tmp = entry.split('/').splice(-3)pathname = basename // 正确输出js和html的路径entries[pathname] = {entry: 'src/' + tmp[0] + '/' + tmp[1] + '/' + tmp[1] + '.js',template: 'src/' + tmp[0] + '/' + tmp[1] + '/' + tmp[2],title: tmp[2],filename: tmp[2],chunks: ['chunk-vendors', 'chunk-common', tmp[1]]}})return entries
}const pages = getEntry('./src/pages/**?/*.html')module.exports = {pages,publicPath: '/',outputDir: 'dist',assetsDir: 'assets',filenameHashing: true,lintOnSave: true,productionSourceMap: false,devServer: {index: 'index.html', // 默认启动serve 打开的页面host: '0.0.0.0',port: 8889,https: false,hotOnly: false,proxy: null},chainWebpack: config => {Object.keys(pages).forEach(entryName => {// 配置动态引入js、cssconfig.plugin(`html-${entryName}`).tap(args => {args[0].cdn = []return args})config.plugins.delete(`prefetch-${entryName}`)})}
}

运行-打包

上述配置运行 npm run serve 会运行所有应用

+ index 访问 `http://localhost:8889/#/`
+ page1 访问 `http://localhost:8889/page1/#/`
+ page2 访问 `http://localhost:8889/page2/#/`

image.png

上述的配置运行 运行npm run build 会打包所有应用

image.png

  • 打包后访问应用(使用node库 http-server), 默认会访问index.html 所以除了 index 外其他应用访问需要指定 html文件
    • index 访问 http://localhost:8889/#/
    • page1 访问 http://localhost:8889/page1.html/#/
    • page2 访问 http://localhost:8889/page2.html/#/
  • 所以使用路径做一些判断的时候需要自行处理 比如 使用字符换替换html 等无关字符。

image.png

打包单一应用-以page1文件夹为例

  • 多个页面 pages 多个配置,同理可得 单个应用 pages 只有一个配置。
  • 这样也就需要有一个配置的地方,这里使用env文件配置。

image.png

  • 根目录新建 .env、.env.dev_page1、.env.pro_page1 并写入对应数据。
    • .env 所有环境都被载入 在默认打包所有应用时使用
    • .env.dev_page1 dev 本地开发时加载
    • .env.pro_page1 pro 打包后加载

image.png

  • 更改 package.jsonscripts配置

image.png

  • 修改vue.config.js 完整代码可在示例仓库中找到

image.png

优化

  • 上述 动态配置js,css写死了两示例,同样可以将数据配置在 .env文件中,指定环境加载指定文件
  • 多个入口js文件,引入文件 配置重复,可以提取出一个公共的js,导出一个初始化 vue 的函数,将store、router传进去做初始化。
  • 其他压缩打包体积等不在 本文讨论范围 (各位想必都有一手绝活!!!)

参考文章

+掘金小册 Vue 项目构建与开发入门


http://chatgpt.dhexx.cn/article/Vp0yDbAK.shtml

相关文章

vue3搭建多页面应用的方法

生成vue3的项目 vue create pagesdemo 2.在src文件中添加pages文件夹,同时删除app.vue main.js 在pages下添加项目文件夹,里面的目录结构和 原src一致。如下图 3. 配置vue.config.js vue-cli提供了pags参数,可以使用这个参数进行多页面配置…

vue实现多页面应用开发,包含项目之间跳转

需求:在一个vue项目工程下,需要部署两个项目甚至多个项目。 实现思路: 第一步:在vue.config.js文件中配置两个项目的入口 module.exports {pages: {// index页面是必须的,作为主项目的入口页面index: {entry: ./sr…

vue3配置多页面

先说下项目需求,地址栏中更换,不同地址进入页面不同,类似路由,以下为两个地址 简而言之,就是在不配置路由的情况下,输入admin和membe会进入管理端页面和会员端页面, 分析需求之后可以使用vue配…

构建多页vue应用

目录 1. 初始化2. 编写页面内容3. 配置多页入口总结 一般来说,vue推荐构建单页应用,页面内容的切换是通过路由控制组件的替换来实现的。单页应用使得页面跳转变得极为迅速,不过假如两个页面在功能逻辑上是完全独立的,甚至可能需要…

vue配置多页面应用

第一步:使用vue-cli搭建项目(注:建议安装淘宝镜像,使用cnpm执行下面操作) 1.按住shift按钮,右键点击存放项目的文件夹,点击在此处打开命令窗口。 2.在命令窗口中输入 npm install -g vue-cli …

vue打包多个html,vue多页面应用打包配置

一直是使用vue官方提供的脚手架工具来做开发单页应用,突发奇想的想做一个多页应用的打包配置,顺便了解一下webpack的使用。花了几天时间搞定之后才发现了这篇文章《进阶| Vue 2.x + Webpack 3.x + Nodejs 多页面项目框架(上篇)》。但还是要记录一下自己搭建的过程。代码地址:…

Vue多页面应用开发

一、前言 我们平常对Vue的印象有这样一种感觉:Vue就像专门为单页面应用(SPA)而生,因为Vue的官方文档中也有这样的描述: 实则非也,因为vue在工程化开发的时候依赖于 webpack ,而webpack是将所有的资源整合…

vue 如何实现多页面应用

众所都知vue是一个单页面应用,但是单页面应用最大的问题,就是首次加载的时候过慢,因为他要把所有的css,js都要下载下来后,才可以加载页面,尤其是移动端,在弱网的情况下,体验感极差 尝…

使用vue搭建多页面多系统应用

一、多页面多系统应用 思路 使用Vue搭建多页应用。所有系统都在同一目录下。配置多入口多出口。每个系统之间可以链接。每个系统内依然采用Vue单页应用开发。组件复用性 可以将所有的系统公共组件放到系统目录最外面,以达到组件复用。在系统内部依然将自己独立的组…

vue多页面应用

vue多页面应用 配置vue多页面,生成的vue项目默认是单页面 单页面和多页面的优缺点: 多页面应用: 一个网址对应一个页面资源   1) 缺点:跳转一个页面都需要重新加载整个页面的资源,页面跳转会刷新!   2)…

网页打印服务器无法创建对象,打印问题,教您怎么解决automation服务器不能创建对象...

打印是我们经常会使用到的,所以要是遇到“automation服务器不能创建对象”的问题,我们得知道怎么解决才能更好地使用打印机。所以现在小编就将我的解决“automation服务器不能创建对象”的方法分享给你们。 什么时候会出现“automation服务器不能创建对象…

MSComDlg.CommonDialog服务器不能创建对象错误的解决

作者:朱金灿 来源:http://blog.csdn.net/clever101 在JavaScript中弹出打开文件对话框,代码如下: var fileOpenDlg new ActiveXObject("MSComDlg.CommonDialog"); 结果出现错误: 解决办法是: 假如是Win…

为什么网站总显示服务器不能创建对象,Win7系统ie浏览器提示“Automation 服务器不能创建对象”如何解决...

在win7系统中,自带有IE浏览器,可以方便用户们浏览网页,可是有些win7 ghost 纯净版系统用户在打开ie浏览器的时候,却提示“Automation 服务器不能创建对象”,该怎么解决这样的问题呢?接下来给大家分享一下Wi…

Centos8 进单用户模式

#开机启动菜单,按键e #找到ro 改为rw init/sysroot/bin/sh ## #按键 Ctrl x 进入 #切换根目录为sysroot chroot /sysroot/

进入单用户模式

进入单用户模式 CentOS 7 进入单用户模式 1、服务器按开机按钮,在进入条出现选择内核系统时,按“e”键,之后使用上下按键进行选择,在按“e”键进入编辑模式 2、进入编辑界面后,快速定位到ro 处(roreadonl…

Centos系统进入单用户模式

Centos系统进入单用户模式 单用户模式有时称为维护模式,是类似Unix的操作系统中的一种模式,在该模式下,系统启动时会启动一些服务以提供基本功能,以使单个超级用户能够执行某些关键任务。 在本教程中,我们将描述如何…

Linux系统CentOS进入单用户模式和救援模式详解

一、概述 目前在运维日常工作中,经常会遇到服务器异常断电、忘记root密码、系统引导文件损坏无法进入系统等等操作系统层面的问题,给运维带来诸多不便,现将上述现象的解决方法和大家分享一下,本次主要以CentOS为例;二…

CentOS 7进入单用户模式修改root密码

第一步:启动系统,按上键或者下键,选择内核,按e进入编辑内核。 第二步:定位到“ro”并把“ro”改成“rw init/sysroot/bin/sh”.完成之后按“Ctrlx”。 第三步:依次输入以下命令进行root密码修改&#xff0c…

linux:单用户模式修改密码

1.开机之后在内核上敲击e,然后编辑选项 2.在linux16这一行,将红框内的内容改成rw rd.break 如果没找到,往下拉 根据提示,使用组合键CTRLX进入密码修改 3.进入到系统的紧急求援模式 4.依次输入以下的命令 5.重启有点慢&#xff…

CentOS的单用户模式

一、介绍 Linux系统下的单用户模式类似于Windows系统的安全模式,这种模式特殊情况下才建议使用,比如:超级管理员的登录密码忘记,无法登陆主机等情况!不过在工作环境中最好还是尽量避免出现要进入这种模式的情况。12 …