如何解析html中的路径得到最终的url呢?
访问http://localhost:3000/dist/index.html
这里的index.html
会通过script
和link
标签导入需要的js
和css
。
<script type="module" crossorigin src="/assets/index-BgnkCtKv.js"></script>
<link rel="stylesheet" crossorigin href="/assets/index-Dm30hxWm.css" />
浏览器解析到这段html时,会发送两个http请求,url为
http://localhost:3000/assets/index-BgnkCtKv.js
http://localhost:3000/assets/index-Dm30hxWm.css
为什么不是
http://localhost:3000/dist/assets/index-BgnkCtKv.js
http://localhost:3000/dist/assets/index-Dm30hxWm.css
如果我将地址改为相对地址的形式./assets...
,得到的url还是没有变化。
我使用serve
这个静态服务器的时候,使用了./assets..
或者assets/..
这种相对地址形式,最终的url
依然为/assets....
。
但是我使用servor
这个静态服务器的时候,被解析为/dist/assets...
。
解析的工作不是在浏览器上进行的吗?和使用什么静态服务器有什么关系?上面的行为让人匪夷所思。
我在stacblitz上复现了该问题
- 执行
npm start
(使用servor
作为服务器),访问/dist/index.html
成功。 - 执行
npm run dev
(使用serve
作为服务器),访问/dist/index.html
报错(/index.css
没不存在)。
src="/assets/index-BgnkCtKv.js">
这种以/
开头的,会使用根目录。即http://localhost:3000
改成这种
assets/index-BgnkCtKv.js"
就会使用相对路径。