乐趣区

vue多页面项目中路由如何使用history模式

前言


之前写了一个 vue 项目中需要添加一个打印的页面,需要使用多页面的模式进行开发,vue-cli3 出初始化的项目配置多页面还是很容易的,但是发现 print.html 没有办法配置 history 模式的路由,一旦使用 history 模式的路由。写了一个简单的 demo 在网上寻求帮助没有能解决问题,后来没有办法只能使用 hash 模式完整项目了。

如何解决


有一天看 webpack 文档的时候,突然看到了 historyApiFallback 配置项,一瞬间感觉找到方法了。下班后回家就下载下之前的项目折腾了。
之前的 vue.config.js 中的配置是这样的,

const path = require('path')
function resolve (dir) {return path.join(__dirname, dir)
}
module.exports = {
    pages: {
        index: {
            entry: 'src/main.js',
            template: 'public/index.html',
            filename: 'index.html',
            title: 'Index Page',
        },
        print: {
            entry: 'src/print/main.js',
            template: 'public/print.html',
            filename: 'print.html',
            title: 'print Page',
        }
    },
    chainWebpack: config => {
        config.resolve.alias
            .set('@', resolve('src'))
            .set('assets',resolve('src/assets'))
            .set('components',resolve('src/components'));
    }
}

然后根据 webpack 文档,添加了如下代码:

configureWebpack: {
        devServer: {
            historyApiFallback: {
                verbose: true,
                rewrites: [{ from: /^\/index\/.*$/, to: '/index.html'},
                    {from: /^\/print\/.*$/, to: '/print.html'}
                ]
            }
        }
    }

接下来启动项目去浏览器中验证,发现访问 localhost:8080/print/hellolocalhost:8080/index/hello-world 能够分别访问到 print.htmlindex.html页面。但是不能进入对应的路由于是修改各自的路由文件,修改完后的路由分别为:

// print
import HelloWold from '../components/HelloWorld'
import goBack from '../components/GoBack'
export default [
    
    {
        path: '/print/hello',
        name: 'print',
        component: HelloWold
    },
    {
        path: '/print/go-back',
        name: 'print',
        component: goBack
    }
]
// index
import HelloWold from '../components/HelloWorld.vue'
export default [
    {
        path: '/index/hello-world',
        name: 'hello-world',
        component: HelloWold
    }
]

在浏览器中访问,可以了~~~
项目地址 github

退出移动版