vue打包遇到的问题

1,096 阅读2分钟

本地代码调试完事ok, npm run build生成的dist文件夹丢到服务器,然后what?!!!!! 页面一片空白?!!!! css和js都报404引用不到。。。

一番排查下来发现是路径不对,引用路径是www.../static/...js,实际目录应该为 www.../dist/static/...js

路径解决方法

conig/index.js 里面的 build配置里面

// 由原来的绝对路径 '/'  配置为相对路径 './' 或者 '/二级目录(dist)/' 
assetsPublicPath: './', 

重新build放到服务器,发现js和css都能正常引用了,但是页面还是什么内容都出不来,这又是为什么呢为什么???

又是一番百度下来,发现是路由中的history惹得祸。。。

开启history模式的时候,并没有对路由进行任何处理,在Dev阶段一切都是正常的,可是打包之后,访问项目路径:

sdp.driver.com/driver/

会发现页面一片空白,但是静态文件都能够正常的引用,因为使用了YII中的模块,所以除了域名之外,还会带有driver模块名。一般很多人创建的项目都放在了根目录下面,也就是:

sdp.driver.com

这样的一种形式,没问题。可是如果配置了模块,或者放置在了子文件夹下面,那么就会出问题。其实,这是因为router无法找到路径中的组件,所以也就无法渲染了。只需要修改router中的index.js,在每个path中加上你项目名称就行了,这样就能够成功了。

路由history模式解决方法

1. 简单粗暴,去掉 router/index.js路由里面的'mode: 'history'

2. 在router/index.js的所有路由跳转里面加上文件目录,例如/dist为根目录下面的文件目录

export default new Router({
  mode: 'history',
  fallback: true,
  scrollBehavior (to, from, savedPosition) {
    if (savedPosition) {
      return savedPosition
    } else {
      if (from.meta.keepAlive) {
        from.meta.savedPosition = document.body.scrollTop
      }
      return { x: 0, y: to.meta.savedPosition || 0 }
    }
  },
  routes: [
    {
      path: '/dist',
      redirect: '/dist/main'
    },
    {
      path: '/dist/main',
      name: 'main',
      component: () => import('@/views/main.vue'),
      meta: {
        title: '大数据首页'
      }
    },
    ......

问题2:vue本地运行的时候只能用localhost访问,本机ip访问不了。。

解决方法:

config/index.jshost改为 '0.0.0.0'

module.exports = {
  dev: {

    // Paths
    assetsSubDirectory: 'static',
    assetsPublicPath: '/',
    proxyTable: {},

    // Various Dev Server settings
    host: '0.0.0.0', // can be overwritten by process.env.HOST
    port: 8080, // can be overwritten by process.env.PORT, if port is in use, a free one will be determined
    autoOpenBrowser: false,