Skip to content
This repository was archived by the owner on Sep 9, 2021. It is now read-only.
This repository was archived by the owner on Sep 9, 2021. It is now read-only.

Issue with publicPath in v3 #281

@ksocha

Description

@ksocha
  • Operating System: MacOS
  • Node Version: 12.16.1
  • NPM Version: 6.13.4
  • webpack Version: 4.44.1
  • worker-loader Version: 3.0.1

Expected Behavior

I would expect that setting publicPath in options would take precedence over __webpack_public_path__ variable.
We use webpacker and setting a CDN path to serve our assets. However, worker must be served from same domain in order to work.

I had to use patch-package to revert to one of previous versions and fit it my needs (code below).

Actual Behavior

With our setup, passing publicPath does nothing.

Code

patch-package snippet

diff --git a/node_modules/worker-loader/dist/utils.js b/node_modules/worker-loader/dist/utils.js
index abe26e2..89089ce 100644
--- a/node_modules/worker-loader/dist/utils.js
+++ b/node_modules/worker-loader/dist/utils.js
@@ -62,12 +62,16 @@ function workerGenerator(loaderContext, workerFilename, workerSource, options) {
 
   const esModule = typeof options.esModule !== 'undefined' ? options.esModule : true;
 
+  const publicPath = typeof options.publicPath === 'undefined'	
+      ? '__webpack_public_path__'	
+      : JSON.stringify(options.publicPath);
+
   if (options.inline) {
     const InlineWorkerPath = (0, _loaderUtils.stringifyRequest)(loaderContext, `!!${require.resolve('./runtime/inline.js')}`);
     let fallbackWorkerPath;
 
     if (options.inline === 'fallback') {
-      fallbackWorkerPath = `__webpack_public_path__ + ${JSON.stringify(workerFilename)}`;
+      fallbackWorkerPath = `${publicPath} + ${JSON.stringify(workerFilename)}`;
     }
 
     return `
@@ -76,7 +80,7 @@ ${esModule ? `import worker from ${InlineWorkerPath};` : `var worker = require($
 ${esModule ? 'export default' : 'module.exports ='} function() {\n  return worker(${JSON.stringify(workerSource)}, ${JSON.stringify(workerConstructor)}, ${JSON.stringify(workerOptions)}, ${fallbackWorkerPath});\n}\n`;
   }
 
-  return `${esModule ? 'export default' : 'module.exports ='} function() {\n  return new ${workerConstructor}(__webpack_public_path__ + ${JSON.stringify(workerFilename)}${workerOptions ? `, ${JSON.stringify(workerOptions)}` : ''});\n}\n`;
+  return `${esModule ? 'export default' : 'module.exports ='} function() {\n  return new ${workerConstructor}(${publicPath} + ${JSON.stringify(workerFilename)}${workerOptions ? `, ${JSON.stringify(workerOptions)}` : ''});\n}\n`;
 } // Matches only the last occurrence of sourceMappingURL
 

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions