webpack 5.76.3 → 5.77.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of webpack might be problematic. Click here for more details.

@@ -85,6 +85,7 @@ const EMPTY_GENERATOR_OPTIONS = {};
85
85
  const EMPTY_ELEMENTS = [];
86
86
 
87
87
  const MATCH_RESOURCE_REGEX = /^([^!]+)!=!/;
88
+ const LEADING_DOT_EXTENSION_REGEX = /^[^.]/;
88
89
 
89
90
  const loaderToIdent = data => {
90
91
  if (!data.options) {
@@ -852,6 +853,25 @@ ${err2.stack}`;
852
853
  err.message += `
853
854
  ${hints.join("\n\n")}`;
854
855
  }
856
+
857
+ // Check if the extension is missing a leading dot (e.g. "js" instead of ".js")
858
+ let appendResolveExtensionsHint = false;
859
+ const specifiedExtensions = Array.from(
860
+ resolver.options.extensions
861
+ );
862
+ const expectedExtensions = specifiedExtensions.map(extension => {
863
+ if (LEADING_DOT_EXTENSION_REGEX.test(extension)) {
864
+ appendResolveExtensionsHint = true;
865
+ return `.${extension}`;
866
+ }
867
+ return extension;
868
+ });
869
+ if (appendResolveExtensionsHint) {
870
+ err.message += `\nDid you miss the leading dot in 'resolve.extensions'? Did you mean '${JSON.stringify(
871
+ expectedExtensions
872
+ )}' instead of '${JSON.stringify(specifiedExtensions)}'?`;
873
+ }
874
+
855
875
  callback(err);
856
876
  }
857
877
  );
@@ -391,7 +391,8 @@ class WebpackOptionsApply extends OptionsApply {
391
391
  new WorkerPlugin(
392
392
  options.output.workerChunkLoading,
393
393
  options.output.workerWasmLoading,
394
- options.output.module
394
+ options.output.module,
395
+ options.output.workerPublicPath
395
396
  ).apply(compiler);
396
397
 
397
398
  new DefaultStatsFactoryPlugin().apply(compiler);
@@ -916,6 +916,7 @@ const applyOutputDefaults = (
916
916
  ? "auto"
917
917
  : ""
918
918
  );
919
+ D(output, "workerPublicPath", "");
919
920
  D(output, "chunkLoadTimeout", 120000);
920
921
  D(output, "hashFunction", futureDefaults ? "xxhash64" : "md4");
921
922
  D(output, "hashDigest", "hex");
@@ -369,6 +369,7 @@ const getNormalizedWebpackOptions = config => {
369
369
  uniqueName: output.uniqueName,
370
370
  wasmLoading: output.wasmLoading,
371
371
  webassemblyModuleFilename: output.webassemblyModuleFilename,
372
+ workerPublicPath: output.workerPublicPath,
372
373
  workerChunkLoading: output.workerChunkLoading,
373
374
  workerWasmLoading: output.workerWasmLoading
374
375
  };
@@ -25,10 +25,16 @@ class WorkerDependency extends ModuleDependency {
25
25
  /**
26
26
  * @param {string} request request
27
27
  * @param {[number, number]} range range
28
+ * @param {Object} workerDependencyOptions options
29
+ * @param {string} workerDependencyOptions.publicPath public path for the worker
28
30
  */
29
- constructor(request, range) {
31
+ constructor(request, range, workerDependencyOptions) {
30
32
  super(request);
31
33
  this.range = range;
34
+ // If options are updated, don't forget to update the hash and serialization functions
35
+ this.options = workerDependencyOptions;
36
+ /** Cache the hash */
37
+ this._hashUpdate = undefined;
32
38
  }
33
39
 
34
40
  /**
@@ -48,6 +54,31 @@ class WorkerDependency extends ModuleDependency {
48
54
  get category() {
49
55
  return "worker";
50
56
  }
57
+
58
+ /**
59
+ * Update the hash
60
+ * @param {Hash} hash hash to be updated
61
+ * @param {UpdateHashContext} context context
62
+ * @returns {void}
63
+ */
64
+ updateHash(hash, context) {
65
+ if (this._hashUpdate === undefined) {
66
+ this._hashUpdate = JSON.stringify(this.options);
67
+ }
68
+ hash.update(this._hashUpdate);
69
+ }
70
+
71
+ serialize(context) {
72
+ const { write } = context;
73
+ write(this.options);
74
+ super.serialize(context);
75
+ }
76
+
77
+ deserialize(context) {
78
+ const { read } = context;
79
+ this.options = read();
80
+ super.deserialize(context);
81
+ }
51
82
  }
52
83
 
53
84
  WorkerDependency.Template = class WorkerDependencyTemplate extends (
@@ -69,6 +100,10 @@ WorkerDependency.Template = class WorkerDependencyTemplate extends (
69
100
  chunkGraph.getBlockChunkGroup(block)
70
101
  );
71
102
  const chunk = entrypoint.getEntrypointChunk();
103
+ // We use the workerPublicPath option if provided, else we fallback to the RuntimeGlobal publicPath
104
+ const workerImportBaseUrl = dep.options.publicPath
105
+ ? `"${dep.options.publicPath}"`
106
+ : RuntimeGlobals.publicPath;
72
107
 
73
108
  runtimeRequirements.add(RuntimeGlobals.publicPath);
74
109
  runtimeRequirements.add(RuntimeGlobals.baseURI);
@@ -77,7 +112,7 @@ WorkerDependency.Template = class WorkerDependencyTemplate extends (
77
112
  source.replace(
78
113
  dep.range[0],
79
114
  dep.range[1] - 1,
80
- `/* worker import */ ${RuntimeGlobals.publicPath} + ${
115
+ `/* worker import */ ${workerImportBaseUrl} + ${
81
116
  RuntimeGlobals.getChunkScriptFilename
82
117
  }(${JSON.stringify(chunk.id)}), ${RuntimeGlobals.baseURI}`
83
118
  );
@@ -48,10 +48,11 @@ const DEFAULT_SYNTAX = [
48
48
  const workerIndexMap = new WeakMap();
49
49
 
50
50
  class WorkerPlugin {
51
- constructor(chunkLoading, wasmLoading, module) {
51
+ constructor(chunkLoading, wasmLoading, module, workerPublicPath) {
52
52
  this._chunkLoading = chunkLoading;
53
53
  this._wasmLoading = wasmLoading;
54
54
  this._module = module;
55
+ this._workerPublicPath = workerPublicPath;
55
56
  }
56
57
  /**
57
58
  * Apply the plugin
@@ -298,7 +299,9 @@ class WorkerPlugin {
298
299
  }
299
300
  });
300
301
  block.loc = expr.loc;
301
- const dep = new WorkerDependency(url.string, range);
302
+ const dep = new WorkerDependency(url.string, range, {
303
+ publicPath: this._workerPublicPath
304
+ });
302
305
  dep.loc = expr.loc;
303
306
  block.addDependency(dep);
304
307
  parser.state.module.addBlock(block);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "webpack",
3
- "version": "5.76.3",
3
+ "version": "5.77.0",
4
4
  "author": "Tobias Koppers @sokra",
5
5
  "description": "Packs CommonJs/AMD modules for the browser. Allows to split your codebase into multiple bundles, which can be loaded on demand. Support loaders to preprocess files, i.e. json, jsx, es7, css, less, ... and your custom stuff.",
6
6
  "license": "MIT",