vue2配置环境变量并且nginx运行成功

news2024/11/25 6:55:48

需求:我在vue项目配置了生产环境和开发环境,之后通过proxy代理的方式把地址转发到真实的服务器地址上用于请求接口,之后把项目打包后上传到nginx上,之后接口报错404,但是本地运行是可以访问的,找了很久终于解决了故此记录下


1.配置环境变量

官方配置环境变量地址:模式和环境变量 | Vue CLI (vuejs.org)

在vue项目根目录下创建俩个文件,当然可以创建更多,比如测试环境等。前面有个.别写漏了

  • .env.development
  • .env.production

.env.development文件

# 指定构建模式
NODE_ENV='development'
VUE_APP_TITLE = '开发测试'
VUE_APP_PROT = 8080
VUE_APP_BASE_API = '/api'
VUE_APP_SERVE ='http://后端的本地运行接口地址'

 .env.production

# 指定构建模式
NODE_ENV='production'
VUE_APP_TITLE = '生产测试'
VUE_APP_PROT = 8006
VUE_APP_BASE_API = '/api'
VUE_APP_SERVE ='http://后端线上的接口地址'

讲解如下:

vue项目默认会有NODE_ENVBASE_URL这俩个环境变量,你自己要配置其他的环境变量的话一定要以VUE_APP_xx开头

NODE_ENV='production'

VUE_APP_TITLE = '生产测试'

VUE_APP_PROT = 8006

VUE_APP_BASE_API = '/api'

VUE_APP_SERVE ='http://域名+端口号'

2.在package.json文件中配置不同环境下运行

dev:这是线下的时候运行环境,使用npm run dev

pro:本地运行线上环境,使用npm run pro

build:打包,默认打包后是线上的环境,也就是运行这个 .env.production文件里的内容

  "scripts": {
    "dev": "vue-cli-service serve --mode development",
    "pro": "vue-cli-service serve --mode production",
    "build": "vue-cli-service build"
  },

环境配置好后启动项目,使用可以看到当前处于什么环境下

    console.log(process.env.NODE_ENV,'模式')

2.1修改接口请求baseURL:

有俩种模式

1.后端配置了跨域,那么前端baseURL直接用后端的服务器地址就行

2.后端没有配置跨域,前端使用VUE_APP_BASE_API,之后让proxy去代理跨域,之后前端打包后在nginx再以VUE_APP_BASE_API这个路径根据反向代理找真实的服务器地址,下面我配置的nginx就是在后端没有配置跨域的情况下前端访问后端接口的配置

const instance = axios.create({
    baseURL:process.env.VUE_APP_SERVE,
    timeout:10000
})

3.配置跨域

在vue.config.js中配置,如果项目没有这个文件就自己创建一个

跨域完整代码如下,如果你前面复制的是我配置的哪些变量,就可以直接复制了,只需要更改

VUE_APP_SERVE这个

  port: Number(process.env.VUE_APP_PROT):这个就是你在本地运行的时候启动的端口号,你写的是8006,那么运行项目后就是06的端口了,但是这边有个问题一直没解决,找了好多种就是解决不了,就是pathRewrite没有生效



const repacePath = "^" + process.env.VUE_APP_BASE_API;
// 基础路径 注意发布之前要先修改这里
module.exports = {
  publicPath: process.env.NODE_ENV === "production" ? "/" : " ",
  transpileDependencies: true,
    devServer: {
    proxy: {
   port:Number(process.env.VUE_APP_PROT),
      [process.env.VUE_APP_BASE_API]: {//以/api之后去请求到真实的服务器地址并且把/api给删除
        pathRewrite: {//匹配到/api后替换为空字符串
          [repacePath]: ''
        },
        target: process.env.VUE_APP_SERVE,//真实服务器地址
        changeOrigin: true //是否代理跨域
      },
    }
  },
}

 这个/api没替换为空字符串但是还是可以请求到服务器的地址

4.打包发布到nginx

1.使用npm run build打包生成dist文件

2.把打包好的dist文件放在nginx的html文件夹下

3.在nginx的conf文件夹下找到nginx.conf

配置如下

主要注意看反向代理,一定要配置这个反向代理,并且这个/prod-api要和VUE_APP_BASE_API一致,如果不一致可能会出现和我一样的404/405、304报错,反向代理写死,只需要改/prod-api,根据你自己的VUE_APP_BASE_API一起更改

server {
    listen 38081;#本地启动的端口号
    server_name  localhost;

      location / {
 
    root  html/webyingyong/dist;     #dist包部署路径
 
    try_files $uri $uri/ /index.html last;
 
    index index.html index.htm;  #访问的index.html文件也就是首页
    }
#反向代理
 
      location /prod-api {
 
    rewrite ^/prod-api/(.*)$ /$1 break;       # /prod-api/ 替换为/,因为后台接口无/prod-api
 
    proxy_pass http://;     #后台接口地址

    proxy_redirect off;

    proxy_set_header Host $host;
 
    proxy_set_header X-Real-IP $remote_addr;
     
    proxy_set_header X-Forwarded-For $remote_addr;
 
    }

    location @router{
 
    rewrite ^.*$ /index.html last;
 
    }
}

