解决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.tsvite.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>
相关推荐
刘卓航众创芯云服务部34 分钟前
Kimi K3复杂任务实测:我把团队最头疼的三个场景全跑了一遍
前端
cll_86924189144 分钟前
一个好看的Wordpress博客文字css样式
前端·css·ui
武子康1 小时前
Shippy:确定性工具、会话级 Sandbox 与 Live-Data Eval(4 类收敛 + 7 步实现方案 + 6 类评测指标)
前端·人工智能·后端
糖果店的幽灵1 小时前
langgraph分支之 - 动态分支(Dynamic Branch)
java·前端·javascript·人工智能·langgraph
小小代码狗1 小时前
SQLi-Labs 基础注入实战教程(Less-1 ~ Less-5and Less-9)
服务器·python·php
慕伏白1 小时前
【慕伏白】Linux 系统如何根据端口号关闭进程
linux·运维·服务器
meilindehuzi_a1 小时前
Workflow 与 Agent 有什么区别:从 LangChain 流水线到智能体决策
前端·人工智能
三翼鸟数字化技术团队1 小时前
一种前端大屏适配方案
前端·css
蓝创工坊Blue Foundry1 小时前
图片文字提取到 Excel:批量任务如何先定义要交付的字段
运维·服务器·开发语言·数据库·自动化·ocr·excel
晚风吹长发1 小时前
Docker使用——Docker容器及相关命令
linux·运维·服务器·docker·容器·架构