[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.jsrelative 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/subdirinside 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.jsso that it's used.I tested this locally on a subdirectory project as well as a CDN, where you set
framework.asset.base_urlsto somehttps://cdn.com/type of URL.Cheers!