Appearance
使用Tauri2.x版本开发请不要使用ant-design-vue4.x版本
最近开发桌面保存密码的这个程序已经到了尾声,先是打包以后接口请求不到,参考这篇文章:。
解决完进入到系统内又发现了新问题,所有的样式全部都丢失了。准确的说是ant-design的样式都丢失了,自己写的还在。
一开始考虑是tauri2.0版本打包的问题,但是使用npm run tauri build
打包的时候,其实执行的npm run build
先对前端进行了打包,打包完成的dist
程序并没有什么问题。
使用http-server
在本地简单看了一下,可以说是一点儿瑕疵也没有。并且使用npm run tauri dev
运行程序也没有任何问题。
但是之前使用Tauri1.x版本 + ant-design-vue3.x版本开发并没有这种异常,所以考虑两个方面:
- tauri2.x版本打包可能存在特殊配置
- ant-design-vue4.x版本打包存在问题
但是如上所述,执行npm run tauri build
打包出来的前端代码是没问题的,遂考虑是ant-design版本的问题。
仔细翻阅官网看到 v3版本 到 v4版本 最重大的一个升级就是原本的 less 样式升级到的 CSS-in-JS,原本的样式文件都被合并进了Js文件中。
问题明确了:
- 在 Tauri 构建后,CSS-in-JS 的样式 没有被正确注入到 DOM 中。
- 开发模式(vite dev)中一切正常,因为 CSS-in-JS 的运行时环境是完整的。
- dist下正常是因为部署在 HTTP 服务器上,CSS-in-JS 运行环境完整。
- Tauri 构建后运行在 file:// 协议下,某些 CSS-in-JS 的运行时行为可能受限或失败。
所以解决问题的思路就应该是禁用CSS-in-JS。
但是尝试了非常多的方案均无效,包括使用@ant-design/cssinjs
,或者是官网推荐的unplugin-vue-components
。
最后无奈只能回退到ant-design-vue3.x
版本,仍然使用原本的样式引入,问题解决。
Ps: 兄弟们如果有好的方案可以留言解决一下这个问题,非常感谢。