Vue项目从打包到部署到云服务器上(踩了不少坑)

你的Vue项目终于暂时告一段落了,但是我们都知道开发环境和生产环境的区别。我们平时都是在本地做开发,每次打开都是localhost:8080的,如果你想将它变成你的小网站呢?

首先你看这篇博客必须要做的事情是:
①你有了一个可以正常运行的Vue项目
②你有了服务器+域名(没有就去买,腾讯云)

我所访问的数据接口是自己写的,部署在本地服务器那里的
Node.js+Express+MongoDB(一会要说明跨域处理)

看似很简单的描述其实还是有不少坑。。。

一、打包

直接使用下面的命令就可以打包你的vue项目

npm run build

打包完后你当前目录会多出个dist文件夹
在这里插入图片描述

然后我们需要将其放在HTTP服务器上,我选择了nginx

以上就是打包的过程,但是我遭遇了两个情况,打包后直接运行看下加载静态资源的情况发现,访问域名出现 .js 、.css等静态资源文件访问404,导致访问页面空白

经查明,在打包时需要使用相对路径来处理静态资源,更改build中资源发布路径配置,将 assetsPublicPath: '/' 改为 assetsPublicPath: './',再次打包,并将资源部署到特定路径下,然后访问,此时index.html可以正常访问,同时js和css资源也可以正常访问,但是css中引入的assets目录下的大图片资源出错了(服务端404),还有我的element-ui组件的图标也显示异常,就是一个奇怪的符号方块
在这里插入图片描述

修改build文件夹下的utils.js代码
在这里插入图片描述
页面基本可以加载所有的静态资源了,页面显示正常

二、部署

首先你要对nginx有个了解:Web和反向代理服务器

接下来就将dist文件夹放到http服务器那边去,具体如何将这代码(dist文件夹)传到你的服务器上去,自行解决。

我们就要通过访问网址来访问到这个dist里的index.html
这里我把dist 文件部署在了nginx的文件里,比较好写路径访问,并改名成了html文件夹

配置服务器:在conf/nginx 里的http{}模块里添加如下代码

     server {
        listen       80;   //监听的端口
        server_name  localhost;   //服务器名字
        client_max_body_size  500m;   //这里是客户端请求数据body的最大值


        location / {
            root   html;       //配置路由,直接访问这个域名+80端口就是到html文件夹
            index  index.html index.htm;  //访问到index.html首先
        }


        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html-2;
        }
         
      //跨域处理
        location /api2/ {
            proxy_pass   http://127.0.0.1:3000/;
        }


    }

你会发现有很多server{}模块,如果你有很多个项目要同时部署,可以在server模块中设置不同的监听端口,通过访问同一个域名不同端口可以访问不同的项目

配置结束后,就要重启我们的nignx以便载入配置

nginx  -s  reload

报错会提示你的

我这个云服务器关联的域名是luojiework.cn

接下来访问www.luojiework.cn(默认端口80)就可以访问到该项目了
在这里插入图片描述
访问是可以访问了,然后是最麻烦的问题又来了,跨域——

三、跨域

我们部署之后会遇到经典的js问题,远程服务器地址不对,或者跨域问题
因为我的http服务器和后台接口都在同一个计算器上,真正的接口是

http://127.0.0.1:3000

项目里访问是
在这里插入图片描述

但是本地开发的时候,通过跨域处理已经解决过该问题了啊?
我以前的一篇博客

查阅了vue的书,得知是在开发时候,Vue.js会通过$npm run dev 来运行本地开发服务器,这个服务器中有一个代理可以把所有的/api2开头的请求例如

localhost:8080/api2/blogs/getAllBlog

转发到

localhost:3000/blogs/getAllBlog

但是在生产环境中发起请求时,就不存在代理服务器、开发服务器(dev server)了。其实解决的方式挺简单,但是当初鼓捣这个问题是真的久,我发现我的域名配置不需要rewrite

在这里插入图片描述

回头看上面的代码,代码的意思是将所有api2开头的请求的域名转发到接口域名
问题解决。

  • 8
    点赞
  • 80
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值