-
Notifications
You must be signed in to change notification settings - Fork 12k
--deploy-url will have no effect on the HTML #6666
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
Comments
+1 for this |
@Brocco could we do something like |
This is something I'd like to have if we can find a safe way to do it. For reference, there's some more context in #4517 (comment). |
Any update here? |
how to fix it? |
+1 fix it please! i have an app with different base href and the sass is compiling correctly the routes but not in html link, src, etc |
it's not only inconvenient, the code won't work. |
I'm using ng5 now. My workaround is to add a prefix <img src="{{baseHref}}/assets/sample.png"> |
@timelyxyz thank you so much! this is a possible solution but you need to create a local variable in each component or it is a global variable? |
@timelyxyz this does not work for AOT :( |
This is horrible. |
pipe this plz, 我的手都快加累死了。 |
Best solution for now is to use the background-image css property. The cli will add the base href attribute to this. Also you could define the url in your environments.ts file and import it into your components. |
Workaround until Angular takes the effort to fix, is to add a property to your environment variable, like deployUrl: '/xyz/', then for all 'assets' objects, you can add the following logic in html:
For i18n, I used a custom loader. |
I went through the code of the Ivy rendering engine, compilers and CLI. The main problem is that the I think an AssetUrlVisitor could solve this problem. It should add the route as string concat. That would make The visitor should look for img with src and make the changes to it. Probably there are more scenarios for example src-set for the future. Extension with the visitor would be easy. (Ivy is really great!) The new url config should have a new name, so it could be introduced without breaking changes. E. g. assetUrl. Then in later versions could be merged with deployUrl. The policy how to change the links could be the same as the algorithm made by webpack, for the best consistency. |
@clydin is it possible to configure the APP_BASE_HREF from the angular.json file? |
Is there any way to decouple That way for the browser, it could respect the HTML tag for all relative static assets, lazy-loaded chunks, etc <base href="http://www.somecdn.com/"/> But for Angular router, configuring the provider to have it respect a different "root" so routing doesn't break, based on what is in the user's URL bar ex: providers: [
{
provide: APP_BASE_HREF, useValue: `/` // or even `${window.location.origin}/`
}
] In this way, we can use a CDN for all our lazy chunks assets, but not breaking routing, which would be URL / hostname based. So just curious to know from the maintainer's point of view, if there is a way forward through some sort of enhancement to Angular and / or the CLI (whether it's this idea or something completely different)? If so, I would be happy to take a look into implementing such a feature, opening an issue for discussion, and contributing. Just want to make sure there is a path forward and would then be happy to put some time into working on it. Thanks! |
Here's my workaround: declare const __webpack_public_path__: string;
export function deployUrl(url: string): string {
let publicPath = __webpack_public_path__;
if (!publicPath.endsWith('/')) {
publicPath += '/';
}
if (url.startsWith('/')) {
url = url.slice(1);
}
return `${publicPath}${url}`;
} In component: @Component({...})
export class MyComponent {
deployUrl = deployurl;
} In template: <img [src]="deployUrl('assets/image.png')"/> |
As there is an awful lot of confusion around
/cc @aikidave for visibility. |
Copied from my STACKOVERFLOW answer. Its a very annoying problem: Here is how I solve it: When your app is for e.g. hosted under
Hope this helps and saves some grey hair, couse it only looks good on George Clooney. |
@andreElrico that does not seem to work if you are using routing |
@CaselIT have not tried it with routing. |
The problem of not being to add cache-busting hash to images used in Angular templates is a production issue many are dealing with. I understand that this is out of scope for the CLI team at the moment, but I have seen some workarounds. I will try to summarize what i've seen so far. If you want image cache-busting / fingerprinting you have these options:
I think it will be very helpful for the community if we had a "blessed" workaround for this from the cli team and get their view on this. Ideally added to the official cookbook/recipe/docs Thank you |
@filipesilva I want to second @mderazon idea about having a "blessed" solution for this. It seems like the community is wasting a lot of time on something that is pretty common. I'd be willing to help with a solution, but I think we are looking to you guys for a little direction as to what you think should be done or info if you are already working on something. |
I don't know if it is the same issue, because I use command --base-href of Angular. I used the \ before the assets like this: And this worked perfectly for me. |
This is really annoying. The |
Also guys, someone tried this with angular-universal? If I use:
Also the url set to the assets seems to be wrong..
|
According to #6666 (comment) in this thread. I tried building the app using:
and then in the app module to change the router base href:
This works fine for my scenario where I am serving the index.html in a different url and the assets from a cdn. |
With this change we deprecate deployUrl which in many case causes unexpected and undesired behaviour. Such as #12322, #21432 and #6666. This is because one of the drawbacks of deploy Url is that this url needs to be injected all over the bundles. This option was previously introduced to handle application that only assets are hosted on a CDN. This setup is now mostly considered as legacy as it is recommended that the entire application is hosted on a CDN. That said, this legacy behaviour can still be achieved by setting the `baseHref` to the CDN address, while setting the `APP_BASE_HREF` to the application address. Closes #12322 and closes #6666
Did you manage to solve it? I have the same thing, it doesn't result in any app misbehaviour but it does bug me a bit. |
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. |
Bug Report or Feature Request (mark with an
x
)Versions.
@angular/cli: 1.0.1
node: 8.0.0
os: darwin x64
@angular/animations: 4.1.3
@angular/common: 4.1.3
@angular/compiler: 4.1.3
@angular/core: 4.1.3
@angular/forms: 4.1.3
@angular/http: 4.1.3
@angular/material: 2.0.0-beta.6
@angular/platform-browser: 4.1.3
@angular/platform-browser-dynamic: 4.1.3
@angular/router: 4.1.3
@angular/cli: 1.0.1
@angular/compiler-cli: 4.1.3
Repro steps.
Related to #4517 (comment)
The log given by the failure.
Desired functionality.
The CLI transform the HTML as well
Mention any other details that might be useful.
I am using
S3
on AWS this is kind of required for me unless I usedCloudFront
, I think.The text was updated successfully, but these errors were encountered: