diff --git a/.changeset/curly-eels-watch.md b/.changeset/curly-eels-watch.md new file mode 100644 index 00000000..1ae292be --- /dev/null +++ b/.changeset/curly-eels-watch.md @@ -0,0 +1,5 @@ +--- +'microbundle': minor +--- + +- Add support for Module Workers with a new `--workers` flag diff --git a/README.md b/README.md index 42d786cc..b1712fa2 100644 --- a/README.md +++ b/README.md @@ -253,6 +253,26 @@ This can be customized by passing the command line argument `--css-modules "[nam | true | import './my-file.css'; | :white_check_mark: | | true | import './my-file.module.css'; | :white_check_mark: | +### Building Module Workers + +Microbundle is able to detect and bundle Module Workers when generating bundles in the +`es`, `umd` and `modern` formats. To use this feature, instantiate your Web Worker as follows: + +```js +worker = new Worker(new URL('./worker.js', import.meta.url), { type: 'module' }); +// or simply: +worker = new Worker('./worker.js', { type: 'module' }); +``` + +... then add the `--workers` flag to your build command: + +```bash +microbundle --workers +``` + +For more information see +[@surma/rollup-plugin-off-main-thread](https://github.com/surma/rollup-plugin-off-main-thread#config). + ### Mangling Properties To achieve the smallest possible bundle size, libraries often wish to rename internal object properties or class members to smaller names - transforming `this._internalIdValue` to `this._i`. Microbundle doesn't do this by default, however it can be enabled by creating a `mangle.json` file (or a `"mangle"` property in your package.json). Within that file, you can specify a regular expression pattern to control which properties should be mangled. For example: to mangle all property names beginning an underscore: @@ -316,6 +336,7 @@ Options --generateTypes Whether or not to generate types, if `types` or `typings` is set in `package.json` then it will default to be `true` --css Where to output CSS: "inline" or "external" (default: "external") --css-modules Configures .css to be treated as modules (default: null) + --workers Bundle module workers - see https://git.io/J3oSF (default false) -h, --help Displays this message Examples diff --git a/package-lock.json b/package-lock.json index b554eb0e..b9ec265b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,11 +1,11 @@ { "name": "microbundle", - "version": "0.13.1", + "version": "0.13.3", "lockfileVersion": 2, "requires": true, "packages": { "": { - "version": "0.13.1", + "version": "0.13.3", "license": "MIT", "dependencies": { "@babel/core": "^7.12.10", @@ -23,6 +23,7 @@ "@rollup/plugin-commonjs": "^17.0.0", "@rollup/plugin-json": "^4.1.0", "@rollup/plugin-node-resolve": "^11.0.1", + "@surma/rollup-plugin-off-main-thread": "^2.2.2", "asyncro": "^3.0.0", "autoprefixer": "^10.1.0", "babel-plugin-macros": "^3.0.1", @@ -3265,6 +3266,16 @@ "@sinonjs/commons": "^1.7.0" } }, + "node_modules/@surma/rollup-plugin-off-main-thread": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/@surma/rollup-plugin-off-main-thread/-/rollup-plugin-off-main-thread-2.2.2.tgz", + "integrity": "sha512-dOD6nGZ79RmWKDRQuC7SOGXMvDkkLwBogu+epfVFMKiy2kOUtLZkb8wV/ettuMt37YJAJKYCKUmxSbZL2LkUQg==", + "dependencies": { + "ejs": "^3.1.6", + "json5": "^2.2.0", + "magic-string": "^0.25.0" + } + }, "node_modules/@types/babel__core": { "version": "7.1.12", "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.12.tgz", @@ -3748,6 +3759,11 @@ "node": ">=4" } }, + "node_modules/async": { + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/async/-/async-0.9.2.tgz", + "integrity": "sha1-rqdNXmHB+JlhO/ZL2mbUx48v0X0=" + }, "node_modules/async-each": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", @@ -5924,6 +5940,20 @@ "safer-buffer": "^2.1.0" } }, + "node_modules/ejs": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.6.tgz", + "integrity": "sha512-9lt9Zse4hPucPkoP7FHDF0LQAlGyF9JVpnClFLFH3aSSbxmyoqINRpp/9wePWJTUl4KOQwRL72Iw3InHPDkoGw==", + "dependencies": { + "jake": "^10.6.1" + }, + "bin": { + "ejs": "bin/cli.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/electron-to-chromium": { "version": "1.3.496", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.496.tgz", @@ -7103,6 +7133,14 @@ "node": "^10.12.0 || >=12.0.0" } }, + "node_modules/filelist": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.2.tgz", + "integrity": "sha512-z7O0IS8Plc39rTCq6i6iHxk43duYOn8uFJiWSewIq0Bww1RNybVHSCjahmcC87ZqAm4OTvFzlzeGu3XAzG1ctQ==", + "dependencies": { + "minimatch": "^3.0.4" + } + }, "node_modules/filesize": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/filesize/-/filesize-6.1.0.tgz", @@ -8547,6 +8585,23 @@ "node": ">=8" } }, + "node_modules/jake": { + "version": "10.8.2", + "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.2.tgz", + "integrity": "sha512-eLpKyrfG3mzvGE2Du8VoPbeSkRry093+tyNjdYaBbJS9v17knImYGNXQCUV0gLxQtF82m3E8iRb/wdSQZLoq7A==", + "dependencies": { + "async": "0.9.x", + "chalk": "^2.4.2", + "filelist": "^1.0.1", + "minimatch": "^3.0.4" + }, + "bin": { + "jake": "bin/cli.js" + }, + "engines": { + "node": "*" + } + }, "node_modules/jest": { "version": "26.6.3", "resolved": "https://registry.npmjs.org/jest/-/jest-26.6.3.tgz", @@ -10545,9 +10600,9 @@ "dev": true }, "node_modules/json5": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz", - "integrity": "sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", + "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", "dependencies": { "minimist": "^1.2.5" }, @@ -20331,6 +20386,16 @@ "@sinonjs/commons": "^1.7.0" } }, + "@surma/rollup-plugin-off-main-thread": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/@surma/rollup-plugin-off-main-thread/-/rollup-plugin-off-main-thread-2.2.2.tgz", + "integrity": "sha512-dOD6nGZ79RmWKDRQuC7SOGXMvDkkLwBogu+epfVFMKiy2kOUtLZkb8wV/ettuMt37YJAJKYCKUmxSbZL2LkUQg==", + "requires": { + "ejs": "^3.1.6", + "json5": "^2.2.0", + "magic-string": "^0.25.0" + } + }, "@types/babel__core": { "version": "7.1.12", "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.12.tgz", @@ -20745,6 +20810,11 @@ "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", "dev": true }, + "async": { + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/async/-/async-0.9.2.tgz", + "integrity": "sha1-rqdNXmHB+JlhO/ZL2mbUx48v0X0=" + }, "async-each": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", @@ -22520,6 +22590,14 @@ "safer-buffer": "^2.1.0" } }, + "ejs": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.6.tgz", + "integrity": "sha512-9lt9Zse4hPucPkoP7FHDF0LQAlGyF9JVpnClFLFH3aSSbxmyoqINRpp/9wePWJTUl4KOQwRL72Iw3InHPDkoGw==", + "requires": { + "jake": "^10.6.1" + } + }, "electron-to-chromium": { "version": "1.3.496", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.496.tgz", @@ -23458,6 +23536,14 @@ "flat-cache": "^3.0.4" } }, + "filelist": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.2.tgz", + "integrity": "sha512-z7O0IS8Plc39rTCq6i6iHxk43duYOn8uFJiWSewIq0Bww1RNybVHSCjahmcC87ZqAm4OTvFzlzeGu3XAzG1ctQ==", + "requires": { + "minimatch": "^3.0.4" + } + }, "filesize": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/filesize/-/filesize-6.1.0.tgz", @@ -24603,6 +24689,17 @@ "istanbul-lib-report": "^3.0.0" } }, + "jake": { + "version": "10.8.2", + "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.2.tgz", + "integrity": "sha512-eLpKyrfG3mzvGE2Du8VoPbeSkRry093+tyNjdYaBbJS9v17knImYGNXQCUV0gLxQtF82m3E8iRb/wdSQZLoq7A==", + "requires": { + "async": "0.9.x", + "chalk": "^2.4.2", + "filelist": "^1.0.1", + "minimatch": "^3.0.4" + } + }, "jest": { "version": "26.6.3", "resolved": "https://registry.npmjs.org/jest/-/jest-26.6.3.tgz", @@ -26195,9 +26292,9 @@ "dev": true }, "json5": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz", - "integrity": "sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", + "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", "requires": { "minimist": "^1.2.5" } diff --git a/package.json b/package.json index 95a55247..a335cd82 100644 --- a/package.json +++ b/package.json @@ -88,6 +88,7 @@ "@rollup/plugin-commonjs": "^17.0.0", "@rollup/plugin-json": "^4.1.0", "@rollup/plugin-node-resolve": "^11.0.1", + "@surma/rollup-plugin-off-main-thread": "^2.2.2", "asyncro": "^3.0.0", "autoprefixer": "^10.1.0", "babel-plugin-macros": "^3.0.1", diff --git a/src/index.js b/src/index.js index 47448a08..c46b83a0 100644 --- a/src/index.js +++ b/src/index.js @@ -18,6 +18,7 @@ import alias from '@rollup/plugin-alias'; import postcss from 'rollup-plugin-postcss'; import typescript from 'rollup-plugin-typescript2'; import json from '@rollup/plugin-json'; +import OMT from '@surma/rollup-plugin-off-main-thread'; import logError from './log-error'; import { isDir, isFile, stdout, isTruthy, removeScope } from './utils'; import { getSizeInfo } from './lib/compressed-size'; @@ -389,6 +390,8 @@ function createConfig(options, entry, format, writeMeta) { options.generateTypes == null ? !!(pkg.types || pkg.typings) : options.generateTypes; + const useWorkerLoader = options.workers !== false; + const escapeStringExternals = ext => ext instanceof RegExp ? ext.source : escapeStringRegexp(ext); const externalPredicate = new RegExp( @@ -427,7 +430,7 @@ function createConfig(options, entry, format, writeMeta) { let config = { /** @type {import('rollup').InputOptions} */ inputOptions: { - // disable Rollup's cache for the modern build to prevent re-use of legacy transpiled modules: + // disable Rollup's cache for modern builds to prevent re-use of legacy transpiled modules: cache, input: entry, external: id => { @@ -616,6 +619,9 @@ function createConfig(options, entry, format, writeMeta) { }, }, ], + // NOTE: OMT only works with amd and esm + // Source: https://github.com/surma/rollup-plugin-off-main-thread#config + useWorkerLoader && (format === 'es' || modern) && OMT(), /** @type {import('rollup').Plugin} */ ({ name: 'postprocessing', diff --git a/src/prog.js b/src/prog.js index 10fd9b8d..e07a7d66 100644 --- a/src/prog.js +++ b/src/prog.js @@ -57,6 +57,11 @@ export default handler => { .option('--cwd', 'Use an alternative working directory', '.') .option('--sourcemap', 'Generate source map') .option('--css', 'Where to output CSS: "inline" or "external"', 'external') + .option( + '--workers', + 'Bundle module workers - see https://git.io/J3oSF', + false, + ) .option( '--css-modules', 'Turns on css-modules for all .css imports. Passing a string will override the scopeName. eg --css-modules="_[hash]"', diff --git a/test/__snapshots__/index.test.js.snap b/test/__snapshots__/index.test.js.snap index e70c9176..36a89342 100644 --- a/test/__snapshots__/index.test.js.snap +++ b/test/__snapshots__/index.test.js.snap @@ -3016,3 +3016,63 @@ exports[`fixtures build ts-module with microbundle 7`] = ` //# sourceMappingURL=ts-module.umd.js.map " `; + +exports[`fixtures build worker-loader with microbundle 1`] = ` +"Used script: microbundle -f modern,es --workers + +Directory tree: + +worker-loader + dist + worker-35b22e56.js + worker-35b22e56.js.map + worker-7e1b9921.js + worker-7e1b9921.js.map + worker-loader.esm.js + worker-loader.esm.js.map + worker-loader.modern.js + worker-loader.modern.js.map + package-lock.json + package.json + src + bar.js + index.js + worker.js + + +Build \\"workerLoader\\" to dist: +140 B: worker-loader.modern.js.gz +112 B: worker-loader.modern.js.br +63 B: worker-7e1b9921.js.gz +54 B: worker-7e1b9921.js.br +150 B: worker-loader.esm.js.gz +123 B: worker-loader.esm.js.br +81 B: worker-35b22e56.js.gz +66 B: worker-35b22e56.js.br" +`; + +exports[`fixtures build worker-loader with microbundle 2`] = `8`; + +exports[`fixtures build worker-loader with microbundle 3`] = ` +"self.onmessage=function(e){return self.postMessage(e.data+\\"bar\\")}; +//# sourceMappingURL=worker-35b22e56.js.map +" +`; + +exports[`fixtures build worker-loader with microbundle 4`] = ` +"self.onmessage=s=>self.postMessage(s.data+\\"bar\\"); +//# sourceMappingURL=worker-7e1b9921.js.map +" +`; + +exports[`fixtures build worker-loader with microbundle 5`] = ` +"var e=new Worker(new URL(\\"worker-35b22e56.js\\",import.meta.url),{type:\\"module\\"});e.onmessage=function(e){return\\"foobar\\"===e.data},e.postMessage(\\"foo\\"); +//# sourceMappingURL=worker-loader.esm.js.map +" +`; + +exports[`fixtures build worker-loader with microbundle 6`] = ` +"const e=new Worker(new URL(\\"worker-7e1b9921.js\\",import.meta.url),{type:\\"module\\"});e.onmessage=e=>\\"foobar\\"===e.data,e.postMessage(\\"foo\\"); +//# sourceMappingURL=worker-loader.modern.js.map +" +`; diff --git a/test/fixtures/worker-loader/package-lock.json b/test/fixtures/worker-loader/package-lock.json new file mode 100644 index 00000000..aa8f2ea9 --- /dev/null +++ b/test/fixtures/worker-loader/package-lock.json @@ -0,0 +1,118 @@ +{ + "name": "worker-loader", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "dependencies": { + "@surma/rollup-plugin-off-main-thread": "2.1.0" + } + }, + "node_modules/@surma/rollup-plugin-off-main-thread": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@surma/rollup-plugin-off-main-thread/-/rollup-plugin-off-main-thread-2.1.0.tgz", + "integrity": "sha512-xQnXQc2N/P/fS1qxSwf/gN7I4xjZ3LGpoTXpFpqj7hhpqFsmYKPj792HFSkTfQWhxNLnQN7m/0XIraZ5htlDYg==", + "dependencies": { + "ejs": "^2.6.1", + "json5": "^2.2.0", + "magic-string": "^0.25.0", + "tippex": "^3.0.0" + } + }, + "node_modules/ejs": { + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-2.7.4.tgz", + "integrity": "sha512-7vmuyh5+kuUyJKePhQfRQBhXV5Ce+RnaeeQArKu1EAMpL3WbgMt5WG6uQZpEVvYSSsxMXRKOewtDk9RaTKXRlA==", + "hasInstallScript": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/json5": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", + "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", + "dependencies": { + "minimist": "^1.2.5" + }, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/magic-string": { + "version": "0.25.7", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz", + "integrity": "sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==", + "dependencies": { + "sourcemap-codec": "^1.4.4" + } + }, + "node_modules/minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" + }, + "node_modules/sourcemap-codec": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", + "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==" + }, + "node_modules/tippex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/tippex/-/tippex-3.0.0.tgz", + "integrity": "sha1-sXYJonzq/+B5ezhzk/2Zh45Nfqk=" + } + }, + "dependencies": { + "@surma/rollup-plugin-off-main-thread": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@surma/rollup-plugin-off-main-thread/-/rollup-plugin-off-main-thread-2.1.0.tgz", + "integrity": "sha512-xQnXQc2N/P/fS1qxSwf/gN7I4xjZ3LGpoTXpFpqj7hhpqFsmYKPj792HFSkTfQWhxNLnQN7m/0XIraZ5htlDYg==", + "requires": { + "ejs": "^2.6.1", + "json5": "^2.2.0", + "magic-string": "^0.25.0", + "tippex": "^3.0.0" + } + }, + "ejs": { + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-2.7.4.tgz", + "integrity": "sha512-7vmuyh5+kuUyJKePhQfRQBhXV5Ce+RnaeeQArKu1EAMpL3WbgMt5WG6uQZpEVvYSSsxMXRKOewtDk9RaTKXRlA==" + }, + "json5": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", + "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", + "requires": { + "minimist": "^1.2.5" + } + }, + "magic-string": { + "version": "0.25.7", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz", + "integrity": "sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==", + "requires": { + "sourcemap-codec": "^1.4.4" + } + }, + "minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" + }, + "sourcemap-codec": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", + "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==" + }, + "tippex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/tippex/-/tippex-3.0.0.tgz", + "integrity": "sha1-sXYJonzq/+B5ezhzk/2Zh45Nfqk=" + } + } +} diff --git a/test/fixtures/worker-loader/package.json b/test/fixtures/worker-loader/package.json new file mode 100644 index 00000000..24dc45b7 --- /dev/null +++ b/test/fixtures/worker-loader/package.json @@ -0,0 +1,6 @@ +{ + "name": "worker-loader", + "scripts": { + "build": "microbundle -f modern,es --workers" + } +} diff --git a/test/fixtures/worker-loader/src/bar.js b/test/fixtures/worker-loader/src/bar.js new file mode 100644 index 00000000..808dbfe1 --- /dev/null +++ b/test/fixtures/worker-loader/src/bar.js @@ -0,0 +1,3 @@ +export function bar() { + return 'bar'; +} diff --git a/test/fixtures/worker-loader/src/index.js b/test/fixtures/worker-loader/src/index.js new file mode 100644 index 00000000..8e267c42 --- /dev/null +++ b/test/fixtures/worker-loader/src/index.js @@ -0,0 +1,4 @@ +const webWorker = new Worker('./worker.js', { type: 'module' }); + +webWorker.onmessage = message => message.data === 'foobar'; +webWorker.postMessage('foo'); diff --git a/test/fixtures/worker-loader/src/worker.js b/test/fixtures/worker-loader/src/worker.js new file mode 100644 index 00000000..45d741a0 --- /dev/null +++ b/test/fixtures/worker-loader/src/worker.js @@ -0,0 +1,3 @@ +import { bar } from './bar'; + +self.onmessage = message => self.postMessage(message.data + bar());