lxz612 / Gank

干货集中营的webapp版
9 stars 4 forks source link

vue项目打包后挂载在服务器的根目录上显示没问题,但是挂载在子目录下就会显示空白 #1

Closed eireenyin closed 7 years ago

eireenyin commented 7 years ago

你好,我在cnodejs 上看到你提的问题 “求助!Vue项目用Webpack打包后放到服务器上,但访问是空白页?弄了好久了也不知道什么原因”;我也遇到同样的问题,vue项目打包后挂载在服务器的根目录上显示没问题,但是挂载在子目录下就会显示空白。打开开发者工具查看 Elements,发现是 里 的内容没显示出来,我看到你在问题的回复下说你已经解决了这个问题,请问你是怎么解决的呢?谢谢!

lxz612 commented 7 years ago

首先是要先想清楚一点是: 我们Vue项目的前端路由和服务器上的路由是两个不同东西,前端路由只是作用在浏览器端,在浏览器端实现跳转,但是它和服务器端的路由是不一致的。

说的有点绕。拿我的项目举个例子:我们前端Vue有个路由路径是https://lxz612.github.io/Gank/meizi,这是由于Vue路由路径 https://lxz612.github.io/Gank/index 跳转过来的,并不是从服务器请求来的,所以如果你单纯访问 https://lxz612.github.io/Gank/meizi 是会不行的,会报404。除非你在服务器端做个映射,那就另当别论。 那为什么 https://lxz612.github.io/Gank/index 可以访问呢,因为index.html是放在根目录下(git项目的根目录是 https://lxz612.github.io/Gank ),index是服务器默认映射的路径。

所以我当时是没想通这个问题,把前端路由和服务器路由混在一起来。我只要把路径配置好就可以(在我项目的router.js)

//定义路由规则
export default function(router) {
    //路由映射
    router.map({
        '/Gank': { //启动页
            name: 'start',
            component: function(resolve) {
                require(['./views/start.vue'], resolve);
            }
        },
        '/Gank/index':{//首页
            name: 'index',
            component: function(resolve) {
                require(['./views/index.vue'], resolve);
            }
        },
        '/Gank/meizi':{//纯妹子
            name:'meizi',
            component:function(resolve){
                require(['./views/meizi.vue'],resolve);
            }
        }
  });
}

还有要配置下 webpack.config.js 的 publicPath

 output: {                                //输出配置
    path: __dirname + '/dist/',            //生成文件的存储路径
    filename: 'build.js',                  //生成的文件名
    publicPath: '/Gank/dist/',             //路由路径
    chunkFilename: '[id].build.js?[chunkhash]'               
  },

啰嗦这么多,希望能帮到你!