worker-plugin
worker-plugin copied to clipboard
Subworkers loaded from incorrect URL?
I have worker that is loaded from the main code:
const worker = new Worker('./MainWorker.js', {
name: 'main',
type: 'module'
});
And within this worker, it tries to load a subworker:
const subworker = new Worker('./Subworker.js', {
name: 'sub',
type: 'module'
});
When webpack bundles this, the browser correctly and successfully loads the main worker from 'dist/main.worker.js', however it then tries to load the subworker from 'dist/dist/sub.worker.js' which isn't where the worker bundle was built to.
I'm not sure if this is a config problem on my side or an issue with the plugin. Here are the relevant parts of my webpack config:
{
entry: ['./src/index.js'],
output: {
path: path.join(__dirname, 'dist'),
filename: '[name].js',
publicPath: 'dist/'
},
plugins: [
new WorkerPlugin({
filename: '[name].worker.js'
})
]
}
Hi there! You need to set your output.publicPath to an absolute URL:
{
entry: ['./src/index.js'],
output: {
path: path.join(__dirname, 'dist'),
filename: '[name].js',
- publicPath: 'dist/'
+ publicPath: '/dist/'
},
plugins: [
new WorkerPlugin({
filename: '[name].worker.js'
})
]
}
It might be possible to address this in worker-plugin, but I'm not sure.
Thanks. I had tried that (successfully) but I want the URLs to be relative to my page rather than the root. I can't assume which URL the app will be loaded from.
@jamiewinder I'm not sure if it will work in the worker context, but you could set the public path dynamically at runtime (more info here):
__webpack_public_path__ = location.pathname + '/dist';