You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Relative path images of SASS @import is not supported #540
GET http://localhost:1234/assets/test.jpg 404 (Not Found)
Edit: Sorry for polluting this issue.
I was using parcel-plugin-vue. I removed it and now I'm getting the same problem as @jpuncle with the error Cannot resolve dependency when referencing images from the CSS in the Vue components.
For less I am using .lessrc file in project root with content
{ relativeUrls: true, }
Until I did that (by trial and error), I faced the same issue with relative path to a image. Maybe the same could help you (if there's something like .sassrc)
I think there isn't really a clean way of achieving this. (After looking through the tracking issue on node-sass and some PRs that should help resolve this) @spion probably has the currently best solution to this issue, unfortunately.
Basically we would need similar as resolve-url-loader either to be implemented in node-sass or as a postcss plugin. The resolve-url-loader does resolve the url()'s by looking the files defined in source map. You can see the produced source maps for example by doing a node-sass or ruby-sass build.
@jussikinnula there is a fix for the issue (in this branch https://github.com/spion/parcel) although it's kinda hacky. But nobody has implented it in the master yet.
If anyone wants to, feel free to open a PR with this fix.
SASS currently doesn't support this yet, so this is probably the only way to do this.
is this issue resolved? I'm having the same problem. I tried @mukhammed3's resolution but that doesn't work for me. I also tried using '~' at the beginning of my url but same issue occurs. The compiled url in my css file by sass is the same as if it was in my home.scss file. Here is my folder structure:
as you can see here my styles.css is referencing the background.png like in my home.scss. It works on my page but when I use Parcel it detects the wrong path of my background.png from my css file.
I have a separate compilation step that copies the needed assets to specific locations. I put the correct path in the url('...') but it tries to look for that asset relative to the .scsssource directory.
I'm also running into this issue attempting to import fonts from NPM packages. I can import the SASS file for the font definition, but the paths to the actual font files (woff, ttf, etc) can't be resolved.
@parcel/core: Failed to resolve '../webfonts/fa-regular-400.woff2' from
'./styles/main.scss'
This is rather frustrating. I can include the pre-built CSS files in my index.html like:
But that means I can't do anything to customize the way that file is compiled, such as change $fa-css-prefix or any of the other configurable options this package makes available. And when you include the pre-built CSS file, Parcel has no issue finding those resources and copying them to dist and such, but for SASS it seems to just get lost.
For less I am using .lessrc file in project root with content
{ relativeUrls: true, } Until I did that (by trial and error), I faced the same issue with relative path to a image. Maybe the same could help you (if there's something like .sassrc)
I've found a partial work-around for fonts.
If I try to use:
@import"@fontsource/roboto/400.css";
In Sass, this will fail. It will correctly locate the module that I'm referencing, but it will fail to resolve the paths to all the fonts that this stylesheet uses and it will error out as if it were looking for the fonts in the local directory rather than relative to the module.
However, if I do this in CSS:
@import"npm:@fontsource/roboto/400.css";
It works correctly! Furthermore, if I import my CSS file into my Sass file, it also works just fine. So I created a fonts.css file in which I import all the font modules that I am using, and then I import that in my Sass and everything seems to be working.
I'm not entirely sure if this can be utilized to fix issues that others were having with images, but it goes to demonstrate that Parcel is more than capable of doing this correctly, but for some reason is tripping up in the specific case of Sass imports.
I'm assuming that in this case, it works because it's resolving the entire CSS file first before importing it into Sass. This of course doesn't fully fix the issue, but it does at least let all the CSS get bundled into one file now.
Activity
[-]Relative path images of SASS[/-][+]Relative path images of SASS @import is not supported[/+]breadadams commentedon Jan 20, 2018
Seeing the same issue using vue's
<style lang="css">...</style>within a.vuecomponent.spion commentedon Jan 22, 2018
I have experimental support for relativeUrls for SASS in my fork https://github.com/spion/parcel (by adding "relativeUrls": true in
.sassrc. Its really hacky though due to sass/node-sass#2223Will try submitting a PR once I have tests... but in the meantime, just wondering, anyone has an idea about a better way to do this?
breadadams commentedon Jan 23, 2018
I've been getting around it importing media, ie:
And then inserting those where necessary with js. Not sure if that's of any help @spion
daoket commentedon Feb 28, 2018
try this way
import './main.scss' // main.jsPierBover commentedon Apr 12, 2018
I'm having a similar issue with Vue. Not sure if related to this one.
In my main
index.scssI can use relative URLs just fine. First import inmain.jslike thisimport css from './scss/index.scss';and then this works:However, when trying to do the same from inside a component I cannot get the image to display from CSS.
So this works when trying to reach the image in the template of the Vue component:
But this doesn't work:
And I get this error in the browser:
Edit: Sorry for polluting this issue.
I was using
parcel-plugin-vue. I removed it and now I'm getting the same problem as @jpuncle with the errorCannot resolve dependencywhen referencing images from the CSS in the Vue components.zhiyan commentedon May 21, 2018
I use *.scss file also produce the same problem, the path of image file can not be found correctly
petrmiko commentedon May 23, 2018
For less I am using .lessrc file in project root with content
{ relativeUrls: true, }Until I did that (by trial and error), I faced the same issue with relative path to a image. Maybe the same could help you (if there's something like .sassrc)
DeMoorJasper commentedon May 24, 2018
I think there isn't really a clean way of achieving this. (After looking through the tracking issue on node-sass and some PRs that should help resolve this)
@spion probably has the currently best solution to this issue, unfortunately.
dongyuwei commentedon Sep 20, 2018
@petrmiko thanks .lessrc works for me.
rambo-panda commentedon Oct 29, 2018
like #2199
jussikinnula commentedon Dec 12, 2018
I created an example stating the issue: https://github.com/jussikinnula/sass-url-issue-with-imports
Basically we would need similar as
resolve-url-loadereither to be implemented in node-sass or as a postcss plugin. Theresolve-url-loaderdoes resolve the url()'s by looking the files defined in source map. You can see the produced source maps for example by doing anode-sassorruby-sassbuild.DeMoorJasper commentedon Dec 12, 2018
@jussikinnula there is a fix for the issue (in this branch https://github.com/spion/parcel) although it's kinda hacky. But nobody has implented it in the master yet.
If anyone wants to, feel free to open a PR with this fix.
SASS currently doesn't support this yet, so this is probably the only way to do this.
6 remaining items
mischnic commentedon Apr 11, 2020
We would need to process
url()before SASS is run (similar to https://github.com/bholloway/resolve-url-loader):--no-sourcemaps)elmuccho commentedon Jan 16, 2022
This method helped me
Write inside brackets data-url:
jameandreu commentedon May 27, 2022
is this issue resolved? I'm having the same problem. I tried @mukhammed3's resolution but that doesn't work for me. I also tried using '~' at the beginning of my url but same issue occurs. The compiled url in my css file by sass is the same as if it was in my home.scss file. Here is my folder structure:
as you can see here my styles.css is referencing the background.png like in my home.scss. It works on my page but when I use Parcel it detects the wrong path of my background.png from my css file.
lisapps commentedon Sep 9, 2022
I'm also having this problem and can't tell from this thread if there's a viable work around? Wanting to use self hosted fonts can't be that unusual.
Switched to loading manrope via google fonts. Struggling to load host…
munael commentedon Oct 6, 2022
I'm not even sure what the designed behavior is.
I have a separate compilation step that copies the needed assets to specific locations. I put the correct path in the
url('...')but it tries to look for that asset relative to the.scsssource directory.zeel01 commentedon Jun 19, 2023
I'm also running into this issue attempting to import fonts from NPM packages. I can import the SASS file for the font definition, but the paths to the actual font files (
woff,ttf, etc) can't be resolved.This is rather frustrating. I can include the pre-built CSS files in my
index.htmllike:But that means I can't do anything to customize the way that file is compiled, such as change
$fa-css-prefixor any of the other configurable options this package makes available. And when you include the pre-built CSS file, Parcel has no issue finding those resources and copying them to dist and such, but for SASS it seems to just get lost.gavar commentedon Jul 27, 2023
any updates or workarounds on that? I have the same issue.
haohuaZhang commentedon Aug 4, 2023
Thanks!
zeel01 commentedon Oct 6, 2023
I've found a partial work-around for fonts.
If I try to use:
In Sass, this will fail. It will correctly locate the module that I'm referencing, but it will fail to resolve the paths to all the fonts that this stylesheet uses and it will error out as if it were looking for the fonts in the local directory rather than relative to the module.
However, if I do this in CSS:
It works correctly! Furthermore, if I import my CSS file into my Sass file, it also works just fine. So I created a
fonts.cssfile in which I import all the font modules that I am using, and then I import that in my Sass and everything seems to be working.I'm not entirely sure if this can be utilized to fix issues that others were having with images, but it goes to demonstrate that Parcel is more than capable of doing this correctly, but for some reason is tripping up in the specific case of Sass imports.
I'm assuming that in this case, it works because it's resolving the entire CSS file first before importing it into Sass. This of course doesn't fully fix the issue, but it does at least let all the CSS get bundled into one file now.