解决vite打包,base配置前缀,nginx的dist包找不到资源

nginx配置代理:

location /pet {

alias /usr/local/src/pet/dist/;

#默认首页

index index.html;

try_files uri uri/ /pet/index.html =404;

}

dist包确定在**/usr/local/src/pet/**正常目录下:

出现异常:访问地址后控制台输出 ,net::ERR_ABORTED 404 (Not Found)

发现是资源指向错误:正常应该是从/pet/assets/下寻找资源,说明:

"/pet/"没有打上包。

前端配置:

javascript 复制代码
import {defineConfig, loadEnv} from 'vite'
import vue from '@vitejs/plugin-vue'
import {resolve} from 'path'

// https://vite.dev/config/
export default defineConfig(({mode}) => {
    // 加载环境变量
    const env = loadEnv(mode, process.cwd())
    return {
        base: env.VITE_PET_BASE_URL || '/pet/',
        plugins: [vue()],
        resolve: {
            alias: {
                '@': resolve(__dirname, 'src')
            }
        },
        server: {
            port: 10099,
            proxy: {
                [env.VITE_PET_API_BASE_URL]: {
                    target: env.VITE_API_SERVER || 'http://localhost:8899',
                    changeOrigin: true,
                    rewrite: (path) => path.replace(new RegExp(`^${env.VITE_PET_API_BASE_URL}`), '')
                }
            }
        }
    }
})

配置都没有问题,但是打包还是没有前缀:

html 复制代码
<!doctype html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <link rel="icon" type="image/svg+xml" href="/pet/favicon.svg" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>pet-paradise</title>
    <script type="module" crossorigin src="/assets/index-DwyNYriF.js"></script>
    <link rel="stylesheet" crossorigin href="/assets/index-C_2ZWPNu.css">
  </head>
  <body>
    <div id="app"></div>
  </body>
</html>

罪魁祸首:项目里同时存在 vite.config.ts 和 vite.config.js 两个配置文件!

原因:

  • 之前一直在改 vite.config.js,但 Vite 实际加载的是 vite.config.ts(TS 优先级更高)
  • 所以改的 .js 文件完全不生效 ,打包一直用的是旧的 .ts 配置
  • 当把 vite.config.js 删除后,Vite 才被迫去读你改好的配置,打包立刻正常了!

并没有加入js,是什么来的呢vite.config.js这个文件?

原因:

项目是 TypeScript + Vue 项目

执行打包时:

复制代码
"build:test": "vue-tsc -b && vite build --mode test"

这里的 vue-tsc -b 作用是:把项目里所有 .ts 文件编译成 .js 文件

包括:

复制代码
vite.config.ts

自动编译生成

复制代码
vite.config.js

导致:

  • 有 2 个配置文件

    • vite.config.ts(原始文件)
    • vite.config.js(编译后自动生成)
  • Vite 优先读取 .ts,不读 .js

  • 改了 .js → 完全没用

  • 真正生效的是 .ts

最终:

html 复制代码
<!doctype html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <link rel="icon" type="image/svg+xml" href="/pet/favicon.svg" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>pet-paradise</title>
    <script type="module" crossorigin src="/pet/assets/index-DwyNYriF.js"></script>
    <link rel="stylesheet" crossorigin href="/pet/assets/index-C_2ZWPNu.css">
  </head>
  <body>
    <div id="app"></div>
  </body>
</html>
相关推荐
白山编程大哥12 小时前
Java 后端如何优雅地把 List 集合返回给前端
java·前端·list
Flynt13 小时前
我把热榜那篇"禁用 axios"逐条实测了一遍:结论大体对,坑在它没讲的地方
前端·javascript·axios
云边云科技_云网融合13 小时前
连锁门店组网怎么做?SD-WAN 多分支组网的架构选型、部署与成本结构
服务器·数据库·php
网络小江13 小时前
组网第35课:静态路由——下一跳、出接口、默认路由、浮动静态与黑洞路由
服务器·网络·默认路由·黑洞路由·浮动静态路由
Csvn14 小时前
bundle优化
前端
北冥有鱼14 小时前
发版后动态路由点击报 `Failed to fetch dynamically imported module`」问题上的完整排查与修复过程
前端·vue.js
静默回滚14 小时前
视频压到 25 MB 以内,码率要算、音轨要扣、余量要留
前端
叼烟扛炮14 小时前
Linux 学习笔记(三十三):线程互斥——互斥锁(Mutex)与死锁
linux·运维·服务器·笔记·学习·1024程序员节
用户372037492601814 小时前
把 10MB 中文语义模型塞进浏览器:STSB 做到教师模型的 93%,但线上 top1 只有 42%
前端
光锥智能14 小时前
海康机器人举行2026移动机器人新品发布会:箱式存拣升级,「明智」系列发布
java·前端·机器人