Avoid using lodash during config loading, for require() performance.
This commit is contained in:
parent
600106b9cb
commit
d4a8c7672c
@ -3,7 +3,6 @@
|
|||||||
import path from "path";
|
import path from "path";
|
||||||
import * as context from "../index";
|
import * as context from "../index";
|
||||||
import Plugin from "./plugin";
|
import Plugin from "./plugin";
|
||||||
import merge from "lodash/merge";
|
|
||||||
import {
|
import {
|
||||||
buildRootChain,
|
buildRootChain,
|
||||||
buildPresetChain,
|
buildPresetChain,
|
||||||
@ -13,10 +12,9 @@ import {
|
|||||||
} from "./config-chain";
|
} from "./config-chain";
|
||||||
import type { UnloadedDescriptor } from "./config-descriptors";
|
import type { UnloadedDescriptor } from "./config-descriptors";
|
||||||
import traverse from "@babel/traverse";
|
import traverse from "@babel/traverse";
|
||||||
import clone from "lodash/clone";
|
|
||||||
import { makeWeakCache, type CacheConfigurator } from "./caching";
|
import { makeWeakCache, type CacheConfigurator } from "./caching";
|
||||||
import { getEnv } from "./helpers/environment";
|
import { getEnv } from "./helpers/environment";
|
||||||
import { validate } from "./validation/options";
|
import { validate, type ValidatedOptions } from "./validation/options";
|
||||||
import { validatePluginObject } from "./validation/plugins";
|
import { validatePluginObject } from "./validation/plugins";
|
||||||
|
|
||||||
type LoadedDescriptor = {
|
type LoadedDescriptor = {
|
||||||
@ -141,7 +139,8 @@ export default function loadConfig(inputOpts: mixed): ResolvedConfig | null {
|
|||||||
throw e;
|
throw e;
|
||||||
}
|
}
|
||||||
|
|
||||||
const opts: Object = merge(optionDefaults, options);
|
const opts: Object = optionDefaults;
|
||||||
|
merge(opts, options);
|
||||||
|
|
||||||
// Tack the passes onto the object itself so that, if this object is passed back to Babel a second time,
|
// Tack the passes onto the object itself so that, if this object is passed back to Babel a second time,
|
||||||
// it will be in the right structure to not change behavior.
|
// it will be in the right structure to not change behavior.
|
||||||
@ -161,6 +160,30 @@ export default function loadConfig(inputOpts: mixed): ResolvedConfig | null {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function merge(target: ValidatedOptions, source: ValidatedOptions): void {
|
||||||
|
for (const k of Object.keys(source)) {
|
||||||
|
if (k === "parserOpts" && source.parserOpts) {
|
||||||
|
const parserOpts = source.parserOpts;
|
||||||
|
const targetObj = (target.parserOpts = target.parserOpts || {});
|
||||||
|
mergeObject(targetObj, parserOpts);
|
||||||
|
} else if (k === "generatorOpts" && source.generatorOpts) {
|
||||||
|
const generatorOpts = source.generatorOpts;
|
||||||
|
const targetObj = (target.generatorOpts = target.generatorOpts || {});
|
||||||
|
mergeObject(targetObj, generatorOpts);
|
||||||
|
} else {
|
||||||
|
const val = source[k];
|
||||||
|
if (val !== undefined) target[k] = (val: any);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function mergeObject<T: {}>(target: T, source: T) {
|
||||||
|
for (const k of Object.keys(source)) {
|
||||||
|
const val = source[k];
|
||||||
|
if (val !== undefined) target[k] = (val: any);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Load a generic plugin/preset from the given descriptor loaded from the config object.
|
* Load a generic plugin/preset from the given descriptor loaded from the config object.
|
||||||
*/
|
*/
|
||||||
@ -238,7 +261,7 @@ const instantiatePlugin = makeWeakCache(
|
|||||||
|
|
||||||
const plugin = Object.assign({}, pluginObj);
|
const plugin = Object.assign({}, pluginObj);
|
||||||
if (plugin.visitor) {
|
if (plugin.visitor) {
|
||||||
plugin.visitor = traverse.explode(clone(plugin.visitor));
|
plugin.visitor = traverse.explode(Object.assign({}, plugin.visitor));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (plugin.inherits) {
|
if (plugin.inherits) {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user