vue.js - 在 Vue 上构建产品后更改 css 中的 url 路径
问题描述
我将我的应用程序托管在子域前:https : //www.example.com/subdomain/app/ 并且在 scss 文件中我有一些字体
font-family: 'Gibson'
src: url('/static/fonts/gibson/regular/gibson-regular-webfont.woff2') format('woff2'),
url('/static/fonts/gibson/regular/gibson-regular-webfont.woff') format('woff')
font-weight: 400
font-style: normal
它适用于我的开发环境 localhost:8000/ 但在我的生产环境(例如:https://www.example.com/subdomain/app/)上它无法加载字体,因为它试图在https上搜索文件夹路径://www.example.com/static/etc ...
html索引样式是
<link href="/access/app/inside/static/css/app.css" rel="preload" as="style">
而我的app.css仍然指向
@charset "UTF-8";
@font-face{
font-family:Gibson;
src:url(/static/fonts/gibson/bold/gibson-bold-webfont.woff2)format("woff2")
我不知道这是否可能,或者是否存在在 Vuejs 上管理它的方法。是否可以在构建时更改此 css 路径?我找不到解决方案。谢谢!
解决方案
您可以使用 sass 和 webpack 进行设置,以使用插件或通过一些自定义函数根据环境变量更改路径。但我认为最简单的方法是使用默认功能,例如将字体放在资产文件夹中,然后当您从那里引用它们时,解析器会自动解析。
更新 1
在一个新的 vue-cli (v3.4.1) 生成的应用程序中,我将一个字体文件添加到他的assets
文件夹中。然后将这个 scss(应该与 sass 类似)添加到App.vue
- 链接是相对于应用程序的
<style lang="scss">
@font-face {
font-family: 'Gibson';
src: url('./assets/Gibson-Regular.ttf') format('truetype');
font-weight: 400;
font-style: normal;
}
#app {
font-family: 'Gibson';
}
无论我使用开发服务器运行应用程序,还是提供构建的 dist 文件夹(作为根或嵌套),它都有效
更新 2
如果publicPath
不起作用,很可能是因为您在 css 中使用了绝对路径。从路径中删除主角/
src:url(/static/fonts/gibson/bold/gibson.....
会断
使用
src:url(@/src/static/fonts/gibson/bold/gibson...
或您需要的任何相对路径
并将您的设置publicPath
为/subdomain/app
推荐阅读
- subset - 在合金中获取签名子集
- c# - .NET Standard 中 JsonSerializer.SerializeToUtf8Bytes 的替代方案
- microsoft-graph-api - 为机器人重用 App Id 是好主意还是坏主意?
- apache-camel - Camel 3 - deadLetterChannel 的动态 uri
- angular - 有没有办法在方法中转换主题订阅以返回值
- javascript - React 道具更新是否足够快速和一致,以保持稳定的节奏并在音乐应用中触发音符?
- sql-server - 有没有办法在不使用 SQL 探查器的情况下查看 SQL 调用的来源?
- javascript - 在按钮单击中调用另一个函数只是返回空
- python - 有没有办法为大型数据集优化这个循环?
- groovy - 一步一步在groovysh中调试groovy代码