mirror of https://github.com/webpack/webpack.git
fix: add runtime condition for harmony reexport checked
This commit is contained in:
parent
aa7174671e
commit
a08d9d590e
|
@ -5,6 +5,7 @@
|
|||
|
||||
"use strict";
|
||||
|
||||
const ConditionalInitFragment = require("../ConditionalInitFragment");
|
||||
const Dependency = require("../Dependency");
|
||||
const { UsageState } = require("../ExportsInfo");
|
||||
const HarmonyLinkingError = require("../HarmonyLinkingError");
|
||||
|
@ -16,7 +17,11 @@ const { first, combine } = require("../util/SetHelpers");
|
|||
const makeSerializable = require("../util/makeSerializable");
|
||||
const propertyAccess = require("../util/propertyAccess");
|
||||
const { propertyName } = require("../util/propertyName");
|
||||
const { getRuntimeKey, keyToRuntime } = require("../util/runtime");
|
||||
const {
|
||||
getRuntimeKey,
|
||||
keyToRuntime,
|
||||
filterRuntime
|
||||
} = require("../util/runtime");
|
||||
const HarmonyExportInitFragment = require("./HarmonyExportInitFragment");
|
||||
const HarmonyImportDependency = require("./HarmonyImportDependency");
|
||||
const processExportInfo = require("./processExportInfo");
|
||||
|
@ -1083,8 +1088,18 @@ HarmonyExportImportedSpecifierDependency.Template = class HarmonyExportImportedS
|
|||
for (const { name, ids, checked, hidden } of mode.items) {
|
||||
if (hidden) continue;
|
||||
if (checked) {
|
||||
const connection = moduleGraph.getConnection(dep);
|
||||
const moduleKey = importedModule
|
||||
? importedModule.identifier()
|
||||
: dep.request;
|
||||
const key = `harmony reexport (checked) ${moduleKey}`;
|
||||
const runtimeCondition = dep.weak
|
||||
? false
|
||||
: connection
|
||||
? filterRuntime(runtime, r => connection.isTargetActive(r))
|
||||
: true;
|
||||
initFragments.push(
|
||||
new InitFragment(
|
||||
new ConditionalInitFragment(
|
||||
"/* harmony reexport (checked) */ " +
|
||||
this.getConditionalReexportStatement(
|
||||
module,
|
||||
|
@ -1096,7 +1111,9 @@ HarmonyExportImportedSpecifierDependency.Template = class HarmonyExportImportedS
|
|||
moduleGraph.isAsync(importedModule)
|
||||
? InitFragment.STAGE_ASYNC_HARMONY_IMPORTS
|
||||
: InitFragment.STAGE_HARMONY_IMPORTS,
|
||||
dep.sourceOrder
|
||||
dep.sourceOrder,
|
||||
key,
|
||||
runtimeCondition
|
||||
)
|
||||
);
|
||||
} else {
|
||||
|
|
|
@ -0,0 +1,5 @@
|
|||
import { utilA } from "./lib"
|
||||
|
||||
it("should not emit error when running a.js (runtime a)", () => {
|
||||
expect(utilA()).toBe("a");
|
||||
})
|
|
@ -0,0 +1,5 @@
|
|||
import { utilB } from "./lib"
|
||||
|
||||
it("should not emit error when running b.js (runtime b)", () => {
|
||||
expect(utilB()).toBe("[object Object] 1");
|
||||
})
|
|
@ -0,0 +1,6 @@
|
|||
// usually this is generated by typescript `enum common { C }`
|
||||
var common = /* @__PURE__ */ ((common) => {
|
||||
common[common["C"] = 1] = "C";
|
||||
return common;
|
||||
})(common || {}); // the `{}` (inside `common || {}`) has side effect
|
||||
export { common }
|
|
@ -0,0 +1,2 @@
|
|||
export * from "./common"
|
||||
export * from "./empty"
|
|
@ -0,0 +1,3 @@
|
|||
export * from "./util-a"
|
||||
export * from "./common"
|
||||
export * from "./util-b"
|
|
@ -0,0 +1,3 @@
|
|||
export function utilA() {
|
||||
return 'a';
|
||||
}
|
|
@ -0,0 +1,5 @@
|
|||
import { common } from "./common"
|
||||
var b = ({}).toString(); // side effect
|
||||
export function utilB() {
|
||||
return b + ' ' + common.C;
|
||||
}
|
|
@ -0,0 +1,5 @@
|
|||
module.exports = {
|
||||
findBundle() {
|
||||
return ["./lib.js", "./a.js", "./b.js"];
|
||||
}
|
||||
};
|
|
@ -0,0 +1,33 @@
|
|||
/** @type {import("webpack").Configuration} */
|
||||
module.exports = {
|
||||
entry: {
|
||||
a: "./a.js",
|
||||
b: "./b.js"
|
||||
},
|
||||
output: {
|
||||
filename: "[name].js"
|
||||
},
|
||||
target: "web",
|
||||
mode: "production",
|
||||
module: {
|
||||
rules: [
|
||||
{
|
||||
test: /lib\/common/,
|
||||
sideEffects: false
|
||||
}
|
||||
]
|
||||
},
|
||||
optimization: {
|
||||
concatenateModules: false,
|
||||
splitChunks: {
|
||||
cacheGroups: {
|
||||
lib: {
|
||||
name: "lib",
|
||||
test: /lib/,
|
||||
chunks: "all",
|
||||
minSize: 0
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
Loading…
Reference in New Issue