assetsPublicPath: './',问题
问题篇
最近使用frp代理开发微信vue应用,frp代理不直接暴露根目录,因为我的根目录已经被我的博客占用了,所以就使用nginx又代理了一层,访问方式从越来的
wechat.youngboy.vip 变成 wechat.youngboy.vip/proxy ,在游览器中 / 代表域名的根目录,./代表当前路径
比如:
域名
wechat.youngboy.vip
目录结构
--+ static
-----xx.css
-- app.js
-- index.html
反向代理路径为 /proxy
游览器访问路径为
wechat.youngboy.vip/proxy/index.html 200
html中的src标签
<script src = "/app.js"/> 游览器会发送 wechat.youngboy.vip/app.js 404
<script src = "./app.js"> 游览器访问会发送 wechat.youngboy.vip/proxy/app.js 200
线上发布的时候一般都会使用nginx反向代理,所以使用./是最靠谱的,但是vue-cli dev 中的 assetsPublicPath不能配置成"./",而build中的却可以配置,并可以正常访问,虽然不影响发布但是影响开发效率。
解决篇
翻阅了一下午的webpack文档发现是因为webpack.dev.conf.js 中的publicPath的值配错了,原来配置的是config.dev.assetsPublicPath,只要把publicPath的值改成 "/" 就行了
原因分析
publicPath 总是以斜杠(/)开头和结尾,所以publicPath不能配置为./ 所以访问时会报错
devServer.publicPath 官方解释
数据类型 string
此路径下的打包文件可在浏览器中访问。
假设服务器运行在 http://localhost:8080 并且 output.filename 被设置为 bundle.js。默认 publicPath 是 "/",所以你的包(bundle)可以通过 http://localhost:8080/bundle.js 访问。
可以修改 publicPath,将 bundle 放在一个目录:
publicPath: "/assets/"
1
你的包现在可以通过 http://localhost:8080/assets/bundle.js 访问。
确保 publicPath 总是以斜杠(/)开头和结尾。
也可以使用一个完整的 URL。这是模块热替换所必需的。 这里是重点
publicPath: “http://localhost:8080/assets/”
bundle 可以通过 http://localhost:8080/assets/bundle.js 访问。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?