optimize NormalModuleFactory

This commit is contained in:
Tobias Koppers 2019-01-19 01:52:31 +01:00
parent 9debdd3bc6
commit a521ca1372
1 changed files with 49 additions and 56 deletions

View File

@ -309,25 +309,28 @@ class NormalModuleFactory extends ModuleFactory {
compiler: contextInfo.compiler
});
const settings = {};
const useLoadersPost = [];
const useLoaders = [];
const useLoadersPre = [];
let useLoadersPost = undefined;
let useLoadersNormal = undefined;
let useLoadersPre = undefined;
for (const r of result) {
if (r.type === "use") {
if (r.enforce === "post" && !noPrePostAutoLoaders) {
if (useLoadersPost === undefined) useLoadersPost = [];
useLoadersPost.push(r.value);
} else if (
r.enforce === "pre" &&
!noPreAutoLoaders &&
!noPrePostAutoLoaders
) {
if (useLoadersPre === undefined) useLoadersPre = [];
useLoadersPre.push(r.value);
} else if (
!r.enforce &&
!noAutoLoaders &&
!noPrePostAutoLoaders
) {
useLoaders.push(r.value);
if (useLoadersNormal === undefined) useLoadersNormal = [];
useLoadersNormal.push(r.value);
}
} else if (
typeof r.value === "object" &&
@ -341,65 +344,55 @@ class NormalModuleFactory extends ModuleFactory {
}
}
let postLoaders, normalLoaders, preLoaders;
const useLoaders = [];
if (useLoadersPost !== undefined) {
for (const loader of useLoadersPost) useLoaders.push(loader);
}
const loadersPos = useLoaders.length;
if (useLoadersNormal !== undefined) {
for (const loader of useLoadersNormal) useLoaders.push(loader);
}
if (useLoadersPre !== undefined) {
for (const loader of useLoadersPre) useLoaders.push(loader);
}
const continueCallback = needCalls(3, err => {
if (err) {
return callback(err);
}
const allLoaders = postLoaders;
for (const loader of loaders) allLoaders.push(loader);
for (const loader of normalLoaders) allLoaders.push(loader);
for (const loader of preLoaders) allLoaders.push(loader);
const type = settings.type;
const resolveOptions = settings.resolve;
Object.assign(data.createData, {
request: stringifyLoadersAndResource(allLoaders, resource),
userRequest,
rawRequest: request,
loaders: allLoaders,
resource,
matchResource,
resourceResolveData,
settings,
type,
parser: this.getParser(type, settings.parser),
generator: this.getGenerator(type, settings.generator),
resolveOptions
});
callback();
});
this.resolveRequestArray(
contextInfo,
this.context,
useLoadersPost,
loaderResolver,
resolveContext,
(err, result) => {
postLoaders = result;
continueCallback(err);
}
);
this.resolveRequestArray(
contextInfo,
this.context,
useLoaders,
loaderResolver,
resolveContext,
(err, result) => {
normalLoaders = result;
continueCallback(err);
}
);
this.resolveRequestArray(
contextInfo,
this.context,
useLoadersPre,
loaderResolver,
resolveContext,
(err, result) => {
preLoaders = result;
continueCallback(err);
(err, resolvedLoaders) => {
if (err) {
return callback(err);
}
const allLoaders = [];
for (let i = 0; i < resolvedLoaders.length; i++) {
if (i === loadersPos) {
for (const loader of loaders) allLoaders.push(loader);
}
allLoaders.push(resolvedLoaders[i]);
}
if (resolvedLoaders.length === loadersPos) {
for (const loader of loaders) allLoaders.push(loader);
}
const type = settings.type;
const resolveOptions = settings.resolve;
Object.assign(data.createData, {
request: stringifyLoadersAndResource(allLoaders, resource),
userRequest,
rawRequest: request,
loaders: allLoaders,
resource,
matchResource,
resourceResolveData,
settings,
type,
parser: this.getParser(type, settings.parser),
generator: this.getGenerator(type, settings.generator),
resolveOptions
});
callback();
}
);
});