Skip to content

1、安装 nginx

2、到 nginx 的安装目录下使用 start nginx 启动 nginx 服务

3、nginx 的主配置文件在/conf/nginx.conf

4、修改 vue 项目里的 vue.config.js 的配置文件

添加 publicPath 选项,根据你需要部署的路径来进行设置。

js
// 方案一:
module.exports = {
  publicPath: "/",
  //默认的输出目录名为dist,'/'等价于'/dist/'
};

// 方案二:
// 值根据你所需要部署的项目路径来,如果是根目录,只需要修改成/即可
module.exports = {
  //这时输出的目录会名为testWeb,并且访问项目时,路径中必须加前缀testWeb!!!
  publicPath: "/testWeb/",
  outputDir: "testWeb",
};

image-20221010165532751

5、打包部署文件 npm

6、将打包部署后的文件放在 nginx/html 目录下

即 dist 文件夹(或者其它名字)放到 html 目录下面

注:也可以不放在 nginx 的 html 目录下面,放在任何地方都可以,但是要在 root 中注明!

image-20221010171444604

7、修改 nginx 的配置文件:

json
// 方案一,publicPath:'/',vue根目录名:dist,效果:访问/*或者/hao/*都是访问的html/dist/index.html文件
location / {

    root   html/dist; // 指向vue目录
    index  index.html index.htm; // index指向 html/dist/index.html文件
    try_files $uri $uri/ /index.html;
}
location /hao {

    alias html/dist; // 指向vue目录
    index index.html index.htm; // index指向html/testWeb/index.html文件
    try_files $uri $uri/ /dist/index.html; // 当找不到文件的时候,就会重定向到这个文件下
}

// 方案二,publicPath: '/testWeb/',vue根目录名:testWeb,效果:访问/*或者/hao/*都是访问的html/testWeb/index.html文件
location / {

    root   html/testWeb; // 指向vue目录
    index  index.html index.htm; // index指向 html/dist/index.html文件
    try_files $uri $uri/ /index.html;
}
location /hao {

    // 这里的testWeb与4中所配置的路径一致
    alias html/testWeb; // 指向vue目录
    index index.html index.htm; // index指向html/testWeb/index.html文件
    try_files $uri $uri/ /testWeb/index.html; // 当找不到文件的时候,就会重定向到这个文件下
}

// 方案三:实现同一个端口部两套vue项目,通过根路径区分,一个目录名为dist,一个目录名为testWeb,访问/*就是第一个项目,访问/testWeb/*就是第二个项目 ——>前台、后台的方案推荐
location / {

    root   html/dist; // 指向vue目录
    index  index.html index.htm; // index指向 html/dist/index.html文件
    try_files $uri $uri/ /index.html;
}
location /testWeb {

    // 这里的testWeb与4中所配置的路径一致
    alias html/testWeb; // 指向vue目录
    index index.html index.htm; // index指向html/testWeb/index.html文件
    try_files $uri $uri/ /testWeb/index.html; // 当找不到文件的时候,就会重定向到这个文件下
}

除此之外还有很多方案可以任意改动,或者没必要配置两个路径,大多数情况下一个路径就够用了!

==需要注意的就是 root/alias 指定的目录的落脚点一定是和 vue 项目的根目录是同名的!==

例:root html/dist; 那么 vue 项目目录名必须是 dist

alias html/testWeb; 那么 vue 项目目录名必须是 testWeb

try_files 是用来解决 vue 项目在 nginx 部署,刷新 404 的问题(因为文件路径并非真实存在的,需要重定向到页面里)

try_files:当用户请求 localhost/example 时,这里的 root/example (其中 uri/,增加了一个 /,也就是看 有没有名为 /$root/example/ 的目录。 又找不到,就会 fall back 到 try_files 的最后一个选项 /index.html,发起一个内部 “子请求”,也就是相当于 nginx 发起一个 HTTP 请求到 localhost/index.html。

8、测试配置文件nginx -t

9、重启,载入新的配置文件nginx -s reload

10、此时打开 localhost/testWeb 就能看到页面了

tip

  • root 和alias的区别:
    • root的处理结果是:root路径+location路径
    • alias的处理结果是:使用alias路径替换location路径 举个例子:
java
server {

    listen              8081;
    server_name         localhost;
    location /test {

         root   html;  // 此时访问localhost:8081/test 相当于访问 html/test/index.html
         index  index.html index.htm;
    }
    location /test {

        alias    html/; // 此时访问localhost:8081/test 相当于访问 html/index.html
        index  index.html index.htm;
    }
    location /test {

        alias    html/test/; // 此时访问localhost:8081/test 相当于访问 html/test/index.html
        index  index.html index.htm;
    }
}

总结:

其实用 nginx 部署 vue 项目,就是把 vue 项目当成了静态资源。

开发时我们的 vue 项目借助于 node 服务器运行,但是部署时我们的 vue 项目就借助于 nginx 服务器运行(放到 tomcat 部署也是可以的)!