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:
parent
d742daf4b7
commit
4ab0ad3216
@ -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
|
||||||
|
@ -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");
|
||||||
|
@ -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");
|
||||||
|
20
gulpfile.mjs
20
gulpfile.mjs
@ -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(
|
||||||
|
Loading…
Reference in New Issue
Block a user