Merge pull request #14435 from webpack/bugfix/webpack-extension

This commit is contained in:
Tobias Koppers 2021-10-08 15:10:29 +02:00 committed by GitHub
commit ada210827a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 74 additions and 60 deletions

View File

@ -466,49 +466,68 @@ class NormalModuleFactory extends ModuleFactory {
: "") + : "") +
stringifyLoadersAndResource(loaders, resourceData.resource); stringifyLoadersAndResource(loaders, resourceData.resource);
const resourceDataForRules = matchResourceData || resourceData;
const result = this.ruleSet.exec({
resource: resourceDataForRules.path,
realResource: resourceData.path,
resourceQuery: resourceDataForRules.query,
resourceFragment: resourceDataForRules.fragment,
scheme,
assertions,
mimetype: matchResourceData ? "" : resourceData.data.mimetype || "",
dependency: dependencyType,
descriptionData: matchResourceData
? undefined
: resourceData.data.descriptionFileData,
issuer: contextInfo.issuer,
compiler: contextInfo.compiler,
issuerLayer: contextInfo.issuerLayer || ""
});
const settings = {}; const settings = {};
const useLoadersPost = []; const useLoadersPost = [];
const useLoaders = []; const useLoaders = [];
const useLoadersPre = []; const useLoadersPre = [];
for (const r of result) {
if (r.type === "use") { // handle .webpack[] suffix
if (!noAutoLoaders && !noPrePostAutoLoaders) { let resource;
useLoaders.push(r.value); let match;
if (
matchResourceData &&
typeof (resource = matchResourceData.resource) === "string" &&
(match = /\.webpack\[([^\]]+)\]$/.exec(resource))
) {
settings.type = match[1];
matchResourceData.resource = matchResourceData.resource.slice(
0,
-settings.type.length - 10
);
} else {
settings.type = "javascript/auto";
const resourceDataForRules = matchResourceData || resourceData;
const result = this.ruleSet.exec({
resource: resourceDataForRules.path,
realResource: resourceData.path,
resourceQuery: resourceDataForRules.query,
resourceFragment: resourceDataForRules.fragment,
scheme,
assertions,
mimetype: matchResourceData
? ""
: resourceData.data.mimetype || "",
dependency: dependencyType,
descriptionData: matchResourceData
? undefined
: resourceData.data.descriptionFileData,
issuer: contextInfo.issuer,
compiler: contextInfo.compiler,
issuerLayer: contextInfo.issuerLayer || ""
});
for (const r of result) {
if (r.type === "use") {
if (!noAutoLoaders && !noPrePostAutoLoaders) {
useLoaders.push(r.value);
}
} else if (r.type === "use-post") {
if (!noPrePostAutoLoaders) {
useLoadersPost.push(r.value);
}
} else if (r.type === "use-pre") {
if (!noPreAutoLoaders && !noPrePostAutoLoaders) {
useLoadersPre.push(r.value);
}
} else if (
typeof r.value === "object" &&
r.value !== null &&
typeof settings[r.type] === "object" &&
settings[r.type] !== null
) {
settings[r.type] = cachedCleverMerge(settings[r.type], r.value);
} else {
settings[r.type] = r.value;
} }
} else if (r.type === "use-post") {
if (!noPrePostAutoLoaders) {
useLoadersPost.push(r.value);
}
} else if (r.type === "use-pre") {
if (!noPreAutoLoaders && !noPrePostAutoLoaders) {
useLoadersPre.push(r.value);
}
} else if (
typeof r.value === "object" &&
r.value !== null &&
typeof settings[r.type] === "object" &&
settings[r.type] !== null
) {
settings[r.type] = cachedCleverMerge(settings[r.type], r.value);
} else {
settings[r.type] = r.value;
} }
} }
@ -528,23 +547,6 @@ class NormalModuleFactory extends ModuleFactory {
} }
for (const loader of preLoaders) allLoaders.push(loader); for (const loader of preLoaders) allLoaders.push(loader);
let type = settings.type; let type = settings.type;
if (!type) {
let resource;
let match;
if (
matchResourceData &&
typeof (resource = matchResourceData.resource) === "string" &&
(match = /\.webpack\[([^\]]+)\]$/.exec(resource))
) {
type = match[1];
matchResourceData.resource = matchResourceData.resource.slice(
0,
-type.length - 10
);
} else {
type = "javascript/auto";
}
}
const resolveOptions = settings.resolve; const resolveOptions = settings.resolve;
const layer = settings.layer; const layer = settings.layer;
if (layer !== undefined && !layers) { if (layer !== undefined && !layers) {

View File

@ -14,8 +14,14 @@ const config = (i, options) => ({
module: { module: {
rules: [ rules: [
{ {
test: /\.css$/, oneOf: [
use: [MCEP.loader, "css-loader"] {
test: /\.css$/,
use: [MCEP.loader, "css-loader"]
},
{ test: /\.js$/ },
{ type: "asset" }
]
} }
] ]
}, },

View File

@ -8,9 +8,15 @@ module.exports = {
}, },
rules: [ rules: [
{ {
test: /\.css\.js$/, oneOf: [
use: "./loader", {
type: "asset/source" test: /\.css\.js$/,
use: "./loader",
type: "asset/source"
},
{ test: /\.(js|jpg|png)$/ },
{ type: "asset/resource" }
]
} }
] ]
}, },