worker-with-import-map
Version:
Use importmaps in a worker interface
70 lines (48 loc) • 1.81 kB
Markdown
# Install
```sh
npm i worker-with-import-map
```
# Specification
See https://github.com/WICG/import-maps/issues/2
# Two available polyfill classes
1) **WorkerWithImportMapViaInlineFrame**: Enabling [importmaps](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/script/type/importmap) in [web workers](https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API) via [iframes](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/iframe) as workers.
2) **WorkerWithImportMapViaBedfordsShim**: Same polyfill idea, but using @guybedford's ESM shim inside a normal `Worker`.
# Usage
**test.html**
```html
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Test</title>
<script type="importmap">{"imports": {
"worker-with-import-map": "./node_modules/worker-with-import-map/src/index.js"
}}</script>
<script type="module" src="test.js"></script>
</head>
</html>
```
**test.js**
```js
import {Worker} from 'worker-with-import-map';
const worker = new Worker('./worker-script.js');
worker.postMessage({hello: 'ping'});
```
**worker-script.js**
```js
// Here you can import anything you want now with import map support!
import {funny} from 'one-of-your-fancy-libs';
self.onmessage = (e) => {
const haiToo = funny('pong');
self.postMessage({haiToo});
}
```
This works in client and server, buildless (aka no build tools like `rollup` or `Webpack` required).
Please just clone this repo and test:
- http://127.0.0.1/worker-with-import-map/test/test.html
That will give you a better picture with non-trivial code and showing off how you can re-use your importmap too.
# Development
Just test it and report feedback, if you feel like it.
# Have?
Fun!