vue在history模式下打包部署问题解决

引言

项目使用的模板是element-template,由于业务需要,我将路由的hash模式更改为了history模式,然后在打包部署项目时就出现了问题

个人发现是资源的访问路径有问题,在部署之后发现每次访问的js资源路径前都会自动携带上我路由的部分参数

经过查阅资料后发现该问题的发生与路由的两种模式有关

遇到的问题

问题如下:

image-20230228231557971

在我执行npm run build:prod打包项目完成后,在本地打开dist目录下的index.html文件是无法打开的,我试过将publicPath修改为./,修改后依旧无效

image-20230228231712208

但是项目部署到服务器上后可以正常打开,只是进入页面后在切换路由时会出现爆红然后卡死(根据f12可以看出是访问js资源和css资源路径有问题)

问题原因

大概原因就是路由的hash模式和history模式对路由方式的处理不一样,所以导致我出现了这个问题

再具体的可以到网上去搜索:vue中路由的hash模式与history模式打包部署项目区别

解决问题

  1. vue.config.js中的publicPath参数修改成了/,不能是./

  2. 在部署项目时在nginx中增加配置如下

    location / {
      try_files $uri $uri/ /index.html;
    }
    
  3. 最后部署访问后发现项目没有问题

**注意:**如果项目不是部署在服务器的根路径下,在路由的配置位置需要加上base: /包的位置/,同时vue.config.js中的publicPath参数也需要设置成这个

示例:项目部署在服务器的vue包下,那么路由配置中需要加base: /vue/publicPath需要设置成/vue/

image-20230228232641859

总结

  1. 路由的hash模式与history模式打包时差异如下,

    • hash

      1. publicPath配置为./
      2. 打包完成后可以直接运行dist包下的index.html且有界面显示
      3. 部署时直接使用宝塔部署即可,无需配置其它
    • history

      1. publicPath配置为/或项目在服务器根下路径

      2. 打包完成后不可直接运行dist包下的index.html,必须要部署到服务器才行

      3. 部署时还需要自己去配置nginx,实现服务端的映射

        location / {
          try_files $uri $uri/ /index.html;
        }
        
  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
在Nginx上部署Vue项目(使用history模式)需要进行以下步骤: 1. 安装Nginx:首先确保已经在服务器上安装了Nginx,可以使用包管理器(如apt、yum等)进行安装。安装完成后,启动Nginx服务。 2. 构建Vue项目:在本地开发环境中使用Vue CLI构建好的Vue项目,使用以下命令构建: ``` npm run build ``` 此命令将生成一个`dist`目录,包含了打包好的静态资源。 3. 配置Nginx:找到Nginx的配置文件,默认路径为`/etc/nginx/nginx.conf`,使用文本编辑器打开进行编辑。 4. 在Nginx的配置文件中找到`location /`的块,并将其替换为以下内容: ``` location / { try_files $uri $uri/ /index.html; } ``` 这段配置代码的作用是将所有的URL请求重定向到`index.html`文件,因为Vue项目是一个单页应用,所有的页面都由`index.html`和JavaScript文件来管理。 5. 配置代理(可选):如果Vue项目需要与后端API进行通信,可以将API请求代理到后端服务器。在Nginx配置文件的`location /`块后面,添加以下内容: ``` location /api/ { proxy_pass http://backend-server; } ``` 将`backend-server`替换为实际的后端服务器地址。 6. 保存并退出Nginx配置文件。重新加载Nginx配置,使更改生效: ``` nginx -s reload ``` 现在,Vue项目已经成功部署在Nginx上,并且可以通过服务器的IP地址或域名进行访问。使用history模式Vue路由器可以正常工作,并且URL不会显示`/#/`的哈希标记。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱学习的大雄

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值