Laravel + vue-router 实现 HTML5 History 模式

自从玩上了Laravel,就每天刷这个网站,有些人可能需要解决一个问题:
laravel 路由 和 vue-router 实现HTML5 History 模式无法同时开启。
由于我要结合 Vue 的 异步组件 和 Webpack 的 code splitting feature, 实现路由组件的懒加载。所以我选用了Vue-cli。

我的想法是:
通过nginx 配置js和css等静态资源由nginx处理,laravel则由Apache处理,从而laravel重写规则放在Apache,vue-router的重写规则就放在nginx,开工:

1、将vue-cli打包配置改一下,将资源文件直接打包到laravel的public目录下。
目录规划:
/
--dir1: laravel目录
--dir2: vue-cli 目录

> /dir2/config/index.js
assetsRoot: path.resolve(__dirname, '../../dir1/public'),
assetsSubDirectory: 'static',
assetsPublicPath: '/'

2、vue-cli生成mix-manifest.json文件。

/dir2/build/webpack.prod.conf.js
plugins: [] 下面加
var ManifestPlugin = require('webpack-manifest-plugin')
new ManifestPlugin({
fileName: '../../dir1/public/mix-manifest.json',
basePath: '/'
})

3、配置Nginx。

location ~ \.(js|css|png|jpg|gif)$ {
root /dir1/public;
}
location / {
proxy_pass   https://127.0.0.1:xxxx;
include proxy.conf;
}

4、完成。

RouterConfig.mode = 'history'
本作品采用《CC 协议》,转载必须注明作者和本文链接
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 11

不知道楼主所谓的

laravel 路由 和 vue-router 实现HTML5 History 模式无法同时开启。

具体是什么情况。但是我在做 Vue-router HTML5 History 和 laravel 结合的时候是采用以下的方法来解决 vue 中定义的 route,laravel 未定义时路由报错的

Route::get('/home', 'HomeController@index');
Route::get('/home/{query}', 'HomeController@index')
     ->where('query', '.*');

在 L5.5 就能更方便点,直接使用 router view 新特性。

Route::view('/home', 'home.index');
Route::view('/home/{query}', 'home.index')
     ->where('query', '.*');
6年前 评论
angel_DX 3年前
lanatus

天天刷这个网站+1

6年前 评论

不知道楼主所谓的

laravel 路由 和 vue-router 实现HTML5 History 模式无法同时开启。

具体是什么情况。但是我在做 Vue-router HTML5 History 和 laravel 结合的时候是采用以下的方法来解决 vue 中定义的 route,laravel 未定义时路由报错的

Route::get('/home', 'HomeController@index');
Route::get('/home/{query}', 'HomeController@index')
     ->where('query', '.*');

在 L5.5 就能更方便点,直接使用 router view 新特性。

Route::view('/home', 'home.index');
Route::view('/home/{query}', 'home.index')
     ->where('query', '.*');
6年前 评论
angel_DX 3年前

@young 我用你的方法试了一下,会报错。
/home/abc

InvalidArgumentException
View [abc] not found.
6年前 评论

@young 用Route::get是可以的,谢谢你的帮助,用你的方法更简单。

6年前 评论
wenber

@young 这样的话,就不需要配置nginx或者apache规则了吧.

6年前 评论
nff93

一直都是用的 @young 的那种姿势

6年前 评论

@ziyanziyu 对的,不需要再编辑服务器规则了

6年前 评论

@young 遇到个问题,使用MIX,在VUE-ROUTER中懒加载不行。
const Index = r => require.ensure([], () => r(require('../views/Index')), 'index')

6年前 评论

@waney 在我印象中 Vue 好几个版本的懒加载方式都不一样。你可能需要具体查一下你的mix报错,看对应 vue 版本的懒加载方式是什么,在看看使用的是不是对应的 vue-loader 版本,有可能这也是问题所在。

6年前 评论

@young 难搞,还是放弃MIX,直接用VUE-CLI建项目,灵活些。

6年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!