feat: ignoreBrowserWarnings option to ignore browser console warnings
This commit is contained in:
parent
386201511c
commit
f5d368efa6
|
@ -2096,6 +2096,10 @@ export interface Output {
|
|||
* The filename of the Hot Update Main File. It is inside the 'output.path' directory.
|
||||
*/
|
||||
hotUpdateMainFilename?: HotUpdateMainFilename;
|
||||
/**
|
||||
* Ignore warnings in the browser.
|
||||
*/
|
||||
ignoreBrowserWarnings?: boolean;
|
||||
/**
|
||||
* Wrap javascript code into IIFE's to avoid leaking into global scope.
|
||||
*/
|
||||
|
@ -3305,6 +3309,10 @@ export interface OutputNormalized {
|
|||
* The filename of the Hot Update Main File. It is inside the 'output.path' directory.
|
||||
*/
|
||||
hotUpdateMainFilename?: HotUpdateMainFilename;
|
||||
/**
|
||||
* Ignore warnings in the browser.
|
||||
*/
|
||||
ignoreBrowserWarnings?: boolean;
|
||||
/**
|
||||
* Wrap javascript code into IIFE's to avoid leaking into global scope.
|
||||
*/
|
||||
|
|
|
@ -679,7 +679,11 @@ module.exports = new Promise((resolve, reject) => {
|
|||
/******/ if(!__webpack_require__.o(__webpack_require__.S, name)) __webpack_require__.S[name] = {};
|
||||
/******/ // runs all init snippets from all modules reachable
|
||||
/******/ var scope = __webpack_require__.S[name];
|
||||
/******/ var warn = (msg) => (typeof console !== "undefined" && console.warn && console.warn(msg));
|
||||
/******/ var warn = (msg) => {
|
||||
/******/ typeof console !== "undefined" && console.warn ? console.warn(msg) : (() => {
|
||||
/******/
|
||||
/******/ })()
|
||||
/******/ };
|
||||
/******/ var uniqueName = "module-federation-aaa";
|
||||
/******/ var register = (name, version, factory, eager) => {
|
||||
/******/ var versions = scope[name] = scope[name] || {};
|
||||
|
@ -789,8 +793,13 @@ module.exports = new Promise((resolve, reject) => {
|
|||
/******/ if(entry) return get(entry);
|
||||
/******/ throw new Error(getInvalidVersionMessage(scope, scopeName, key, requiredVersion));
|
||||
/******/ };
|
||||
/******/ var warn = (msg) => {
|
||||
/******/ typeof console !== "undefined" && console.warn ? console.warn(msg) : (() => {
|
||||
/******/
|
||||
/******/ })()
|
||||
/******/ };
|
||||
/******/ var warnInvalidVersion = (scope, scopeName, key, requiredVersion) => {
|
||||
/******/ typeof console !== "undefined" && console.warn && console.warn(getInvalidVersionMessage(scope, scopeName, key, requiredVersion));
|
||||
/******/ warn(getInvalidVersionMessage(scope, scopeName, key, requiredVersion));
|
||||
/******/ };
|
||||
/******/ var get = (entry) => {
|
||||
/******/ entry.loaded = 1;
|
||||
|
@ -1208,7 +1217,11 @@ __webpack_require__.d(exports, {
|
|||
/******/ if(!__webpack_require__.o(__webpack_require__.S, name)) __webpack_require__.S[name] = {};
|
||||
/******/ // runs all init snippets from all modules reachable
|
||||
/******/ var scope = __webpack_require__.S[name];
|
||||
/******/ var warn = (msg) => (typeof console !== "undefined" && console.warn && console.warn(msg));
|
||||
/******/ var warn = (msg) => {
|
||||
/******/ typeof console !== "undefined" && console.warn ? console.warn(msg) : (() => {
|
||||
/******/
|
||||
/******/ })()
|
||||
/******/ };
|
||||
/******/ var uniqueName = "module-federation-bbb";
|
||||
/******/ var register = (name, version, factory, eager) => {
|
||||
/******/ var versions = scope[name] = scope[name] || {};
|
||||
|
@ -1289,7 +1302,7 @@ __webpack_require__.d(exports, {
|
|||
/******/ };
|
||||
/******/ var getSingletonVersion = (scope, scopeName, key, requiredVersion) => {
|
||||
/******/ var version = findSingletonVersionKey(scope, key);
|
||||
/******/ if (!satisfy(requiredVersion, version)) typeof console !== "undefined" && console.warn && console.warn(getInvalidSingletonVersionMessage(scope, key, version, requiredVersion));
|
||||
/******/ if (!satisfy(requiredVersion, version)) warn(getInvalidSingletonVersionMessage(scope, key, version, requiredVersion));
|
||||
/******/ return get(scope[key][version]);
|
||||
/******/ };
|
||||
/******/ var getStrictSingletonVersion = (scope, scopeName, key, requiredVersion) => {
|
||||
|
@ -1317,8 +1330,13 @@ __webpack_require__.d(exports, {
|
|||
/******/ if(entry) return get(entry);
|
||||
/******/ throw new Error(getInvalidVersionMessage(scope, scopeName, key, requiredVersion));
|
||||
/******/ };
|
||||
/******/ var warn = (msg) => {
|
||||
/******/ typeof console !== "undefined" && console.warn ? console.warn(msg) : (() => {
|
||||
/******/
|
||||
/******/ })()
|
||||
/******/ };
|
||||
/******/ var warnInvalidVersion = (scope, scopeName, key, requiredVersion) => {
|
||||
/******/ typeof console !== "undefined" && console.warn && console.warn(getInvalidVersionMessage(scope, scopeName, key, requiredVersion));
|
||||
/******/ warn(getInvalidVersionMessage(scope, scopeName, key, requiredVersion));
|
||||
/******/ };
|
||||
/******/ var get = (entry) => {
|
||||
/******/ entry.loaded = 1;
|
||||
|
@ -1754,7 +1772,11 @@ __webpack_require__.d(exports, {
|
|||
/******/ if(!__webpack_require__.o(__webpack_require__.S, name)) __webpack_require__.S[name] = {};
|
||||
/******/ // runs all init snippets from all modules reachable
|
||||
/******/ var scope = __webpack_require__.S[name];
|
||||
/******/ var warn = (msg) => (typeof console !== "undefined" && console.warn && console.warn(msg));
|
||||
/******/ var warn = (msg) => {
|
||||
/******/ typeof console !== "undefined" && console.warn ? console.warn(msg) : (() => {
|
||||
/******/
|
||||
/******/ })()
|
||||
/******/ };
|
||||
/******/ var uniqueName = "module-federation-ccc";
|
||||
/******/ var register = (name, version, factory, eager) => {
|
||||
/******/ var versions = scope[name] = scope[name] || {};
|
||||
|
@ -1835,7 +1857,7 @@ __webpack_require__.d(exports, {
|
|||
/******/ };
|
||||
/******/ var getSingletonVersion = (scope, scopeName, key, requiredVersion) => {
|
||||
/******/ var version = findSingletonVersionKey(scope, key);
|
||||
/******/ if (!satisfy(requiredVersion, version)) typeof console !== "undefined" && console.warn && console.warn(getInvalidSingletonVersionMessage(scope, key, version, requiredVersion));
|
||||
/******/ if (!satisfy(requiredVersion, version)) warn(getInvalidSingletonVersionMessage(scope, key, version, requiredVersion));
|
||||
/******/ return get(scope[key][version]);
|
||||
/******/ };
|
||||
/******/ var getStrictSingletonVersion = (scope, scopeName, key, requiredVersion) => {
|
||||
|
@ -1863,8 +1885,13 @@ __webpack_require__.d(exports, {
|
|||
/******/ if(entry) return get(entry);
|
||||
/******/ throw new Error(getInvalidVersionMessage(scope, scopeName, key, requiredVersion));
|
||||
/******/ };
|
||||
/******/ var warn = (msg) => {
|
||||
/******/ typeof console !== "undefined" && console.warn ? console.warn(msg) : (() => {
|
||||
/******/
|
||||
/******/ })()
|
||||
/******/ };
|
||||
/******/ var warnInvalidVersion = (scope, scopeName, key, requiredVersion) => {
|
||||
/******/ typeof console !== "undefined" && console.warn && console.warn(getInvalidVersionMessage(scope, scopeName, key, requiredVersion));
|
||||
/******/ warn(getInvalidVersionMessage(scope, scopeName, key, requiredVersion));
|
||||
/******/ };
|
||||
/******/ var get = (entry) => {
|
||||
/******/ entry.loaded = 1;
|
||||
|
|
|
@ -327,6 +327,7 @@ const getNormalizedWebpackOptions = config => {
|
|||
hotUpdateChunkFilename: output.hotUpdateChunkFilename,
|
||||
hotUpdateGlobal: output.hotUpdateGlobal,
|
||||
hotUpdateMainFilename: output.hotUpdateMainFilename,
|
||||
ignoreBrowserWarnings: output.ignoreBrowserWarnings,
|
||||
iife: output.iife,
|
||||
importFunctionName: output.importFunctionName,
|
||||
importMetaName: output.importMetaName,
|
||||
|
|
|
@ -119,8 +119,7 @@ class ConsumeSharedRuntimeModule extends RuntimeModule {
|
|||
"scope, scopeName, key, requiredVersion",
|
||||
[
|
||||
"var version = findSingletonVersionKey(scope, key);",
|
||||
"if (!satisfy(requiredVersion, version)) " +
|
||||
'typeof console !== "undefined" && console.warn && console.warn(getInvalidSingletonVersionMessage(scope, key, version, requiredVersion));',
|
||||
"if (!satisfy(requiredVersion, version)) warn(getInvalidSingletonVersionMessage(scope, key, version, requiredVersion));",
|
||||
"return get(scope[key][version]);"
|
||||
]
|
||||
)};`,
|
||||
|
@ -166,10 +165,17 @@ class ConsumeSharedRuntimeModule extends RuntimeModule {
|
|||
"throw new Error(getInvalidVersionMessage(scope, scopeName, key, requiredVersion));"
|
||||
]
|
||||
)};`,
|
||||
`var warn = ${
|
||||
this.compilation.options.output.ignoreBrowserWarnings
|
||||
? runtimeTemplate.basicFunction("", "")
|
||||
: runtimeTemplate.basicFunction("msg", [
|
||||
'if (typeof console !== "undefined" && console.warn) console.warn(msg);'
|
||||
])
|
||||
};`,
|
||||
`var warnInvalidVersion = ${runtimeTemplate.basicFunction(
|
||||
"scope, scopeName, key, requiredVersion",
|
||||
[
|
||||
'typeof console !== "undefined" && console.warn && console.warn(getInvalidVersionMessage(scope, scopeName, key, requiredVersion));'
|
||||
"warn(getInvalidVersionMessage(scope, scopeName, key, requiredVersion));"
|
||||
]
|
||||
)};`,
|
||||
`var get = ${runtimeTemplate.basicFunction("entry", [
|
||||
|
|
|
@ -77,10 +77,13 @@ class ShareRuntimeModule extends RuntimeModule {
|
|||
`if(!${RuntimeGlobals.hasOwnProperty}(${RuntimeGlobals.shareScopeMap}, name)) ${RuntimeGlobals.shareScopeMap}[name] = {};`,
|
||||
"// runs all init snippets from all modules reachable",
|
||||
`var scope = ${RuntimeGlobals.shareScopeMap}[name];`,
|
||||
`var warn = ${runtimeTemplate.returningFunction(
|
||||
'typeof console !== "undefined" && console.warn && console.warn(msg)',
|
||||
"msg"
|
||||
)};`,
|
||||
`var warn = ${
|
||||
this.compilation.options.output.ignoreBrowserWarnings
|
||||
? runtimeTemplate.basicFunction("", "")
|
||||
: runtimeTemplate.basicFunction("msg", [
|
||||
'if (typeof console !== "undefined" && console.warn) console.warn(msg);'
|
||||
])
|
||||
};`,
|
||||
`var uniqueName = ${JSON.stringify(uniqueName || undefined)};`,
|
||||
`var register = ${runtimeTemplate.basicFunction(
|
||||
"name, version, factory, eager",
|
||||
|
|
File diff suppressed because one or more lines are too long
|
@ -3162,6 +3162,10 @@
|
|||
"hotUpdateMainFilename": {
|
||||
"$ref": "#/definitions/HotUpdateMainFilename"
|
||||
},
|
||||
"ignoreBrowserWarnings": {
|
||||
"description": "Ignore warnings in the browser.",
|
||||
"type": "boolean"
|
||||
},
|
||||
"iife": {
|
||||
"$ref": "#/definitions/Iife"
|
||||
},
|
||||
|
@ -3364,6 +3368,10 @@
|
|||
"hotUpdateMainFilename": {
|
||||
"$ref": "#/definitions/HotUpdateMainFilename"
|
||||
},
|
||||
"ignoreBrowserWarnings": {
|
||||
"description": "Ignore warnings in the browser.",
|
||||
"type": "boolean"
|
||||
},
|
||||
"iife": {
|
||||
"$ref": "#/definitions/Iife"
|
||||
},
|
||||
|
|
|
@ -343,6 +343,7 @@ describe("snapshots", () => {
|
|||
"hotUpdateChunkFilename": "[id].[fullhash].hot-update.js",
|
||||
"hotUpdateGlobal": "webpackHotUpdatewebpack",
|
||||
"hotUpdateMainFilename": "[runtime].[fullhash].hot-update.json",
|
||||
"ignoreBrowserWarnings": undefined,
|
||||
"iife": true,
|
||||
"importFunctionName": "import",
|
||||
"importMetaName": "import.meta",
|
||||
|
|
|
@ -498,7 +498,7 @@ describe("Validation", () => {
|
|||
expect(msg).toMatchInlineSnapshot(`
|
||||
"Invalid configuration object. Webpack has been initialized using a configuration object that does not match the API schema.
|
||||
- configuration.output has an unknown property 'ecmaVersion'. These properties are valid:
|
||||
object { amdContainer?, assetModuleFilename?, asyncChunks?, auxiliaryComment?, charset?, chunkFilename?, chunkFormat?, chunkLoadTimeout?, chunkLoading?, chunkLoadingGlobal?, clean?, compareBeforeEmit?, crossOriginLoading?, cssChunkFilename?, cssFilename?, devtoolFallbackModuleFilenameTemplate?, devtoolModuleFilenameTemplate?, devtoolNamespace?, enabledChunkLoadingTypes?, enabledLibraryTypes?, enabledWasmLoadingTypes?, environment?, filename?, globalObject?, hashDigest?, hashDigestLength?, hashFunction?, hashSalt?, hotUpdateChunkFilename?, hotUpdateGlobal?, hotUpdateMainFilename?, iife?, importFunctionName?, importMetaName?, library?, libraryExport?, libraryTarget?, module?, path?, pathinfo?, publicPath?, scriptType?, sourceMapFilename?, sourcePrefix?, strictModuleErrorHandling?, strictModuleExceptionHandling?, trustedTypes?, umdNamedDefine?, uniqueName?, wasmLoading?, webassemblyModuleFilename?, workerChunkLoading?, workerPublicPath?, workerWasmLoading? }
|
||||
object { amdContainer?, assetModuleFilename?, asyncChunks?, auxiliaryComment?, charset?, chunkFilename?, chunkFormat?, chunkLoadTimeout?, chunkLoading?, chunkLoadingGlobal?, clean?, compareBeforeEmit?, crossOriginLoading?, cssChunkFilename?, cssFilename?, devtoolFallbackModuleFilenameTemplate?, devtoolModuleFilenameTemplate?, devtoolNamespace?, enabledChunkLoadingTypes?, enabledLibraryTypes?, enabledWasmLoadingTypes?, environment?, filename?, globalObject?, hashDigest?, hashDigestLength?, hashFunction?, hashSalt?, hotUpdateChunkFilename?, hotUpdateGlobal?, hotUpdateMainFilename?, ignoreBrowserWarnings?, iife?, importFunctionName?, importMetaName?, library?, libraryExport?, libraryTarget?, module?, path?, pathinfo?, publicPath?, scriptType?, sourceMapFilename?, sourcePrefix?, strictModuleErrorHandling?, strictModuleExceptionHandling?, trustedTypes?, umdNamedDefine?, uniqueName?, wasmLoading?, webassemblyModuleFilename?, workerChunkLoading?, workerPublicPath?, workerWasmLoading? }
|
||||
-> Options affecting the output of the compilation. \`output\` options tell webpack how to write the compiled files to disk.
|
||||
Did you mean output.environment (output.ecmaVersion was a temporary configuration option during webpack 5 beta)?"
|
||||
`)
|
||||
|
|
|
@ -6076,6 +6076,19 @@ Object {
|
|||
"multiple": false,
|
||||
"simpleType": "string",
|
||||
},
|
||||
"output-ignore-browser-warnings": Object {
|
||||
"configs": Array [
|
||||
Object {
|
||||
"description": "Ignore warnings in the browser.",
|
||||
"multiple": false,
|
||||
"path": "output.ignoreBrowserWarnings",
|
||||
"type": "boolean",
|
||||
},
|
||||
],
|
||||
"description": "Ignore warnings in the browser.",
|
||||
"multiple": false,
|
||||
"simpleType": "boolean",
|
||||
},
|
||||
"output-iife": Object {
|
||||
"configs": Array [
|
||||
Object {
|
||||
|
|
|
@ -0,0 +1 @@
|
|||
module.exports = [[/prefix\/deep\/c/]];
|
|
@ -0,0 +1,262 @@
|
|||
let warnings = [];
|
||||
let oldWarn;
|
||||
|
||||
beforeEach(done => {
|
||||
oldWarn = console.warn;
|
||||
console.warn = m => warnings.push(m);
|
||||
done();
|
||||
});
|
||||
|
||||
afterEach(done => {
|
||||
expectWarning();
|
||||
console.warn = oldWarn;
|
||||
done();
|
||||
});
|
||||
|
||||
const expectWarning = regexp => {
|
||||
if (!regexp) {
|
||||
expect(warnings).toEqual([]);
|
||||
} else {
|
||||
expect(warnings).toEqual(
|
||||
expect.objectContaining({
|
||||
0: expect.stringMatching(regexp),
|
||||
length: 1
|
||||
})
|
||||
);
|
||||
}
|
||||
warnings.length = 0;
|
||||
};
|
||||
|
||||
it("should load the shared modules with ignored warnings", async () => {
|
||||
__webpack_share_scopes__["test-scope"] = {
|
||||
package: {
|
||||
"0": {
|
||||
get: () => () => "shared package"
|
||||
}
|
||||
},
|
||||
"@scoped/package": {
|
||||
"0": {
|
||||
get: () => Promise.resolve(() => "shared @scoped/package")
|
||||
}
|
||||
},
|
||||
"prefix/a": {
|
||||
"0": {
|
||||
get: () => () => "shared prefix/a"
|
||||
}
|
||||
},
|
||||
"prefix/deep/c": {
|
||||
"0": {
|
||||
get: () => () => "shared prefix/deep/c"
|
||||
}
|
||||
},
|
||||
"./relative1": {
|
||||
"0": {
|
||||
get: () => () => "shared relative1"
|
||||
}
|
||||
}
|
||||
};
|
||||
__webpack_share_scopes__["other-scope"] = {
|
||||
"advanced/123": {
|
||||
"1.2.beta.1": {
|
||||
get: () => () => "123"
|
||||
}
|
||||
},
|
||||
"advanced/error1": {
|
||||
"1.2.3": {
|
||||
get: () => {
|
||||
throw new Error("error1");
|
||||
}
|
||||
}
|
||||
},
|
||||
"advanced/error2": {
|
||||
"1.2.3": {
|
||||
get: () =>
|
||||
Promise.resolve().then(() => {
|
||||
throw new Error("error2");
|
||||
})
|
||||
}
|
||||
},
|
||||
"advanced/error3": {
|
||||
"1.2.3": {
|
||||
get: () =>
|
||||
Promise.resolve().then(() => () => {
|
||||
throw new Error("error3");
|
||||
})
|
||||
}
|
||||
},
|
||||
"advanced/error4": {
|
||||
"1.0.0": {
|
||||
get: () => () => "wrong"
|
||||
}
|
||||
}
|
||||
};
|
||||
{
|
||||
const result = await import("package");
|
||||
expect(result.default).toBe("shared package");
|
||||
}
|
||||
{
|
||||
const result = await import("@scoped/package");
|
||||
expect(result.default).toBe("shared @scoped/package");
|
||||
}
|
||||
{
|
||||
const result = await import("prefix/a");
|
||||
expect(result.default).toBe("shared prefix/a");
|
||||
}
|
||||
{
|
||||
const result = await import("prefix/deep/b");
|
||||
expect(result.default).toBe("b");
|
||||
}
|
||||
{
|
||||
const result = await import("prefix/deep/c");
|
||||
expect(result.default).toBe("shared prefix/deep/c");
|
||||
}
|
||||
{
|
||||
const result = await import("./relative1");
|
||||
expect(result.default).toBe("shared relative1");
|
||||
}
|
||||
{
|
||||
const result = await import("./relative2");
|
||||
expect(result.default).toBe("relative2");
|
||||
}
|
||||
{
|
||||
const result = await import("advanced/123");
|
||||
expect(result.default).toBe("123");
|
||||
}
|
||||
{
|
||||
await expect(() => import("advanced/error0")).rejects.toEqual(
|
||||
expect.objectContaining({
|
||||
message: expect.stringContaining("advanced/error0")
|
||||
})
|
||||
);
|
||||
}
|
||||
{
|
||||
await expect(() => import("advanced/error1")).rejects.toEqual(
|
||||
expect.objectContaining({
|
||||
message: expect.stringContaining("error1")
|
||||
})
|
||||
);
|
||||
}
|
||||
{
|
||||
await expect(() => import("advanced/error2")).rejects.toEqual(
|
||||
expect.objectContaining({
|
||||
message: expect.stringContaining("error2")
|
||||
})
|
||||
);
|
||||
}
|
||||
{
|
||||
await expect(() => import("advanced/error3")).rejects.toEqual(
|
||||
expect.objectContaining({
|
||||
message: expect.stringContaining("error3")
|
||||
})
|
||||
);
|
||||
}
|
||||
{
|
||||
await expect(() => import("advanced/error4")).rejects.toEqual(
|
||||
expect.objectContaining({
|
||||
message: expect.stringContaining("1.2.3")
|
||||
})
|
||||
);
|
||||
}
|
||||
});
|
||||
|
||||
it("should handle version matching correctly in strict and singleton mode", async () => {
|
||||
__webpack_share_scopes__["default"] = {
|
||||
strict0: {
|
||||
"1.1.1": {
|
||||
get: () => () => "shared strict0"
|
||||
}
|
||||
},
|
||||
strict1: {
|
||||
"1.1.1": {
|
||||
get: () => () => "shared strict1"
|
||||
}
|
||||
},
|
||||
strict2: {
|
||||
"1.1.1": {
|
||||
get: () => () => "shared strict2"
|
||||
}
|
||||
},
|
||||
strict3: {
|
||||
"1.1.1": {
|
||||
get: () => () => "shared strict3"
|
||||
}
|
||||
},
|
||||
strict4: {
|
||||
"1.1.1": {
|
||||
get: () => () => "shared strict4"
|
||||
}
|
||||
},
|
||||
strict5: {
|
||||
"1.1.1": {
|
||||
get: () => () => "shared strict5"
|
||||
}
|
||||
},
|
||||
singleton: {
|
||||
"1.1.1": {
|
||||
get: () => () => "shared singleton",
|
||||
from: 'container-a'
|
||||
}
|
||||
},
|
||||
singletonWithoutVersion: {
|
||||
"1.0.0": {
|
||||
get: () => () => "shared singleton v1.0.0",
|
||||
loaded: true
|
||||
},
|
||||
"2.0.0": {
|
||||
get: () => () => "shared singleton v2.0.0"
|
||||
}
|
||||
}
|
||||
};
|
||||
{
|
||||
const result = await import("strict0");
|
||||
expect(result.default).toBe("shared strict0");
|
||||
expectWarning();
|
||||
}
|
||||
{
|
||||
const result = await import("strict1");
|
||||
expect(result.default).toBe("strict");
|
||||
}
|
||||
{
|
||||
const result = await import("strict2");
|
||||
expect(result.default).toBe("strict");
|
||||
}
|
||||
{
|
||||
const result = await import("strict3");
|
||||
expect(result.default).toBe("strict");
|
||||
}
|
||||
{
|
||||
const result = await import("strict4");
|
||||
expect(result.default).toBe("strict");
|
||||
}
|
||||
{
|
||||
await expect(() => import("strict5")).rejects.toEqual(
|
||||
expect.objectContaining({
|
||||
message: expect.stringContaining("strict5")
|
||||
})
|
||||
);
|
||||
expectWarning();
|
||||
}
|
||||
{
|
||||
const result = await import("singleton");
|
||||
expect(result.default).toBe("shared singleton");
|
||||
expectWarning();
|
||||
}
|
||||
});
|
||||
|
||||
it("should not instantiate multiple singletons even if a higher version exists", async () => {
|
||||
__webpack_share_scopes__["default"] = {
|
||||
singletonWithoutVersion: {
|
||||
"1.0.0": {
|
||||
get: () => () => "shared singleton v1.0.0",
|
||||
loaded: true
|
||||
},
|
||||
"2.0.0": {
|
||||
get: () => () => "shared singleton v2.0.0"
|
||||
}
|
||||
}
|
||||
};
|
||||
{
|
||||
const result = await import("singletonWithoutVersion");
|
||||
expect(result.default).toBe("shared singleton v1.0.0");
|
||||
}
|
||||
});
|
1
test/configCases/sharing/consume-module-ignore-warnings/node_modules/@scoped/package/index.js
generated
vendored
Normal file
1
test/configCases/sharing/consume-module-ignore-warnings/node_modules/@scoped/package/index.js
generated
vendored
Normal file
|
@ -0,0 +1 @@
|
|||
module.exports = "@scoped/package";
|
1
test/configCases/sharing/consume-module-ignore-warnings/node_modules/package.js
generated
vendored
Normal file
1
test/configCases/sharing/consume-module-ignore-warnings/node_modules/package.js
generated
vendored
Normal file
|
@ -0,0 +1 @@
|
|||
module.exports = "package";
|
1
test/configCases/sharing/consume-module-ignore-warnings/node_modules/prefix/a.js
generated
vendored
Normal file
1
test/configCases/sharing/consume-module-ignore-warnings/node_modules/prefix/a.js
generated
vendored
Normal file
|
@ -0,0 +1 @@
|
|||
module.exports = "a";
|
1
test/configCases/sharing/consume-module-ignore-warnings/node_modules/prefix/deep/b.js
generated
vendored
Normal file
1
test/configCases/sharing/consume-module-ignore-warnings/node_modules/prefix/deep/b.js
generated
vendored
Normal file
|
@ -0,0 +1 @@
|
|||
module.exports = "b";
|
1
test/configCases/sharing/consume-module-ignore-warnings/node_modules/singleton.js
generated
vendored
Normal file
1
test/configCases/sharing/consume-module-ignore-warnings/node_modules/singleton.js
generated
vendored
Normal file
|
@ -0,0 +1 @@
|
|||
module.exports = "singleton";
|
1
test/configCases/sharing/consume-module-ignore-warnings/node_modules/singletonWithoutVersion.js
generated
vendored
Normal file
1
test/configCases/sharing/consume-module-ignore-warnings/node_modules/singletonWithoutVersion.js
generated
vendored
Normal file
|
@ -0,0 +1 @@
|
|||
module.exports = "singleton without version";
|
1
test/configCases/sharing/consume-module-ignore-warnings/node_modules/strict0.js
generated
vendored
Normal file
1
test/configCases/sharing/consume-module-ignore-warnings/node_modules/strict0.js
generated
vendored
Normal file
|
@ -0,0 +1 @@
|
|||
module.exports = "strict";
|
1
test/configCases/sharing/consume-module-ignore-warnings/node_modules/strict1.js
generated
vendored
Normal file
1
test/configCases/sharing/consume-module-ignore-warnings/node_modules/strict1.js
generated
vendored
Normal file
|
@ -0,0 +1 @@
|
|||
module.exports = "strict";
|
1
test/configCases/sharing/consume-module-ignore-warnings/node_modules/strict2.js
generated
vendored
Normal file
1
test/configCases/sharing/consume-module-ignore-warnings/node_modules/strict2.js
generated
vendored
Normal file
|
@ -0,0 +1 @@
|
|||
module.exports = "strict";
|
1
test/configCases/sharing/consume-module-ignore-warnings/node_modules/strict3.js
generated
vendored
Normal file
1
test/configCases/sharing/consume-module-ignore-warnings/node_modules/strict3.js
generated
vendored
Normal file
|
@ -0,0 +1 @@
|
|||
module.exports = "strict";
|
1
test/configCases/sharing/consume-module-ignore-warnings/node_modules/strict4.js
generated
vendored
Normal file
1
test/configCases/sharing/consume-module-ignore-warnings/node_modules/strict4.js
generated
vendored
Normal file
|
@ -0,0 +1 @@
|
|||
module.exports = "strict";
|
|
@ -0,0 +1,7 @@
|
|||
{
|
||||
"dependencies": {
|
||||
"package": "*",
|
||||
"@scoped/package": "*",
|
||||
"prefix": "*"
|
||||
}
|
||||
}
|
|
@ -0,0 +1 @@
|
|||
module.exports = "relative1";
|
|
@ -0,0 +1 @@
|
|||
module.exports = "relative2";
|
|
@ -0,0 +1,68 @@
|
|||
// eslint-disable-next-line node/no-unpublished-require
|
||||
const { ConsumeSharedPlugin } = require("../../../../").sharing;
|
||||
|
||||
/** @type {import("../../../../").Configuration} */
|
||||
module.exports = {
|
||||
mode: "development",
|
||||
output: {
|
||||
ignoreBrowserWarnings: true
|
||||
},
|
||||
plugins: [
|
||||
new ConsumeSharedPlugin({
|
||||
shareScope: "test-scope",
|
||||
consumes: [
|
||||
"package",
|
||||
"@scoped/package",
|
||||
"prefix/",
|
||||
"./relative1",
|
||||
"./relative2",
|
||||
{
|
||||
"advanced/": {
|
||||
import: false,
|
||||
requiredVersion: "^1.2.3",
|
||||
shareScope: "other-scope",
|
||||
strictVersion: true
|
||||
}
|
||||
}
|
||||
]
|
||||
}),
|
||||
new ConsumeSharedPlugin({
|
||||
consumes: {
|
||||
strict0: {
|
||||
requiredVersion: "^1.0.0",
|
||||
strictVersion: true
|
||||
},
|
||||
strict1: {
|
||||
requiredVersion: ">=1.2.0",
|
||||
strictVersion: true
|
||||
},
|
||||
strict2: {
|
||||
requiredVersion: "1.1.0",
|
||||
strictVersion: true
|
||||
},
|
||||
strict3: {
|
||||
requiredVersion: "~1.0.0",
|
||||
strictVersion: true
|
||||
},
|
||||
strict4: {
|
||||
requiredVersion: "^2.2.3",
|
||||
strictVersion: true
|
||||
},
|
||||
strict5: {
|
||||
import: false,
|
||||
requiredVersion: "alpha",
|
||||
strictVersion: true
|
||||
},
|
||||
singleton: {
|
||||
requiredVersion: "1.1.0",
|
||||
singleton: true,
|
||||
strictVersion: false
|
||||
},
|
||||
singletonWithoutVersion: {
|
||||
requiredVersion: false,
|
||||
singleton: true
|
||||
}
|
||||
}
|
||||
})
|
||||
]
|
||||
};
|
|
@ -0,0 +1,49 @@
|
|||
const expectWarning = require("../../../helpers/expectWarningFactory")();
|
||||
|
||||
it("should be able to consume different shared module version depending on context with ignored warnings", async () => {
|
||||
__webpack_share_scopes__["default"] = {
|
||||
shared: {
|
||||
"9.9.9": {
|
||||
get: () => () => "shared@9.9.9"
|
||||
},
|
||||
"1.9.9": {
|
||||
get: () => () => "shared@1.9.9"
|
||||
},
|
||||
"1.2.9": {
|
||||
get: () => () => "shared@1.2.9"
|
||||
},
|
||||
"1.2.3": {
|
||||
get: () => () => "shared@1.2.3",
|
||||
from: "mfe1"
|
||||
},
|
||||
"2.9.9": {
|
||||
get: () => () => "shared@2.9.9"
|
||||
},
|
||||
"2.3.9": {
|
||||
get: () => () => "shared@2.3.9"
|
||||
},
|
||||
"2.3.4": {
|
||||
get: () => () => "shared@2.3.4"
|
||||
},
|
||||
"3.0.0": {
|
||||
get: () => () => "shared@3.0.0"
|
||||
}
|
||||
},
|
||||
shared2: {
|
||||
"9.9.9": {
|
||||
get: () => () => "shared2@9.9.9"
|
||||
}
|
||||
}
|
||||
};
|
||||
expect(require("shared")).toBe("shared@1.9.9");
|
||||
expect(require("my-module")).toBe("shared@2.9.9");
|
||||
expect(require("my-module2")).toBe("shared@2.3.9");
|
||||
expect(() => require("my-module3")).toThrowError(
|
||||
"No satisfying version (^3.4.5) of shared module shared found in shared scope default.\n" +
|
||||
"Available versions: 9.9.9 from undefined, 1.9.9 from undefined, 1.2.9 from undefined, 1.2.3 from mfe1, 2.9.9 from undefined, 2.3.9 from undefined, 2.3.4 from undefined, 3.0.0 from undefined"
|
||||
);
|
||||
expect(require("my-module4")).toBe("shared@9.9.9");
|
||||
expectWarning();
|
||||
expect(require("shared2")).toBe("shared2@9.9.9");
|
||||
expectWarning();
|
||||
});
|
1
test/configCases/sharing/consume-multiple-versions-ignore-warnings/node_modules/my-module/index.js
generated
vendored
Normal file
1
test/configCases/sharing/consume-multiple-versions-ignore-warnings/node_modules/my-module/index.js
generated
vendored
Normal file
|
@ -0,0 +1 @@
|
|||
module.exports = require("shared");
|
5
test/configCases/sharing/consume-multiple-versions-ignore-warnings/node_modules/my-module/package.json
generated
vendored
Normal file
5
test/configCases/sharing/consume-multiple-versions-ignore-warnings/node_modules/my-module/package.json
generated
vendored
Normal file
|
@ -0,0 +1,5 @@
|
|||
{
|
||||
"dependencies": {
|
||||
"shared": "^2.3.0"
|
||||
}
|
||||
}
|
1
test/configCases/sharing/consume-multiple-versions-ignore-warnings/node_modules/my-module2/index.js
generated
vendored
Normal file
1
test/configCases/sharing/consume-multiple-versions-ignore-warnings/node_modules/my-module2/index.js
generated
vendored
Normal file
|
@ -0,0 +1 @@
|
|||
module.exports = require("shared");
|
5
test/configCases/sharing/consume-multiple-versions-ignore-warnings/node_modules/my-module2/package.json
generated
vendored
Normal file
5
test/configCases/sharing/consume-multiple-versions-ignore-warnings/node_modules/my-module2/package.json
generated
vendored
Normal file
|
@ -0,0 +1,5 @@
|
|||
{
|
||||
"devDependencies": {
|
||||
"shared": "~2.3.0"
|
||||
}
|
||||
}
|
1
test/configCases/sharing/consume-multiple-versions-ignore-warnings/node_modules/my-module3/index.js
generated
vendored
Normal file
1
test/configCases/sharing/consume-multiple-versions-ignore-warnings/node_modules/my-module3/index.js
generated
vendored
Normal file
|
@ -0,0 +1 @@
|
|||
module.exports = require("shared");
|
5
test/configCases/sharing/consume-multiple-versions-ignore-warnings/node_modules/my-module3/package.json
generated
vendored
Normal file
5
test/configCases/sharing/consume-multiple-versions-ignore-warnings/node_modules/my-module3/package.json
generated
vendored
Normal file
|
@ -0,0 +1,5 @@
|
|||
{
|
||||
"devDependencies": {
|
||||
"shared": "^3.4.5"
|
||||
}
|
||||
}
|
1
test/configCases/sharing/consume-multiple-versions-ignore-warnings/node_modules/my-module4/index.js
generated
vendored
Normal file
1
test/configCases/sharing/consume-multiple-versions-ignore-warnings/node_modules/my-module4/index.js
generated
vendored
Normal file
|
@ -0,0 +1 @@
|
|||
module.exports = require("shared");
|
5
test/configCases/sharing/consume-multiple-versions-ignore-warnings/node_modules/my-module4/package.json
generated
vendored
Normal file
5
test/configCases/sharing/consume-multiple-versions-ignore-warnings/node_modules/my-module4/package.json
generated
vendored
Normal file
|
@ -0,0 +1,5 @@
|
|||
{
|
||||
"devDependencies": {
|
||||
"shared": "*"
|
||||
}
|
||||
}
|
|
@ -0,0 +1,8 @@
|
|||
{
|
||||
"dependencies": {
|
||||
"shared2": "1.2.3 3.2.1"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"shared": "^1.0.0"
|
||||
}
|
||||
}
|
|
@ -0,0 +1,22 @@
|
|||
// eslint-disable-next-line node/no-unpublished-require
|
||||
const { ConsumeSharedPlugin } = require("../../../../").sharing;
|
||||
|
||||
/** @type {import("../../../../").Configuration} */
|
||||
module.exports = {
|
||||
output: {
|
||||
ignoreBrowserWarnings: true
|
||||
},
|
||||
plugins: [
|
||||
new ConsumeSharedPlugin({
|
||||
consumes: {
|
||||
shared: {
|
||||
import: false,
|
||||
strictVersion: true
|
||||
},
|
||||
shared2: {
|
||||
import: false
|
||||
}
|
||||
}
|
||||
})
|
||||
]
|
||||
};
|
|
@ -8609,6 +8609,11 @@ declare interface Output {
|
|||
*/
|
||||
hotUpdateMainFilename?: string;
|
||||
|
||||
/**
|
||||
* Ignore warnings in the browser.
|
||||
*/
|
||||
ignoreBrowserWarnings?: boolean;
|
||||
|
||||
/**
|
||||
* Wrap javascript code into IIFE's to avoid leaking into global scope.
|
||||
*/
|
||||
|
@ -8923,6 +8928,11 @@ declare interface OutputNormalized {
|
|||
*/
|
||||
hotUpdateMainFilename?: string;
|
||||
|
||||
/**
|
||||
* Ignore warnings in the browser.
|
||||
*/
|
||||
ignoreBrowserWarnings?: boolean;
|
||||
|
||||
/**
|
||||
* Wrap javascript code into IIFE's to avoid leaking into global scope.
|
||||
*/
|
||||
|
|
Loading…
Reference in New Issue