Open
Description
I tried to publish 3rd party script with webpack and worker-plugin
.
https://cdn.example.com/main.js <- entry
https://cdn.example.com/sub.js <- chunk
https://cdn.example.com/0.worker.js <- worker
I set output.publicPath
to "https://cdn.example.com/" in this case;
But I can not exec worker because of cross domain restriction.
> new Worker("http://localhost:8080/0.worker.js")
VM84:1 Uncaught DOMException: Failed to construct 'Worker': Script at 'http://localhost:8080/0.worker.js' cannot be accessed from origin 'https://www.google.com'.
I know this fallback works to avoid it.
// ASSET_HOST="https://cdn.example.com/" webpack --mode production
if (process.env.ASSET_HOST === location.protocol + "//" + location.host) {
return new Worker(process.env.ASSET_HOST + "0.worker.js")
} else {
const code = await fetch(process.env.ASSET_HOST + "0.worker.js").then(res =>
res.text()
);
// console.log(t);
const blob = new Blob([code], { type: "text/javascript" });
const url = URL.createObjectURL(blob);
return worker = new Worker(url);
}
but publisher need to add CORS header to fetch. (Most CDN have CORS header)
I will fork and try it at first in my hand.