对js模块导入路径毫无影响,import('./utils.js')始终以该js文件自身路径为基准解析,不读取document.baseuri。

JS文件里import('./utils.js')完全不受base控制
<base href="/admin/">对 JS 模块导入路径毫无影响。浏览器解析 import('./utils.js') 时,基准永远是该 JS 文件自身所在路径,不是 document.baseURI。你改了 <base>,utils.js 依然从 /static/app.js 所在目录去加载 ./utils.js,不会跳去 /admin/utils.js。
常见错误现象:app.js 在 /static/app.js,它 import 一个 ./api/client.js,结果 404 —— 实际请求的是 /static/api/client.js,而你误以为 <base href="/admin/"> 会让这个相对路径变成 /admin/api/client.js。
-
import()、import.meta.url、ESM 静态导入全部以模块自身 URL 为基准 -
require('./xxx')(CommonJS)同样不读document.baseURI - 构建工具如 Vite/Webpack 的
resolve.alias或base配置,才真正决定模块解析行为,和 HTML<base>是两套系统
fetch('./data.json')的相对路径也不走base
fetch('./data.json') 发起的请求地址,由当前页面 URL 决定,不是 <base href>。假设页面 URL 是 https://example.com/a/b/page.html,<base href="/c/"> 已设,fetch('./data.json') 仍发向 https://example.com/a/b/data.json,而非 https://example.com/c/data.json。
这是最常被误判的一点:很多人看到 <base> 就以为“所有相对路径都重定向”,但 fetch、XMLHttpRequest、new Worker('./w.js') 全部绕过它。
- 真正受
<base>影响的只有 HTML 解析阶段硬编码的属性值,比如<script src="app.js"></script> -
fetch()是运行时 API,它的相对路径 resolve 规则由 WHATWG URL Standard 定义,基准始终是document.URL - 若需按
base发请求,得显式构造:fetch(new URL('./data.json', document.baseURI))
内联 script 中的字符串 URL 不解析,所以也不受影响
<script>fetch('./api/user')</script> 这种写法,里面的 './api/user' 是纯字符串,浏览器不把它当 URL 解析,自然不触发 <base> 逻辑。它只在 JS 执行时传给 fetch(),而 fetch() 自己按页面 URL 解析。
同理:el.src = 'logo.png'、img.srcset = 'logo-2x.png 2x'、el.style.background = 'url(bg.jpg)' —— 这些全是 JS 字符串赋值,不经过 HTML 解析器,<base> 对它们无效。
-
srcset属性明确不在<base>作用范围内,规范里没列它 - CSS 里的
url()函数在 HTML 加载 CSS 文件时会被解析一次(受<base>影响),但内联 style 里的url()是字符串,不解析 - 想让 JS 动态创建的
<img>受控?得手动用new URL('icon.png', document.baseURI)构造地址
document.baseURI 可用,但别默认它等于当前上下文
document.baseURI 确实返回 <base href> 的值(若存在),但它只是个只读属性,不改变任何运行时行为。很多开发者以为只要用了它,就能“统一路径”,结果发现 fetch() 和 import() 还是不认账。
关键区别在于:HTML 解析器会读 document.baseURI 去 resolve src/href;JS 引擎不会拿它去 resolve 模块或 fetch 地址,除非你显式调用 new URL()。
-
new URL('./data.json', document.baseURI)是安全的,能获得符合<base>意图的绝对 URL - 但
window.location.href、history.pushState()的相对路径,依然以当前页面 URL 为准,和document.baseURI无关 - SPA 路由(Vue Router / React Router)根本不看
document.baseURI,必须显式配置base选项
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











