-
Notifications
You must be signed in to change notification settings - Fork 12k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
CSS images with relative path not included in production build #4806
Comments
Heya @arntj, can you do me a favor and verify the image really is broken within you app? For images smaller than 10kb we actually inline them, which is why it wouldn't be copied over. |
Yes, I loaded it in an HTTP server and verified that the image was broken in the web browser. The image I tested it with is 60 kb. |
The production output CSS links to a hashed image file that doesn't exist in the output dir. |
I can verify this happens:
Will investigate. |
This seems to be related with AoT. Workarounds for now:
|
In my case, cause I use
|
This is a little different but maybe related? Under my src directory I have a theme file: ui-framework-theme.css It is referenced in my index.html as |
Fixing component css in angular#4667 uncovered errors in CSS url processing. This PR correctly composes absolute urls when using `--base-href` and/or `--deploy-url`. It also fixes asset output on `--aot` mode. Fix angular#4778 Fix angular#4782 Fix angular#4806
I referenced my images in html like |
@filipesilva Does this affect images in html as well? |
@janwo no, images in html aren't processed at all. |
@filipesilva It would be nice to have the same processing of images referred to from CSS versus HTML. Ideally with the typical webpack processing for both, alternatively disabling asset URL processing for both would be more consistent and easier to understand and explain than the current feature set. Is a move toward one of those things on the roadmap? |
@kylecordes it would be nice if we could have HTML processing on part with CSS processing but I haven't looked into it much. I had a short look at https://github.com/webpack-contrib/html-loader but wasn't too sure of the interactions between image urls and interpolated properties. If someone knows how safe it is, I'd be happy to add it in. |
So if I understand right, the obstacle is: we need to be confident that HTMLLoader (or a fork thereof) applies its usual processing to plain URLs, but leaves any attribute values that look like an Angular expression, unchanged. Here are its test cases: https://github.com/webpack-contrib/html-loader/blob/master/test/loaderTest.js It appears as though there is already a way to pass a config which tells it to ignore expressions that match a pattern: https://github.com/webpack-contrib/html-loader/blob/master/test/loaderTest.js#L68 The example used in the test case tells it to leave expressions that include "{{" untouched. I wonder if that bit of config would be enough for what CLI needs? |
The HTML templates are inherently dynamic, as a result static analysis to determine asset usage is exceedingly error prone. Combine that will the vast multitude of methods to reference assets (and their varying foms) and attempts at HTML template static analysis becomes far more trouble than it's worth. |
@clydin Certainly there will always be cases where a template can be made to referenced an asset that could not be determined statically. But I have applications that have highly numerous assets that are always mentioned statically from HTML templates. Handling those the same way as assets mentioned from CSS would be a great improvement to ergonomics. |
Also related, this person suggests a set of HtmlLoader settings to work with Angular templates: |
Rather than |
@kylecordes I had a preliminary look at I couldn't find how to rewrite absolute urls without processing them though. I had to do that for absolute styles in this bit of code: Do you know of a similar way to do it with html? The root query parameter won't work since afterwards it will process the url. @martinmcwhorter I don't see how that would work. Can you elaborate? |
Something to note from an app design standpoint is that outside actual page content (which will be overwhelming dynamic anyway), css background images and icon fonts (SVG in particular for custom design elements) are a far more flexible alternative to static HTML img elements. |
Yeah it wouldn't be a big problem in image urls on html would always need to be absolute. |
@filipesilva -- I experienced the issue where the images filenames in CSS (actually SCSS if that matters) were being hashed, but the actual image file names were not being hashed on build. To work around this issue I used absolute file names in CSS, example This workaround works for me, though I don't know the internals of Angular-CLI or the webpack config that is used -- so I understand I may be mistaken on the specifics. |
@martinmcwhorter I see now, yeah. Your workaround would work, since you're taking the resource extraction out of the equation. You shouldn't have to do that though... next release it should be ok. |
Yep, I'm looking forward to hashed images :)
…On Wed, 22 Feb 2017, 11:05 Filipe Silva, ***@***.***> wrote:
@martinmcwhorter <https://github.com/martinmcwhorter> I see now, yeah.
Your workaround would work, since you're taking the resource extraction out
of the equation. You shouldn't have to do that though... next release it
should be ok.
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
<#4806 (comment)>,
or mute the thread
<https://github.com/notifications/unsubscribe-auth/ABI5-pZE-2PvKnpnrgKk6EA0bSAO06tLks5rfBZcgaJpZM4MFDL4>
.
|
Fixing component css in angular#4667 uncovered errors in CSS url processing. This PR correctly composes absolute urls when using `--base-href` and/or `--deploy-url`. It also fixes asset output on `--aot` mode. Fix angular#4778 Fix angular#4782 Fix angular#4806
angular/angular-cli#4806 i have to do --no-aot and then deploy to firebase for the image to appear if I don't, then the image does not appear I think this is an issue with cli --aot as described in angular/angular-cli#4806 Signed-off-by: Kushal Hada (developer) <[email protected]>
So is there a way to configure the cli to end up with relative paths in the CSS, e.g. |
Hey guys! I'm new to angular and I'm facing the same problem in my app where the local version works perfectly great whereas the github deployment breaks all the URLs for images. My images are placed in src/assets/xyz.jpg directory and I have tried changing the base href as well as my image url and still the image appears to be broken. I'm using angular 6. Would be really thankful if I get my issue sorted out. Thanks in advance. |
i have this issue too |
No news on this issue? I am seeing the same thing on Angular 6. Building on Unix seems to be broken, but strangely, I never have the issue when building on Windows. Oddly enough, when I reference assets in this fashion:
instead of
it works fine locally, and during my unix production build. |
Similar to @frostbytedata but I'm on Angular 7 and my url still differed slightly to get it working.
Having that preceding forward slash before assets was breaking for me, along with the other method of the url("../../assets/myimage.png") |
Im having to hardwire with an appRootPrefix in environment.ts in order to serve up internationalized language files beneath my assets folder and various sporadic app images off the template or from within the component fed to the template.
and then
or
or
not good for production
|
It worked in my case too. After removing ellipsis, angular7 found this asset in no time. Amazing! Thank you @frostbytedata for sharing this. |
This issue has been automatically locked due to inactivity. Read more about our automatic conversation locking policy. This action has been performed automatically by a bot. |
OS?
Versions.
Repro steps.
The log given by the failure.
Mention any other details that might be useful.
The text was updated successfully, but these errors were encountered: