前端 JS 经典:vue 开发中的 base 和 publicPath

前言:不知各位小伙伴有没有遇到过这样的问题,就是本地开发的好好的,结果打包后自信满满的交给运维部署,一上线,就是页面资源找不到了,跳转页面白屏了。等各种问题,这大概率就是配置问题。有这么两个配置 base 和 publicPath,在 vue2 和 vue3 的表现形式不同,下面会详细介绍。这两个配置一般影响的是生成环境,对本地开发没啥影响。

1. publicPath

publicPath 影响的是打包后外部资源的获取。

比如:如果配置是 publicPath: "./" 或者 publicPath: "",那么打包后 index.html 里的资源就是引入的相对路径,访问 www.a.com 那它的资源就是在 www.a.com/assets/xxx.js 下,这没问题,但是如果访问的路由 www.a.com/a/b/c,因为是单页项目只有一个 index.html,所以这时资源路径是 www.a.com/a/b/assets/xxx.js,这就不对了,拿不到资源,就报错了。所以我们需要将这个值设置为绝对路径 publicPath: "/"。那么不管路由跳转到哪,资源都是在 www.a.com/assets/xxx.js 下的。

vue2 中配置 vue.config.js,其实是 webpack 的配置。

javascript 复制代码
module.exports = {
  publicPath: "/",
};

vue3 中配置 vite.config.js,其实是 vite 的配置。

javascript 复制代码
import { defineConfig } from "vite";

export default defineConfig(() => {
  return {
    base: "/",
  };
});

2. base

base 影响的是组件匹配。

假如运维将我们的站点部署到一个子目录下。比如 admin 文件夹下。路由匹配组件,线上可能就会有问题。比如我们路由写的 /user,转化成完整路径就是 www.a.com/user 去匹配 User.vue 组件,但是生产上是 www.a.com/admin/user 去匹配 User.vue 组件,那肯定就匹配不上,所以我们需要在 router 配置里面,统一配置下 base: "/admin"。

vue2 中配置 base

javascript 复制代码
import VueRouter from "vue-router";

const router = new VueRouter({
  base: "/admin",
});

vue3 中配置 base 就是配置 createWebHistory() 的第一个参数

javascript 复制代码
import { createRouter, createWebHistory } from "vue-router";

const router = createRouter({
  history: createWebHistory("/admin"),
});

总结:一般这两个值,我们会写在环境变量里,到时候可以直接修改,不更改内部代码。

相关推荐
岳哥i3 小时前
vue鼠标单机复制文本
javascript
jacGJ3 小时前
记录学习--文件读写
java·前端·学习
毕设源码-赖学姐4 小时前
【开题答辩全过程】以 基于WEB的实验室开放式管理系统的设计与实现为例,包含答辩的问题和答案
前端
幻云20104 小时前
Python深度学习:从筑基到登仙
前端·javascript·vue.js·人工智能·python
我即将远走丶或许也能高飞6 小时前
vuex 和 pinia 的学习使用
开发语言·前端·javascript
钟离墨笺6 小时前
Go语言--2go基础-->基本数据类型
开发语言·前端·后端·golang
爱吃泡芙的小白白6 小时前
Vue 3 核心原理与实战:从响应式到企业级应用
前端·javascript·vue.js
卓怡学长7 小时前
m115乐购游戏商城系统
java·前端·数据库·spring boot·spring·游戏
码上成长7 小时前
JavaScript 数组合并性能优化:扩展运算符 vs concat vs 循环 push
开发语言·javascript·ecmascript
老陈聊架构7 小时前
『AI辅助Skill』掌握三大AI设计Skill:前端独立完成产品设计全流程
前端·人工智能·claude·skill