[AssetMapper] If assets are served from a subdirectory or CDN, also adjust importmap keys #52519
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Hi!
Subdirectories & CDN paths are tricky. Suppose you have:
When we see that relative import to
foo.js
, we automatically add an entry in theimportmap
- e.g.:So, when the browser downloads
/assets/app-abcd1234diegest.js
, it follows the./foo.js
relative path to resolve to/assets/foo.js
. It then sees that key in theimportmap
, and downloads the final file.However, suppose you're under a subdirectory so that the browser downloads
/subdir/assets/app-abcd1234diegest.js
. In that case, it will resolve the relative import to/subdir/assets/foo.js
. And so, the key in the importmap also needs to have the/subdir
inside of it.Additionally, for a CDN, if the browser downloads
https://cdn.com/assets/app.js
, then it will resolve the import tohttps://cdn.com/assets/bar.js
. If the key in the importmap is/assets/bar.js
, that will NOT be used, as this is interpreted as the URL of the site - e.g.https://myfrontendsite.com/assets/bar.js
. So even in this case, the key needs to be the fullhttps://cdn.com/assets/bar.js
so that it's used.I tested this locally on a subdirectory project as well as a CDN, where you set
framework.asset.base_urls
to somehttps://cdn.com/
type of URL.Cheers!