server {
	listen 38081;
	server_name  localhost;

      location / {
 
	root  html/webyingyong/dist;     #dist包部署路径
 
	try_files $uri $uri/ /index.html last;
 
	index index.html index.htm;
	}
#反向代理
 
      location /prod-api {
 
	rewrite ^/prod-api/(.*)$ /$1 break;       # /prod-api/ 替换为/,因为后台接口无/prod-api
 
	proxy_pass http://xue.cnkdl.cn:23683;     #后台接口地址
 
	proxy_set_header X-Real-IP $remote_addr;
 	
	proxy_set_header X-Forwarded-For $remote_addr;
 
	}

	location @router{
 
	rewrite ^.*$ /index.html last;
 
	}
}

之后启动nginx就可以了

nginx -s reload

5.打包后路由跳转报错

ChunkLoadError: Loading chunk 549 failed.

找了好多种方法最终解决就是把vue.config,js的publicPath的值重'./'改为'/'

  publicPath: process.env.NODE_ENV === "production" ? "/" : " ",

并且我还加上了个保证打包后编译的文件名称不会重复的output

const path = require("path");
const repacePath = "^" + process.env.VUE_APP_BASE_API;
const timeStamp = new Date().getTime();
// 基础路径 注意发布之前要先修改这里
module.exports = {
  publicPath: process.env.NODE_ENV === "production" ? "/" : "/",
  transpileDependencies: true,
  configureWebpack: config => { // webpack 配置
    if (process.env.NODE_ENV === "production") {
      return {
        output: {
          library: 'myLibrary', // 输出重构  打包编译后的文件名称  【模块名称.时间戳】
          filename: `[name].${timeStamp}.js`,
          libraryTarget: 'umd',
          globalObject: 'this',
        }
      }
    }
  },
  devServer: {
    port: Number(process.env.VUE_APP_PROT),
    proxy: {
      [process.env.VUE_APP_BASE_API]: {
        target: process.env.VUE_APP_SERVE,
        changeOrigin: true,
        pathRewrite: {
          [repacePath]: '' // /prod-api 替换为空
        }
      },
    }
  }
}

最后如果不会nginx的可以看我另外一篇

nginx部署本地启动vue项目_nginx本地运行vue项目_请叫我欧皇i的博客-CSDN博客

文章到此结束,希望对你有所帮助,有不懂的可以留言告诉我,互相学习~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1004157.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

滑动窗口详解

滑动窗口本质其实也是一种双指针算法,只是因为它维护的区间随着遍历的进行在不停变化,所以形象地称为“滑动窗口” 一、⻓度最⼩的⼦数组 题目要求找到满足条件的长度最小的子数组,我们先来想想暴力的做法,再来想想能不能优化&am…

LeetCode 1462. 课程表 IV:拓扑排序

【LetMeFly】1462.课程表 IV:拓扑排序 力扣题目链接:https://leetcode.cn/problems/course-schedule-iv/ 你总共需要上 numCourses 门课,课程编号依次为 0 到 numCourses-1 。你会得到一个数组 prerequisite ,其中 prerequisite…

npm 清缓存(重新安装node-modules)

安装node依赖包的会出现失败的情况,如下图所示: 此时 提示有些依赖树有冲突,根据提示 “ this command with --force or --legacy-peer-deps” 执行命令即可。 具体步骤如下: 1、先删除本地node-modules包 2、删掉page-loacl…

redis实战-redis实现异步秒杀优化

秒杀优化-异步秒杀思路 未优化的思路 当用户发起请求,此时会请求nginx,nginx会访问到tomcat,而tomcat中的程序,会进行串行操作,分成如下几个步骤 1、查询优惠卷 2、判断秒杀库存是否足够 3、查询订单 4、校验是否是一…

vue中如何给特殊字段设置插槽

大纲: <template><div><div><span>卡号</span><el-input type"text" v-model"cardNo" clearable placeholder"请输入卡号" /><el-button type"primary" plain icon"el-icon-search"…

【Python】从入门到上头— 多进程与分布式进程(10)

文章目录 前言一.多进程1.fork()系统调用2.OS模块3.multiprocessing模块4.进程池&#xff08;multiprocessing Pool模块&#xff09;5.子进程&#xff08;subprocess模块&#xff09;6.进程间通信7.小结7.1.学习小结7.2.Python分布式进程报错&#xff1a;pickle模块不能序列化l…

Axure RP 10汉化版下载 Axure RP 10 mac授权码

Axure RP10汉化版是最强大的计划&#xff0c;原型设计和交付给开发人员的方法&#xff0c;而无需编写代码。能够制作逼真的&#xff0c;动态形式的原型。 Axure RP 10汉化版下载 Axure RP 10 mac授权码 RP 10有什么新功能&#xff1f; 1.显示动态面板 使用Axure RP 10&…

【FAQ】安防监控/视频汇聚/云存储/智能视频分析平台EasyCVR显示CPU过载,如何解决?

视频云存储/安防监控/视频汇聚平台EasyCVR基于云边端智能协同&#xff0c;支持海量视频的轻量化接入与汇聚、转码与处理、全网智能分发、视频集中存储等。安防视频监控系统EasyCVR拓展性强&#xff0c;视频能力丰富&#xff0c;具体可实现视频监控直播、视频轮播、视频录像、云…

环境变量与Path环境变量

“环境变量”和“path环境变量”其实是两个东西&#xff0c;这一点大家一定要区分开&#xff0c;不要混为一谈。 “环境变量”是操作系统工作环境设置的一些选项或属性参数。每个环境变量由变量名和文件路径组成的&#xff0c;可以设置很多个环境变量。 我们一般使用环境变量…

把数组b中的值拷贝给数组a numpy.copyto(a,b)

【小白从小学Python、C、Java】 【计算机等级考试500强双证书】 【Python-数据分析】 把数组b中的值拷贝给数组a numpy.copyto(a,b) [太阳]选择题 请问关于以下代码最后输出结果的是&#xff1f; import numpy as np to np.array([1, 2]) print("【显示】to ",to) …

GLTF扩展使用及开发指南

glTF 扩展扩展了基本 glTF 模型格式。 扩展可以引入新的属性&#xff08;包括引用外部数据的属性&#xff0c;并且扩展可以定义这些数据的格式&#xff09;、新的参数语义、保留的 ID 和新的容器格式。 扩展是针对特定版本的 glTF 编写的&#xff0c;并且可能会在更高版本的 gl…

高忆管理:央行利好提振 A股三大指数收红

上证指数日K线图 受央行利好音讯刺激&#xff0c;9月11日A股商场震荡走强&#xff0c;三大指数收红&#xff0c;北上资金日内“去而复返”&#xff0c;由净流出转为净流入。 因为上周末音讯面略显平平&#xff0c;9月11日A股开盘较为分解&#xff0c;三大指数涨跌不一&#x…

518企业年会抽奖软件,支持撤消、轮空缺席弃奖

518抽奖软件简介 518抽奖软件&#xff0c;518我要发&#xff0c;超好用的年会抽奖软件&#xff0c;简约设计风格。 包含文字号码抽奖、照片抽奖两种模式&#xff0c;支持姓名抽奖、号码抽奖、数字抽奖、照片抽奖。(www.518cj.net) 操作入口 主窗口上按 CtrlZ&#xff0c;打开…

Linux入门-网络基础|网络协议|OSI七层模型|TCP/IP五层模型|网络传输基本流程

文章目录 一、网络基础 二、网络协议 1.OSI七层模型 2.TCP/IP五层&#xff08;或四层&#xff09;模型 三、网络传输基本流程 1.网络传输流程图 2.数据包封装和分用 四、网络中的地址管理 1.IP地址 2.MAC地址 一、网络基础 网络发展最初是独立模式&#xff0c;即计算…

系统学习Linux-防火墙(Firewall)

目录 防火墙的作用 防火墙分类 防火墙性能 硬件防火墙 软件防火墙 扩展&#xff1a;Web应用防火墙(WAF) 硬件防火墙与软件防火墙比较 iptables netfilter/iptables功能 iptables概念 iptables工作一句——规则&#xff08;rules&#xff09; iptables中链的概念 i…

【面试必刷TOP101】反转链表 链表内指定区间反转

目录 题目&#xff1a;反转链表_牛客题霸_牛客网 (nowcoder.com) 题目的接口&#xff1a; 解题思路&#xff1a; 代码&#xff1a; 过啦&#xff01;&#xff01;&#xff01; 题目&#xff1a;链表内指定区间反转_牛客题霸_牛客网 (nowcoder.com) 题目的接口&#xff1…

肖sir__mysql之安装__002

mysql之安装 1、rpm -qa|grep mysql 2.删除mysql的方法&#xff1a; 第一种&#xff1a;yum remove mysql * &#xff08;*表示所有&#xff09; 第二种&#xff1a;rpm -e --nodeps 包名 强制删除mysql包 3、删除干净mysql文件&#xff0c;在进行安装 yum install mysql 安装…

MAML在隐式神经表示中的应用

论文 Learned Initializations for Optimizing Coordinate-Based Neural Representations &#x1f383;Abstract1. Introduction2. Related Work3. Overview ⭐4. Results5. Conclusion6. AcknowledgementsA. Implementation details Implicit Neural Representations for Ima…

Linux IO函数

read/write函数&#xff1a; 1.read #include <unistd.h> ssize_t read(int fd, void *buf, size_t count); 参数&#xff1a; -fd&#xff1a;文件描述符&#xff0c;open得到的&#xff0c;通过这个文件描述符操作某个文件 -buf&#xff1a;需要读取数据存放的地方…

3D虚拟情景实训教学系统在法律课堂中的应用

3D虚拟情景实训教学系统是一种基于虚拟现实技术的教育工具&#xff0c;它通过模拟真实的法律场景&#xff0c;让学生能够身临其境地体验法律实践。这种教学方式可以让学生更加深入地理解法律原则和规则&#xff0c;提高他们的法律素养和实践能力。 在传统的法律课堂中&#xff…