搜索
首页web前端js教程如何将 Vue-cli 改造成支持多页面的history模式

本文主要介绍了详解如何将 Vue-cli 改造成支持多页面的 history 模式,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能帮助到大家。

标题可能描述不准确, 大概就是这么个需求:

用 Vue-cli 搭建一个多入口, 多页面的站点, 也就是通过html-webpack-plugin插件会生成多个 .html 文件, 在默认下, 是只有 index.html 这个入口可以用 history 模式, 如: http://www.xxx.com/xxx/xxx, 而其他的入口只能用 hash 模式, 如: http://www.xxx.com/admin.html#/xxx/xxx, 因为webpack-dev-middleware会将所有的路由都指向 index.html 文件, 假如线上的时候, 都需要 history 模式, 这样多少会造成麻烦.

真是太二了, 刚写完文章就发现connect-history-api-fallback这个插件就是做这个的...

方法更新如下:

修改 build/dev-server.js 文件


app.use(require('connect-history-api-fallback')())

改成


var history = require('connect-history-api-fallback')
app.use(history({
  rewrites: [
    { from: 'index', to: '/index.html'}, // 默认入口
    { from: /\/backend/, to: '/backend.html'}, // 其他入口
    { from: /^\/backend\/.*$/, to: '/backend.html'},
  ]
}))

具体规则就参考: https://github.com/bripkens/connect-history-api-fallback

-------------- 以下代码请无视 --------------

下面我们就来改造下, 让所有入口都支持 history 模式:

1. 首先, 我们在 build 目录下建立个 setup-dev-server.js 文件, 里面代码如下:


const path = require('path')
const webpack = require('webpack')
const clientConfig = require('./webpack.dev.conf') // 引入开发环境下的 webpack 配置文件

module.exports = function setupDevServer(app, opts) {
  const clientCompiler = webpack(clientConfig)
  // 加载 webpack-dev-middleware 插件
  const devMiddleware = require('webpack-dev-middleware')(clientCompiler, {
    publicPath: clientConfig.output.publicPath,
    stats: {
      colors: true,
      chunks: false
    }
  })
  app.use(devMiddleware)
  // 关键代码开始
  // 因为开发环境下, 所有的文件都在内存里, 包括由 html-webpack-plugin 生成的 .html 文件, 所以我们需要用 webpack-dev-middleware 提供的 api 从内存里读取
  clientCompiler.plugin('done', () => {
    const fs = devMiddleware.fileSystem // 访问内存
    const filePath = path.join(clientConfig.output.path, 'index.html') // 读取的文件, 文件名和 html-webpack-plugin 生成的文件名要求一致
    if (fs.existsSync(filePath)) { // 判断下文件是否存在
      const index = fs.readFileSync(filePath, 'utf-8') // 从内存里取出
      opts.indexUpdated(index) // 将取出的文件通过 indexUpdated 函数返回, 这个函数怎么来的, 后面会说明
    }
    const adminPath = path.join(clientConfig.output.path, 'backend.html') // 同上, 这是第二个入口生成的 .html 文件, 如果还有其他入口, 这个多复制几份
    if (fs.existsSync(adminPath)) {
      const admin = fs.readFileSync(adminPath, 'utf-8')
      opts.adminUpdated(admin)
    }
  })

  // 加载热重载模块
  app.use(require('webpack-hot-middleware')(clientCompiler))
  var hotMiddleware = require('webpack-hot-middleware')(clientCompiler)
  // 当修改 html-webpack-plugin 模版时, 自动刷新整个页面
  clientCompiler.plugin('compilation', function(compilation) {
    compilation.plugin('html-webpack-plugin-after-emit', function(data, cb) {
      hotMiddleware.publish({
        action: 'reload'
      })
      cb()
    })
  })
}

2. 修改 build/dev-server.js 文件

