求助!Vue项目用Webpack打包后放到服务器上,但访问是空白页?弄了好久了也不知道什么原因
发布于 4 年前 作者 lxz612 66502 次浏览 来自 问答

我最近弄了个Vue小项目。原本想的是Webpack打包后把dist文件夹和index.html放到本机的Apache服务器上跑,但放到服务器根目录后,访问发现加载不了。但是我感到奇怪的是访问的index.html明明可以加载打包后js文件(第一张图),为什么会什么都没有呢?请各位仁兄帮帮忙!跪谢! 捕获.JPG 下面是配置文件和index.html ~webpack.config.js配置文件

var path = require('path');
var webpack = require('webpack');
var ExtractTextPlugin = require("extract-text-webpack-plugin");
var isProduction = function() {
    return process.env.NODE_ENV === 'production';
}

//webpack插件
var plugins = [
    //提公用js到common.js文件中
    new webpack.optimize.CommonsChunkPlugin('common.js'),
    //将样式统一发布到style.css中
    new ExtractTextPlugin("style.css", {
        allChunks: true,
        disable: false
    }),
    // 使用 ProvidePlugin 加载使用率高的依赖库
    new webpack.ProvidePlugin({
      $: 'webpack-zepto'
    })
];

var entry ='./src/main',
    cdnPrefix = "",
    buildPath = "/dist/",
    publishPath = cdnPrefix + buildPath;

//生产环境js压缩和图片cdn
if (isProduction()) {
    cdnPrefix = "";
    publishPath = cdnPrefix;
}

module.exports = {
  debug: true,
  entry: entry, //入口文件
  output: {                                //输出配置
    path: __dirname + buildPath,           //生成文件的存储路径
    filename: 'build.js',                  //生成的文件名
    publicPath: publishPath                 
  },
  //配置loader
  module: {
    loaders: [
      {//处理.vue文件
        test: /\.vue$/,
        loader: 'vue-loader'
      },
      {//处理.js文件
        test: /\.js$/,
        loader: 'babel',
        exclude: /node_modules/
      },
      {//处理文件中各种图片资源
        test: /\.(png|jpg|gif|svg)$/,
        loader: 'file',
        options: {
          name: '[name].[ext]?[hash]'
        }
      },
      {
        test: /\.woff(2)?(\?v=[0-9]\.[0-9]\.[0-9])?$/,
        loader: "url-loader?limit=10000&minetype=application/font-woff"
      },
      {
        test: /\.json$/,
        loader: 'json'
      },
      {
        test:/\.(html|tpl)$/,
        loader: 'html-loader'
      }
    ]
  },
  vue:{
    loaders: {
      css: ExtractTextPlugin.extract("css")
    }
  },
  babel: {
      //es6转码为es5
      presets: ['es2015', 'stage-0'],
      plugins: ['transform-runtime']
  },
  resolve: {
    // require时省略的扩展名,如:require('module') 不需要module.js
    extension: ['', '.js'],
  },
  plugins:plugins,
  devtool: '#source-map'
}

~index.html

<!DOCTYPE html>
<html lang="zh-cn">
<head>
  <meta charset="utf-8">
  <title>Gank</title>
  <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=no, minimal-ui">
  <style type="text/css">
    body,img{
      padding:0;
      margin:0;
    }
    body{
      font-family: "Helvetica Neue", Helvetica, STHeiTi, sans-serif;
    }
  </style>
  <link rel="stylesheet" type="text/css" href="/dist/style.css">
</head>
<body>
  <div id="app">
  	<!-- 路由匹配到的组件将渲染在这里 -->
  	<router-view ></router-view>
  </div>
  <script src="/dist/common.js"></script>
  <script src="/dist/build.js"></script>
  <script src="/dist/1.build.js"></script>
  <script src="/dist/2.build.js"></script>
  <script src="/dist/3.build.js"></script>
</body>
</html>

这是我的项目目录 捕获.JPG

15 回复

莫沉……

来自酷炫的 CNodeMD

莫沉……

来自酷炫的 CNodeMD

最好把更多的代码放出来,或者把项目地址贴出来,只看webpack的配置不容易看出来

@soullcm 这是我的项目地址 https://github.com/lxz612/Gank 我自己在调试环境webpack-dev-server没有问题,就是打包后放到服务器就跪掉了。我觉得是自己配置写的有问题,但又不知问题在哪。真的好气人呀!

有可能是 js环境的问题 我有个vue项目 在chrome扩展的环境下(csp)就是你这种情况 后来换成了cooking脚手架生成的,能用了

@lxz612 我下下来试了,我放在express上,可以运行啊,你直接访问index.html,估计不行,因为你里面定义的路由会识别不出来,你定义一个404的路由,应该就能看出问题了

@cnbailian (⊙_⊙),那我换这个脚手架试下。谢谢了……

来自酷炫的 CNodeMD

@soullcm 我也试过你这个方法,确实能行。但这打包出来是静态资源,我觉得应该可以访问index.html。我的项目结构和别人的也是用vue-cli构建的项目基本一致,用相同的步骤打包他们的项目,放到我本机的Apache服务器,确实可以访问index.html,也能识别他们的vue路由。但打包我的就是会有问题。

来自酷炫的 CNodeMD

@lxz612 楼主,我试了下。挂在服务器的根目录下可以运行,但是挂在服务器的子目录下就不行。你如果要修改的话,得把 src/router.js 的路径加上前缀, 比如说你访问 vue 项目的路径是 localhost:3000/gank, 得把 ‘/’ 改成 ‘/gank’,’/index’ 改成 ‘/gank/index’。另外, webpack.config.js 里的 ouput 里的 publicPath 也得改,类似前面说的.

@IchiNiNiIchi 确实如你所说,问题是路由上。我开始一直以为服务器端路由和vue前端路由是一一对应的,后面认真思考后,才发现两者只是在入口路由上是一致。我现在已经弄好了,而且已经把项目部署到Github Pages上。虽然依旧还是有些其他问题,但我已经有点明白怎么做了。感激之情,无以言表。另外也非常感谢@cnbailian @soullcm 这两位大哥的相助。

此贴终结!

楼主我也遇到相同的问题了,您怎么解决的能分享下吗

我也遇到过,还去那个项目上提了issue 就是打包路径的问题~

@hezhongfeng 我看了下https://router.vuejs.org/zh-cn/essentials/history-mode.html然后把那段代码发给了后端,结果后端死活配不出来现在还在找解决方案…

回到顶部