support import and require condition names

This commit is contained in:
Ivan Kopeykin 2020-05-26 00:39:18 +03:00
parent 368eec5510
commit 7f84f6be46
1 changed files with 47 additions and 1 deletions

View File

@ -17,6 +17,8 @@ const Module = require("./Module");
const ModuleFactory = require("./ModuleFactory");
const NormalModule = require("./NormalModule");
const RawModule = require("./RawModule");
const CommonJsRequireContextDependency = require("./dependencies/CommonJsRequireContextDependency");
const CommonJsRequireDependency = require("./dependencies/CommonJsRequireDependency");
const BasicEffectRulePlugin = require("./rules/BasicEffectRulePlugin");
const BasicMatcherRulePlugin = require("./rules/BasicMatcherRulePlugin");
const RuleSetCompiler = require("./rules/RuleSetCompiler");
@ -44,6 +46,8 @@ const { join } = require("./util/fs");
*/
const EMPTY_OBJECT = {};
const REQUIRE_CONDITION_NAME = { conditionNames: ["require", "..."] };
const IMPORT_CONDITION_NAME = { conditionNames: ["import", "..."] };
const MATCH_RESOURCE_REGEX = /^([^!]+)!=!/;
@ -502,8 +506,50 @@ class NormalModuleFactory extends ModuleFactory {
if (cacheEntry) return callback(null, cacheEntry);
}
const context = data.context || this.context;
const resolveOptions = data.resolveOptions || EMPTY_OBJECT;
let resolveOptions;
const dependency = dependencies[0];
if (
dependency instanceof CommonJsRequireDependency ||
dependency instanceof CommonJsRequireContextDependency
) {
if (!data.resolveOptions) {
resolveOptions = REQUIRE_CONDITION_NAME;
} else {
if (Array.isArray(data.resolveOptions.conditionNames)) {
if (data.resolveOptions.conditionNames.indexOf("require") === -1) {
resolveOptions = { ...data.resolveOptions };
resolveOptions.conditionNames = REQUIRE_CONDITION_NAME.conditionNames.slice();
} else {
resolveOptions = data.resolveOptions;
}
} else {
resolveOptions = {
...data.resolveOptions,
conditionNames: REQUIRE_CONDITION_NAME.conditionNames.slice()
};
}
}
} else {
if (!data.resolveOptions) {
resolveOptions = IMPORT_CONDITION_NAME;
} else {
if (Array.isArray(data.resolveOptions.conditionNames)) {
if (data.resolveOptions.conditionNames.indexOf("import") === -1) {
resolveOptions = { ...data.resolveOptions };
resolveOptions.conditionNames = IMPORT_CONDITION_NAME.conditionNames.slice();
} else {
resolveOptions = data.resolveOptions;
}
} else {
resolveOptions = {
...data.resolveOptions,
conditionNames: IMPORT_CONDITION_NAME.conditionNames.slice()
};
}
}
}
const request = dependency.request;
const contextInfo = data.contextInfo;
const fileDependencies = new LazySet();