get rid of hack for remote override module
This commit is contained in:
parent
7fb423704a
commit
83b7faa67c
|
@ -8,9 +8,10 @@
|
|||
const ExternalsPlugin = require("../ExternalsPlugin");
|
||||
const RuntimeGlobals = require("../RuntimeGlobals");
|
||||
const RemoteModule = require("./RemoteModule");
|
||||
const RemoteOverrideModuleFactory = require("./RemoteOverrideModuleFactory");
|
||||
const RemoteRuntimeModule = require("./RemoteRuntimeModule");
|
||||
const RemoteOverrideModule = require("./RemoteOverrideModule");
|
||||
const RemoteToExternalDependency = require("./RemoteToExternalDependency");
|
||||
const RemoteToOverrideDependency = require("./RemoteToOverrideDependency");
|
||||
const parseOptions = require("./parseOptions");
|
||||
|
||||
/** @typedef {import("../Compiler")} Compiler */
|
||||
|
@ -46,6 +47,11 @@ module.exports = class ContainerReferencePlugin {
|
|||
normalModuleFactory
|
||||
);
|
||||
|
||||
compilation.dependencyFactories.set(
|
||||
RemoteToOverrideDependency,
|
||||
new RemoteOverrideModuleFactory()
|
||||
);
|
||||
|
||||
normalModuleFactory.hooks.factorize.tap(
|
||||
"ContainerReferencePlugin",
|
||||
data => {
|
||||
|
@ -54,9 +60,8 @@ module.exports = class ContainerReferencePlugin {
|
|||
if (data.request.startsWith(`${key}/`)) {
|
||||
return new RemoteModule(
|
||||
data.request,
|
||||
`${
|
||||
this.overrides.length ? "remote-override-module/" : ""
|
||||
}container-reference/${key}`,
|
||||
this.overrides,
|
||||
`container-reference/${key}`,
|
||||
data.request.slice(key.length + 1)
|
||||
);
|
||||
}
|
||||
|
@ -65,19 +70,6 @@ module.exports = class ContainerReferencePlugin {
|
|||
}
|
||||
);
|
||||
|
||||
normalModuleFactory.hooks.factorize.tap(
|
||||
"ContainerReferencePlugin",
|
||||
data => {
|
||||
// TODO use a custom dependency and factory instead
|
||||
if (data.request.startsWith(`remote-override-module/`)) {
|
||||
return new RemoteOverrideModule(
|
||||
data.request.slice(`remote-override-module/`.length),
|
||||
this.overrides
|
||||
);
|
||||
}
|
||||
}
|
||||
);
|
||||
|
||||
compilation.hooks.additionalTreeRuntimeRequirements.tap(
|
||||
"OverridablesPlugin",
|
||||
(chunk, set) => {
|
||||
|
|
|
@ -9,6 +9,7 @@ const { RawSource } = require("webpack-sources");
|
|||
const Module = require("../Module");
|
||||
const RuntimeGlobals = require("../RuntimeGlobals");
|
||||
const RemoteToExternalDependency = require("./RemoteToExternalDependency");
|
||||
const RemoteToOverrideDependency = require("./RemoteToOverrideDependency");
|
||||
|
||||
/** @typedef {import("../../declarations/WebpackOptions").WebpackOptionsNormalized} WebpackOptions */
|
||||
/** @typedef {import("../ChunkGraph")} ChunkGraph */
|
||||
|
@ -26,9 +27,10 @@ const TYPES = new Set(["remote"]);
|
|||
const RUNTIME_REQUIREMENTS = new Set([RuntimeGlobals.module]);
|
||||
|
||||
class RemoteModule extends Module {
|
||||
constructor(request, externalRequest, internalRequest) {
|
||||
constructor(request, overrides, externalRequest, internalRequest) {
|
||||
super("remote-module");
|
||||
this.request = request;
|
||||
this.overrides = overrides;
|
||||
this.externalRequest = externalRequest;
|
||||
this.internalRequest = internalRequest;
|
||||
}
|
||||
|
@ -63,7 +65,13 @@ class RemoteModule extends Module {
|
|||
};
|
||||
|
||||
this.clearDependenciesAndBlocks();
|
||||
this.addDependency(new RemoteToExternalDependency(this.externalRequest));
|
||||
if (this.overrides.length > 0) {
|
||||
this.addDependency(
|
||||
new RemoteToOverrideDependency(this.externalRequest, this.overrides)
|
||||
);
|
||||
} else {
|
||||
this.addDependency(new RemoteToExternalDependency(this.externalRequest));
|
||||
}
|
||||
|
||||
callback();
|
||||
}
|
||||
|
|
|
@ -6,13 +6,14 @@
|
|||
"use strict";
|
||||
|
||||
const { RawSource } = require("webpack-sources");
|
||||
const AsyncDependenciesBlock = require("../AsyncDependenciesBlock");
|
||||
const Module = require("../Module");
|
||||
const RuntimeGlobals = require("../RuntimeGlobals");
|
||||
const AsyncDependenciesBlock = require("../AsyncDependenciesBlock");
|
||||
const RemoteToExternalDependency = require("./RemoteToExternalDependency");
|
||||
const Template = require("../Template");
|
||||
const RemoteToExternalDependency = require("./RemoteToExternalDependency");
|
||||
|
||||
/** @typedef {import("../../declarations/WebpackOptions").WebpackOptionsNormalized} WebpackOptions */
|
||||
/** @typedef {import("../Chunk")} Chunk */
|
||||
/** @typedef {import("../ChunkGraph")} ChunkGraph */
|
||||
/** @typedef {import("../ChunkGroup")} ChunkGroup */
|
||||
/** @typedef {import("../Compilation")} Compilation */
|
||||
|
@ -84,6 +85,10 @@ class RemoteModule extends Module {
|
|||
return chunkGraph.getNumberOfEntryModules(chunk) > 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {string=} type the source type for which the size should be estimated
|
||||
* @returns {number} the estimated size of the module (must be non-zero)
|
||||
*/
|
||||
size(type) {
|
||||
return 42;
|
||||
}
|
||||
|
|
|
@ -0,0 +1,30 @@
|
|||
/*
|
||||
MIT License http://www.opensource.org/licenses/mit-license.php
|
||||
Author Tobias Koppers @sokra and Zackary Jackson @ScriptedAlchemy
|
||||
*/
|
||||
|
||||
"use strict";
|
||||
|
||||
const ModuleFactory = require("../ModuleFactory");
|
||||
const RemoteOverrideModule = require("./RemoteOverrideModule");
|
||||
|
||||
/** @typedef {import("../ModuleFactory").ModuleFactoryCreateData} ModuleFactoryCreateData */
|
||||
/** @typedef {import("../ModuleFactory").ModuleFactoryResult} ModuleFactoryResult */
|
||||
/** @typedef {import("./RemoteToOverrideDependency")} RemoteToOverrideDependency */
|
||||
|
||||
class RemoteOverrideModuleFactory extends ModuleFactory {
|
||||
/**
|
||||
* @param {ModuleFactoryCreateData} data data object
|
||||
* @param {function(Error=, ModuleFactoryResult=): void} callback callback
|
||||
* @returns {void}
|
||||
*/
|
||||
create(data, callback) {
|
||||
const dep =
|
||||
/** @type {RemoteToOverrideDependency} */ (data.dependencies[0]);
|
||||
callback(null, {
|
||||
module: new RemoteOverrideModule(dep.request, dep.overrides)
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = RemoteOverrideModuleFactory;
|
|
@ -59,16 +59,12 @@ class RemoteRuntimeModule extends RuntimeModule {
|
|||
`chunkMapping[chunkId].forEach(${runtimeTemplate.basicFunction("id", [
|
||||
"if(__webpack_modules__[id]) return;",
|
||||
"var data = idToExternalAndNameMapping[id];",
|
||||
"console.log(data);",
|
||||
`promises.push(Promise.resolve(__webpack_require__(data[0]).get(data[1])).then(${runtimeTemplate.basicFunction(
|
||||
"factory",
|
||||
[
|
||||
`__webpack_modules__[id] = ${runtimeTemplate.basicFunction(
|
||||
"module",
|
||||
[
|
||||
"console.log(factory.toString());",
|
||||
"module.exports = factory();"
|
||||
]
|
||||
["module.exports = factory();"]
|
||||
)}`
|
||||
]
|
||||
)}))`
|
||||
|
|
|
@ -0,0 +1,37 @@
|
|||
/*
|
||||
MIT License http://www.opensource.org/licenses/mit-license.php
|
||||
Author Tobias Koppers @sokra
|
||||
*/
|
||||
|
||||
"use strict";
|
||||
|
||||
const ModuleDependency = require("../dependencies/ModuleDependency");
|
||||
const makeSerializable = require("../util/makeSerializable");
|
||||
|
||||
class RemoteToOverrideDependency extends ModuleDependency {
|
||||
constructor(request, overrides) {
|
||||
super(request);
|
||||
this.overrides = overrides;
|
||||
}
|
||||
|
||||
get type() {
|
||||
return "remote to override";
|
||||
}
|
||||
|
||||
serialize(context) {
|
||||
context.write(this.overrides);
|
||||
super.serialize(context);
|
||||
}
|
||||
|
||||
deserialize(context) {
|
||||
this.overrides = context.read();
|
||||
super.deserialize(context);
|
||||
}
|
||||
}
|
||||
|
||||
makeSerializable(
|
||||
RemoteToOverrideDependency,
|
||||
"webpack/lib/container/RemoteToOverrideDependency"
|
||||
);
|
||||
|
||||
module.exports = RemoteToOverrideDependency;
|
|
@ -23,6 +23,8 @@ module.exports = {
|
|||
require("../container/OverridableOriginalDependency"),
|
||||
"container/RemoteToExternalDependency": () =>
|
||||
require("../container/RemoteToExternalDependency"),
|
||||
"container/RemoteToOverrideDependency": () =>
|
||||
require("../container/RemoteToOverrideDependency"),
|
||||
"dependencies/AMDDefineDependency": () =>
|
||||
require("../dependencies/AMDDefineDependency"),
|
||||
"dependencies/AMDRequireArrayDependency": () =>
|
||||
|
|
Loading…
Reference in New Issue