parcel-plugin-service-worker-manifest

A plugin that injects a manifest of all files generated by Parcel into JavaScript sources.

Usage no npm install needed!

<script type="module">
  import parcelPluginServiceWorkerManifest from 'https://cdn.skypack.dev/parcel-plugin-service-worker-manifest';
</script>

README

Parcel Bundle Manifest Injector

A plugin that injects a manifest of all files generated by Parcel into JavaScript sources. It is intended for use by service workers; especially Workbox based ones.

This plugin only injects a manifest; it leaves the rest up to you.

Caveat: This plugin currently breaks source maps for files that are being injected into.

Usage

  1. Add parcel-plugin-service-worker-manifest as a dependency to your project.

  2. Reference self.__precacheManifest from within your service worker. For example, with Workbox:

    workbox.precaching.precacheAndRoute(self.__precacheManifest);
    
  3. (Optional) If you're in TypeScript, add a reference to this module's ambient type declarations so you don't have red squiggles:

    /// <reference path="../node_modules/parcel-plugin-service-worker-manifest/ambient.d.ts" />
    

Details

This plugin searches for all JavaScript files that include a reference to __precacheManifest, and will the inject that (as a global variable) into the beginning of the file.

Note that it will always exclude source maps, and the file being injected into.

An example injected manifest:

this.__precacheManifest = [
  { url: '/index.html', revision: 'eec2934e19b3ee4edb0e5d75bcc24cfc' },
  { url: '/favicon-32x32.cd79125d.png', revision: '633cb020b11eaa924dd540cfcd79125d' },
  { url: '/vendor.2b3a1d76.js', revision: '8914e4ff066f36cfa8635a292b3a1d76' },
  { url: '/src.8eca73da.js', revision: '3e3f0ca26a367ad6188ed0e88eca73da' }
];

See Also

There are several other Parcel plugins that perform similar behavior: