Skip to content
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

Add asset map to the bundle as a JS module, so that it can be accessed programmatically without extra network requests #141

Open
lolmaus opened this issue Sep 29, 2020 · 1 comment

Comments

@lolmaus
Copy link

lolmaus commented Sep 29, 2020

Hi! Thanks for the infrastructural addon!

Problem

I need to access files over network. With the current implementation of broccoli-asset-map, I have the following options:

  • Disable fingerprinting on specific files. Causes files to be cached, cache does not get busted.
  • Generate a random hash on build, use the same hash on all files, use the know hash to access the files. Idea by @NullVoxPopuli. Causes cache to be busted on all files, including unchanged ones.
  • Use an extra request to load assetMap.json over the network and find out fingerprinted URLs to files.

As you can see, all options are suboptimal.

I ended up using the first one, adding a random query param to bust the cache. This make this option tolerable.

Suggested solution

Making the asset map accessible as part of the JS bundle resolves the issue: we will be able to fetch fingerprinted assets without extra network requests, with cache busted when needed and only when needed.

Could be import { assetMap } from 'broccoli-asset-rev' or something.

Of course, this feature should be opt-in to avoid increasing bundle size for those who don't need it.

CC @simonihmig.

@lolmaus
Copy link
Author

lolmaus commented Sep 29, 2020

I've found this addon: https://github.com/adopted-ember-addons/ember-cli-ifa

It does what I'm asking for, but at the cost of increasing bundle size substantially. It has a service, an initializer, a helper, an util...

I just want to do this, without all the extra weight:

import { assetMap } from 'broccoli-asset-rev';

// e. g. in route model hook:
const url = '/' + assetMap.assets['api/posts/all.json'];
return fetch(url);

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant