文章涉及到VUE路由模块化,懒加载,nginx安装,打包配置板块。
项目复杂,路由变多,代码维护性降低,从路由模块化开始一步步优化,解决各种BUG。参考了很多方法,会在文章中引用出来。
第一步、路由按模块配置和懒加载配置

1.1 普通路由配置

文件路径: src > router > index.js

引入组件

import Vue from 'vue'
import Router from 'vue-router'
// 首页
import home from '@/pages/home/Home'
import homeOne from '@/pages/home/components/One'
import homeTwo from '@/pages/home/components/Two'
// 信息内容页
import info from '@/pages/info/Info'
import infoDetail from '@/pages/info/detail/InfoDetail'

配置路由

routes: [
    {
      path: '/',
      component: home,
      children: [
        { path: 'homeOne', component: homeOne },
        { path: 'homeTwo', component: homeTwo },
      ]
    },
    {
      path: '/info',
      meta: { title: 'test' },
      component: info
    },
    {
      path: 'detail/:id',
      component: infoDetail
    }
  ]

1.2 路由按模块配置

文件路径: src > router > index.js
新建文件: src > router > home.js
新建文件: src > router > info.js

index.js

import Vue from 'vue'
import Router from 'vue-router'
// 引入首页 home.js
import home from './home'
// 引入信息内容页 info.js
import info from './info'

Vue.use(Router)

export default new Router({
  mode: 'history',
  routes: [
// 加载路由
    ...home,
    ...info
  ]
})

home.js

// 主页面路由
export default [
  {
    path: '/',
    name: 'home',
    meta: { title: '豆浆豆花' },
    // 路由懒加载
    component: resolve => require(['@/pages/home/Home'], resolve),
    // 子路由
    children: [
      {
        path: 'homeone',
        // 路由懒加载
        component: resolve => require(['@/pages/home/components/One'], resolve)
      },
      {
        path: 'hometwo',
        component: resolve => require(['@/pages/home/components/Two'], resolve)
      }
    ]
  }
]

info.js

// 信息页面路由
export default [
  { // 信息主页面
    path: '/info',
    name: 'info',
    meta: { title: '豆汁' },
    // 路由懒加载
    component: resolve => require(['@/pages/info/Info'], resolve)
  },
  { // 信息页面 传参
    path: 'detail/:id',
    // 路由懒加载
    component: resolve => require(['@/pages/info/detail/InfoDetail'], resolve)
  }
]

参考文章:Vue 2.x框架完善(二)—— vue路由按模块配置

1.3项目打包

1.3.1 cmd执行代码进行打包

npm run build

打包完成后,cmd 提示构建的文件应该通过HTTP服务器提供服务,不能直接打开index.html

 Tip: built files are meant to be served over an HTTP server.
 Opening index.html over file:// won't work.

将打包后的文件放在虚拟主机中,通过域名可以成功访问。
但是刷新页面会报404

1.3.2解决问题

不能直接访问静态页面,将项目放服务器中访问。

第二步,Windos虚拟主机安装nginx服务器

为什么不用tomcat?
vue的路由模式如果使用history,刷新会报404错误。
使用tomcat运行项目,在微信访问网页,如果获取404后会跳转到公益页面。
nginx会捕获,返回到index.html页面
参考文章:为何选nginx配置

2.1 nginx的安装
参考文章:Windows服务器下安装Ngnix服务

虚拟主机使用Windows Server 2012
  1 进入http://nginx.org/en/download....,下载Nginx windows版,本文使用1.14.2版
  2进入https://github.com/kohsuke/wi...,下载winsw

clipboard.png

  3修改下载好的sample-minimal.xml

<configuration>
  
  <!-- ID of the service. It should be unique accross the Windows system-->
  <id>Nginx</id>
  <!-- Display name of the service -->
  <name>Nginx Service (powered by WinSW)</name>
  <!-- Service description -->
  <description>This service is a service cratead from a minimal configuration</description>
  
  <!-- Path to the executable, which should be started -->
  <executable>%BASE%\nginx.exe</executable>
  <logpath>%BASE%\logs</logpath>
  <startarguments>-p %BASE%\nginx.exe</startarguments>
  <stopexecutable>%BASE%\nginx.exe</stopexecutable>
  <stoparguments>-s stop</stoparguments>

 <configuration>

  4.将WinSW.NET4.exe文件改名为mynginx.exe,将sample-minimal.xml文件改名为mynginx.xml。将这两个改名后的文件放置于解压后的Ngnix文件夹中

clipboard.png

  5.将文件夹复制到Windows虚拟主机中【我直接放C盘,可更改】
  路径 C:\Users\Administrator\nginx

//cmd 进入到nginx文件 执行命令
//mynginx.exe install

C:\Users\Administrator\nginx>mynginx.exe install
2019-01-18 10:10:15.984 INFO  - Installing the service width id 'Nginx'

  6.查看windows服务,找到已经存在,如果可以启动服务,就安装正确。

clipboard.png

  7.无法启动服务,报错1067
  参考资料发现80端口冲突,已经在IIS服务中已经配置80端口。IIS服务端口更改为8082。
  参考文章:1607相关错误说明

  8.启动服务,访问localhost:80. 可以访问默认页面

clipboard.png

第三步,Nginx配置

参考文章:vue-route+webpack部署单页路由项目,访问刷新出现404问题

3.1、将打包好的文件放在nginx > html 文件夹中
  访问页面,发现回退有问题,需要对nginx.conf进行配置

3.2、nginx.conf 文件配置,添加代码
clipboard.png

3.3、重启nginx后,问题就迎刃而解了。

3.4、可能会出现的问题,再次刷新页面时,会展现空白页面。
  页面报错,js出问题

Uncaught SyntaxError: Unexpected token <
Uncaught SyntaxError: Unexpected token <
Uncaught SyntaxError: Unexpected token <

nginx配置与代码静态资源打包方式不匹配

因为打包前配置了 config > index.js 文件

assetsPublicPath: '/',

将配置路径还原,再次打包运行就没问题了。

clipboard.png


发小发
98 声望4 粉丝