主要修改文件中var app = express()到module.exports = app.listen(port, function (err) {之间的代码


var app = express()

var indexHTML
var adminHTML

// 引用前面创建的文件, 并将两个保存内容的函数传过去, 这里保存内容的变量写成对象或者数组也可以, 还可以少点代码
require('../config/setup-dev-server')(app, {
  indexUpdated: index => {
    indexHTML = index
  },
  adminUpdated: index => {
    adminHTML = index
  },
})

// 加载反向代理
Object.keys(proxyTable).forEach(function(context) {
  var options = proxyTable[context]
  if (typeof options === 'string') {
    options = {
      target: options
    }
  }
  app.use(proxyMiddleware(context, options))
})
// 设置静态文件夹路由
var staticPath = path.posix.join(config.assetsPublicPath, config.assetsSubDirectory)
app.use(staticPath, express.static('./static'))

// 入口1路由
app.get(['/', '/category/:id'], (req, res) => {
  res.send(indexHTML)
})

// 入口2路由
app.get(['/backend', '/backend/*'], (req, res) => {
  res.send(adminHTML)
})

// 404 页面
app.get('*', (req, res) => {
  res.send('HTTP STATUS: 404')
})

app.use(function(req, res, next) {
  var err = new Error('Not Found')
  err.status = 404
  next(err)
})

app.use(function(err, req, res) {
  res.status(err.status || 500)
  res.send(err.message)
})

module.exports = app.listen(port, function(err) {

3. npm run dev 开始愉快的写代码吧

相关推荐:

HTML5 History模式是什么

HTML5中关于History模式的详解

history的几种方法

以上是如何将 Vue-cli 改造成支持多页面的history模式的详细内容。更多信息请关注PHP中文网其他相关文章!

声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
如何解决Windows Hello不支持的摄像头问题如何解决Windows Hello不支持的摄像头问题Jan 05, 2024 pm 05:38 PM

使用windowshello中,找不到支持的摄像头,常见的原因是使用的摄像头不支持人脸识别、摄像头驱动安装不正确导致的,那么接下来让我们一起去看一下怎么去设置。windowshello找不到支持的摄像头教程:原因一:摄像头驱动安装不对1、一般来说Win10系统可以自动为大部分摄像头安装驱动程序,如下,插上摄像头之后会有通知;2、这时我们打开设备管理器看看,摄像头驱动是否安装好,没有的话就需要手动操作一下。WIN+X,然后选择设备管理器;3、设备管理器窗口中,展开照相机选项,会显示摄像头的驱动型号

PyCharm社区版支持的插件足够吗?PyCharm社区版支持的插件足够吗?Feb 20, 2024 pm 04:42 PM

PyCharm社区版支持的插件足够吗?需要具体代码示例随着Python语言在软件开发领域的应用越来越广泛,PyCharm作为一款专业的Python集成开发环境(IDE),备受开发者青睐。PyCharm分为专业版和社区版两个版本,其中社区版是免费提供的,但其插件支持相对专业版有所限制。那么问题来了,PyCharm社区版支持的插件足够吗?本文将通过具体的代码示例

华硕TUF Z790 Plus兼容华硕MCP79内存的频率华硕TUF Z790 Plus兼容华硕MCP79内存的频率Jan 03, 2024 pm 04:18 PM

华硕tufz790plus支持内存频率华硕TUFZ790-PLUS主板是一款高性能主板,支持双通道DDR4内存,最大支持64GB内存。它的内存频率非常强大,最高可达4800MHz。具体支持的内存频率包括2133MHz、2400MHz、2666MHz、2800MHz、3000MHz、3200MHz、3600MHz、3733MHz、3866MHz、4000MHz、4133MHz、4266MHz、4400MHz、4533MHz、4600MHz、4733MHz和4800MHz。无论是日常使用还是高性能需

优缺点分析:深入了解开源软件的利弊优缺点分析:深入了解开源软件的利弊Feb 23, 2024 pm 11:00 PM

开源软件的利与弊:了解开源项目的优劣势,需要具体代码示例在当今数字化时代,开源软件越来越受到关注和推崇。作为一种基于合作和分享精神的软件开发模式,开源软件在不同领域都有着广泛的应用。然而,尽管开源软件具有诸多优势,但也存在一些挑战和限制。本文将深入探讨开源软件的利与弊,并通过具体的代码示例展示开源项目的优劣势。一、开源软件的优势1.1开放性和透明性开源软件

如何使用Flask-Babel实现多语言支持如何使用Flask-Babel实现多语言支持Aug 02, 2023 am 08:55 AM

如何使用Flask-Babel实现多语言支持引言:随着互联网的不断发展,多语言支持成为了大多数网站和应用的一个必要功能。Flask-Babel是一个方便易用的Flask扩展,它提供了基于Babel库的多语言支持。本文将介绍如何使用Flask-Babel来实现多语言支持,并附上代码示例。一、安装Flask-Babel在开始之前,我们需要先安装Flask-Bab

GTX960与XP系统的兼容性及相关说明GTX960与XP系统的兼容性及相关说明Dec 28, 2023 pm 10:22 PM

有一些用户使用xp系统,想要将他们的显卡升级为gtx960,但不确定gtx960是否支持xp系统。实际上,gtx960是支持xp系统的。我们只需在官网下载适用于xp系统的驱动程序,就可以使用gtx960了。下面让我们一起来看看具体的步骤吧。gtx960支持xp系统吗:GTX960可以与XP系统兼容。只需要下载并安装驱动程序,你就可以开始使用了。首先,我们需要打开NVIDIA官网并导航到主页。然后,我们需要在页面上方找到一个标签或按钮,它可能会被标记为“驱动程序”。一旦找到了这个选项,我们需要点击

启用安全启动是升级win11的必要条件吗?如何打开安全启动功能启用安全启动是升级win11的必要条件吗?如何打开安全启动功能Jan 29, 2024 pm 08:33 PM

大家都知道,要安装win11系统,需要确保电脑支持TPM2.0并开启安全启动。如果你的电脑安装win11失败,可能是因为安全启动未开启。以下是一些品牌电脑开启安全启动的教程,希望对你有所帮助。升级win11提示必须支持安全启动怎么办?一、华硕主板1、首先我们切换中文,然后根据提示按键盘的F7打开高级设置。3、然后选择其中的密钥管理。二、联想电脑1、2020年前的联想电脑型号,需要使用F2进入bios设置,然后在上方选中security。2、在security选项卡下降secureboot更改为E

如何使用Hyperf框架进行国际化支持如何使用Hyperf框架进行国际化支持Oct 22, 2023 am 08:14 AM

如何使用Hyperf框架进行国际化支持随着全球化的快速发展,很多应用都需要具备多语言支持的功能,以满足不同国家和地区用户的需求。Hyperf框架作为一款轻量级的高性能框架,提供了国际化支持的功能,能够帮助开发者快速实现多语言应用的开发。本文将介绍如何在Hyperf框架中使用国际化功能,并提供相应的代码示例。一、配置多语言支持首先,需要在Hyperf的配置文件

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
3 周前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
3 周前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
3 周前By尊渡假赌尊渡假赌尊渡假赌

热工具

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

螳螂BT

螳螂BT

Mantis是一个易于部署的基于Web的缺陷跟踪工具,用于帮助产品缺陷跟踪。它需要PHP、MySQL和一个Web服务器。请查看我们的演示和托管服务。

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

功能强大的PHP集成开发环境

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

DVWA

DVWA

Damn Vulnerable Web App (DVWA) 是一个PHP/MySQL的Web应用程序,非常容易受到攻击。它的主要目标是成为安全专业人员在合法环境中测试自己的技能和工具的辅助工具,帮助Web开发人员更好地理解保护Web应用程序的过程,并帮助教师/学生在课堂环境中教授/学习Web应用程序安全。DVWA的目标是通过简单直接的界面练习一些最常见的Web漏洞,难度各不相同。请注意,该软件中