0

0

Vue.js 静态资源 404 问题的根源与解决方案

聖光之護

聖光之護

发布时间:2026-01-11 11:39:43

|

739人浏览过

|

来源于php中文网

原创

Vue.js 静态资源 404 问题的根源与解决方案

vue + node.js 应用部署后 js/css 文件返回 404,通常并非服务器路由配置错误,而是 vite 构建时资源路径(`base`)未适配生产环境部署路径所致。

在 Vue(Vite)+ Node.js 全栈项目中,本地开发一切正常但上线后出现 /assets/xxx.js 或 /assets/xxx.css 404 错误,是一个典型且易被忽视的构建配置问题。虽然 Express 的静态文件服务(app.use(express.static(...)))和兜底路由(app.get('*', ...))逻辑完全正确,但关键在于:浏览器请求的资源路径,必须与实际文件在 express.static 托管目录下的可访问路径严格匹配

回顾你 index.html 中的引用:


这里的 /assets/... 是绝对路径,表示从域名根目录(https://yourdomain.com/assets/...)发起请求。而你的 Express 配置是:

app.use(express.static(path.join(__dirname, '../client/dist')));

这意味着 Express 只会响应形如 https://yourdomain.com/assets/xxx.js 的请求——前提是该文件真实存在于 client/dist/assets/ 目录下,且服务器能将 /assets/ 映射到该子路径。

立即学习前端免费学习笔记(深入)”;

问题根源正在于此:Vite 默认以 / 为 base(即所有资源按根路径解析),但若你的应用并非部署在域名根目录(例如部署在子路径如 https://example.com/myapp/),或服务端静态托管路径与前端期望路径存在层级偏差(如 dist 目录本身需被“隐式”作为上下文),则资源请求必然失败。

ARTi.PiCS
ARTi.PiCS

ARTi.PiCS是一款由AI驱动的虚拟头像生产器,可以生成200多个不同风格的酷炫虚拟头像

下载

你最终通过修改 vite.config.js 解决问题:

import { defineConfig } from 'vite';
import vue from '@vitejs/plugin-vue';

export default defineConfig({
  plugins: [vue()],
  base: '/client/dist/' // ✅ 关键修正:让 Vite 构建时生成的资源路径前缀与服务端静态托管路径对齐
});

⚠️ 注意:base: '/client/dist/' 并非推荐做法(它会使 HTML 中资源路径变为 /client/dist/assets/xxx.js,要求服务器在 /client/dist/ 路径下提供静态服务)。更通用、更符合生产实践的方案是:

推荐配置(标准部署场景)
若应用部署在域名根路径(如 https://myapp.com/),且 Express 正确托管 dist 目录,则 base 应设为 '/'(默认值),并确保 index.html 中的资源路径为 /assets/xxx.js —— 这正是你原始代码的状态。此时 404 往往源于:

  • dist 目录未完整上传(尤其 .gitignore 误删了 dist/);
  • 服务器文件权限不足,无法读取 assets/ 下的文件;
  • Nginx/Apache 等反向代理未透传静态请求,或缓存了旧版 index.html。

若必须部署在子路径(如 https://myapp.com/sub/)
则应在 vite.config.js 中设置:

base: '/sub/' // 构建后所有资源路径自动加上 /sub/

同时,Express 需调整静态托管路径(保持 dist 内容不变):

// 仍托管整个 dist 目录,但前端请求会带 /sub/ 前缀
app.use('/sub', express.static(path.join(__dirname, '../client/dist')));
// 兜底路由也需适配
app.get('/sub/*', (req, res) => {
  res.sendFile(path.join(__dirname, '../client/dist/index.html'));
});

? 快速排查清单

  • 检查浏览器开发者工具 Network 标签页:确认 404 请求的真实 URL(如 https://domain.com/assets/xxx.js 还是 https://domain.com/client/dist/assets/xxx.js?);
  • 直接在浏览器访问该 URL,验证文件是否真能被服务器返回(排除路径/权限问题);
  • 运行 ls -la client/dist/assets/ 确认文件存在且非空;
  • 在服务器端临时添加日志,确认 express.static 是否收到请求:
    app.use('/assets', (req, res, next) => {
      console.log('Assets request:', req.url);
      next();
    });
    app.use('/assets', express.static(path.join(__dirname, '../client/dist/assets')));

总结:Vite 的 base 配置是控制构建产物资源路径的“总开关”,它必须与服务端静态文件托管策略协同设计。不要盲目修改 base,而应先明确部署拓扑(根路径 or 子路径?有无反向代理?),再选择最简洁、最符合约定的配置组合。

相关专题

更多
nginx 重启
nginx 重启

nginx重启对于网站的运维来说是非常重要的,根据不同的需求,可以选择简单重启、平滑重启或定时重启等方式。本专题为大家提供nginx重启的相关的文章、下载、课程内容,供大家免费下载体验。

229

2023.07.27

nginx 配置详解
nginx 配置详解

Nginx的配置是指设置和调整Nginx服务器的行为和功能的过程。通过配置文件,可以定义虚拟主机、HTTP请求处理、反向代理、缓存和负载均衡等功能。Nginx的配置语法简洁而强大,允许管理员根据自己的需要进行灵活的调整。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

495

2023.08.04

nginx配置详解
nginx配置详解

NGINX与其他服务类似,因为它具有以特定格式编写的基于文本的配置文件。本专题为大家提供nginx配置相关的文章,大家可以免费学习。

498

2023.08.04

tomcat和nginx有哪些区别
tomcat和nginx有哪些区别

tomcat和nginx的区别:1、应用领域;2、性能;3、功能;4、配置;5、安全性;6、扩展性;7、部署复杂性;8、社区支持;9、成本;10、日志管理。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

227

2024.02.23

nginx报404怎么解决
nginx报404怎么解决

当访问 nginx 网页服务器时遇到 404 错误,表明服务器无法找到请求资源,可以通过以下步骤解决:1. 检查文件是否存在且路径正确;2. 检查文件权限并更改为 644 或 755;3. 检查 nginx 配置,确保根目录设置正确、没有冲突配置等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

332

2024.07.09

Nginx报404错误解决方法
Nginx报404错误解决方法

解决方法:只需要加上这段配置:try_files $uri $uri/ /index.html;即可。想了解更多Nginx的相关内容,可以阅读本专题下面的文章。

3507

2024.08.07

css
css

css是层叠样式表,用来表现HTML或XML等文件样式的计算机语言,不仅可以静态地修饰网页,还可以配合各种脚本语言动态地对网页各元素进行格式化。php中文网还为大家带来html的相关下载资源、相关课程以及相关文章等内容,供大家免费下载使用。

509

2023.06.15

css居中
css居中

css居中:1、通过“margin: 0 auto; text-align: center”实现水平居中;2、通过“display:flex”实现水平居中;3、通过“display:table-cell”和“margin-left”实现居中。本专题为大家提供css居中的相关的文章、下载、课程内容,供大家免费下载体验。

262

2023.07.27

c++主流开发框架汇总
c++主流开发框架汇总

本专题整合了c++开发框架推荐,阅读专题下面的文章了解更多详细内容。

78

2026.01.09

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Sass 教程
Sass 教程

共14课时 | 0.8万人学习

Bootstrap 5教程
Bootstrap 5教程

共46课时 | 2.8万人学习

CSS教程
CSS教程

共754课时 | 18.4万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号