在vue cli官方文档(https://cli.vuejs.org/zh/guide/html-and-static-assets.html#%E4%BB%8E%E7%9B%B8%E5%AF%B9%E8%B7%AF%E5%BE%84%E5%AF%BC%E5%85%A5)中已经明确说明:
-
如果 URL 是一个绝对路径 (例如
/images/foo.png
),它将会被保留不变。
然后我在css中使用:background-image: url("/assets/img/bg.jpg");
还是报错:
Syntax Error: HookWebpackError: Cannot find module '/assets/img/bg.jpg'
-- inner error --
Error: Cannot find module '/assets/img/bg.jpg'
查看css-loader的官方文档:https://github.com/webpack-contrib/css-loader
里面有个参数url可以设置,于是修改vue.config.js,添加内容:
css: {
loaderOptions: {
css: {
url: {
filter: (url, resourcePath) => {
if (url.startsWith('/') || url.startsWith('http:') || url.startsWith('https:')) {
return false
}
return true
}
}
}
}
},
问题得到解决
然而,并不推荐这样做,因为vue.config.js还有两个参数publicPath和assetsDir,这两个参数决定了资源文件的位置,如果项目不是部署在根目录,那么资源文件路径就会出错