Move the __non_webpack_import__ re-writing into the Babel plugin

Note how we're using custom `__non_webpack_import__`-calls in the code-base, that we replace during the post-processing stage of the build, to be able to write `import`-calls that Webpack will leave alone during parsing.
This work-around is necessary since we let Babel discards all comments, given that we generally don't need/want them in the builds, hence why we cannot utilize `/* webpackIgnore: true */`-comments in the source-code.

After the changes in PR 17563 it thus seems to me that we should be able to just move this re-writing into the Babel plugin instead.
This commit is contained in:
Jonas Jenwald 2024-02-08 12:13:30 +01:00
parent d742daf4b7
commit 4ab0ad3216
4 changed files with 20 additions and 18 deletions

View File

@ -172,6 +172,22 @@ function babelPluginPDFJSPreprocessor(babel, ctx) {
); );
path.replaceWith(t.inherits(t.valueToNode(result), path.node)); path.replaceWith(t.inherits(t.valueToNode(result), path.node));
} }
if (t.isIdentifier(node.callee, { name: "__non_webpack_import__" })) {
if (node.arguments.length !== 1) {
throw new Error("Invalid `__non_webpack_import__` usage.");
}
// Replace it with a standard `import`-call and
// ensure that Webpack will leave it alone.
const source = node.arguments[0];
source.leadingComments = [
{
type: "CommentBlock",
value: "webpackIgnore: true",
},
];
path.replaceWith(t.importExpression(source));
}
}, },
BlockStatement: { BlockStatement: {
// Visit node in post-order so that recursive flattening // Visit node in post-order so that recursive flattening

View File

@ -1,3 +1,4 @@
import { Test } from "import-name"; import { Test } from "import-name";
import { Test2 } from './non-alias'; import { Test2 } from './non-alias';
export { Test3 } from "import-name"; export { Test3 } from "import-name";
await import( /*webpackIgnore: true*/"./non-alias");

View File

@ -1,3 +1,4 @@
import { Test } from 'import-alias'; import { Test } from 'import-alias';
import { Test2 } from './non-alias'; import { Test2 } from './non-alias';
export { Test3 } from 'import-alias'; export { Test3 } from 'import-alias';
await __non_webpack_import__("./non-alias");

View File

@ -419,7 +419,7 @@ function checkChromePreferencesFile(chromePrefsPath, webPrefs) {
} }
function tweakWebpackOutput(jsName) { function tweakWebpackOutput(jsName) {
const replacer = ["__non_webpack_import__\\("]; const replacer = [];
if (jsName) { if (jsName) {
replacer.push( replacer.push(
@ -431,8 +431,6 @@ function tweakWebpackOutput(jsName) {
return replace(regex, match => { return replace(regex, match => {
switch (match) { switch (match) {
case "__non_webpack_import__(":
return "import(/* webpackIgnore: true */ ";
case " __webpack_exports__ = {};": case " __webpack_exports__ = {};":
return ` __webpack_exports__ = globalThis.${jsName} = {};`; return ` __webpack_exports__ = globalThis.${jsName} = {};`;
case " __webpack_exports__ = await __webpack_exports__;": case " __webpack_exports__ = await __webpack_exports__;":
@ -1572,17 +1570,6 @@ gulp.task("types", function (done) {
}); });
function buildLibHelper(bundleDefines, inputStream, outputDir) { function buildLibHelper(bundleDefines, inputStream, outputDir) {
function babelPluginReplaceNonWebpackImport(b) {
return {
visitor: {
Identifier(curPath, state) {
if (curPath.node.name === "__non_webpack_import__") {
curPath.replaceWith(b.types.identifier("import"));
}
},
},
};
}
function preprocessLib(content) { function preprocessLib(content) {
const skipBabel = bundleDefines.SKIP_BABEL; const skipBabel = bundleDefines.SKIP_BABEL;
content = babel.transform(content, { content = babel.transform(content, {
@ -1590,10 +1577,7 @@ function buildLibHelper(bundleDefines, inputStream, outputDir) {
presets: skipBabel presets: skipBabel
? undefined ? undefined
: [["@babel/preset-env", { loose: false, modules: false }]], : [["@babel/preset-env", { loose: false, modules: false }]],
plugins: [ plugins: [[babelPluginPDFJSPreprocessor, ctx]],
babelPluginReplaceNonWebpackImport,
[babelPluginPDFJSPreprocessor, ctx],
],
targets: BABEL_TARGETS, targets: BABEL_TARGETS,
}).code; }).code;
content = content.replaceAll( content = content.replaceAll(