Skip to content

Commit 3e174e9

Browse files
authored
perf: lazy load preset-env plugins (#13076)
1 parent a647b9e commit 3e174e9

3 files changed

Lines changed: 75 additions & 66 deletions

File tree

babel.config.js

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -179,7 +179,11 @@ module.exports = function (api) {
179179
assumptions: parserAssumptions,
180180
},
181181
convertESM && {
182-
test: ["./packages/babel-cli", "./packages/babel-core"].map(normalize),
182+
test: [
183+
"./packages/babel-cli",
184+
"./packages/babel-core",
185+
"./packages/babel-preset-env/src/available-plugins.js",
186+
].map(normalize),
183187
plugins: [
184188
// Explicitly use the lazy version of CommonJS modules.
185189
["@babel/transform-modules-commonjs", { lazy: true }],

packages/babel-preset-env/src/available-plugins.js

Lines changed: 69 additions & 64 deletions
Original file line numberDiff line numberDiff line change
@@ -68,68 +68,73 @@ import bugfixSafariForShadowing from "@babel/preset-modules/lib/plugins/transfor
6868
import bugfixV8SpreadParametersInOptionalChaining from "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining";
6969

7070
export default {
71-
"bugfix/transform-async-arrows-in-class": bugfixAsyncArrowsInClass,
72-
"bugfix/transform-edge-default-parameters": bugfixEdgeDefaultParameters,
73-
"bugfix/transform-edge-function-name": bugfixEdgeFunctionName,
74-
"bugfix/transform-safari-block-shadowing": bugfixSafariBlockShadowing,
75-
"bugfix/transform-safari-for-shadowing": bugfixSafariForShadowing,
76-
"bugfix/transform-tagged-template-caching": bugfixTaggedTemplateCaching,
77-
"bugfix/transform-v8-spread-parameters-in-optional-chaining": bugfixV8SpreadParametersInOptionalChaining,
78-
"proposal-async-generator-functions": proposalAsyncGeneratorFunctions,
79-
"proposal-class-properties": proposalClassProperties,
80-
"proposal-dynamic-import": proposalDynamicImport,
81-
"proposal-export-namespace-from": proposalExportNamespaceFrom,
82-
"proposal-json-strings": proposalJsonStrings,
83-
"proposal-logical-assignment-operators": proposalLogicalAssignmentOperators,
84-
"proposal-nullish-coalescing-operator": proposalNullishCoalescingOperator,
85-
"proposal-numeric-separator": proposalNumericSeparator,
86-
"proposal-object-rest-spread": proposalObjectRestSpread,
87-
"proposal-optional-catch-binding": proposalOptionalCatchBinding,
88-
"proposal-optional-chaining": proposalOptionalChaining,
89-
"proposal-private-methods": proposalPrivateMethods,
90-
"proposal-unicode-property-regex": proposalUnicodePropertyRegex,
91-
"syntax-async-generators": syntaxAsyncGenerators,
92-
"syntax-class-properties": syntaxClassProperties,
93-
"syntax-dynamic-import": syntaxDynamicImport,
94-
"syntax-export-namespace-from": syntaxExportNamespaceFrom,
95-
"syntax-json-strings": syntaxJsonStrings,
96-
"syntax-logical-assignment-operators": syntaxLogicalAssignmentOperators,
97-
"syntax-nullish-coalescing-operator": syntaxNullishCoalescingOperator,
98-
"syntax-numeric-separator": syntaxNumericSeparator,
99-
"syntax-object-rest-spread": syntaxObjectRestSpread,
100-
"syntax-optional-catch-binding": syntaxOptionalCatchBinding,
101-
"syntax-optional-chaining": syntaxOptionalChaining,
102-
"syntax-top-level-await": syntaxTopLevelAwait,
103-
"transform-arrow-functions": transformArrowFunctions,
104-
"transform-async-to-generator": transformAsyncToGenerator,
105-
"transform-block-scoped-functions": transformBlockScopedFunctions,
106-
"transform-block-scoping": transformBlockScoping,
107-
"transform-classes": transformClasses,
108-
"transform-computed-properties": transformComputedProperties,
109-
"transform-destructuring": transformDestructuring,
110-
"transform-dotall-regex": transformDotallRegex,
111-
"transform-duplicate-keys": transformDuplicateKeys,
112-
"transform-exponentiation-operator": transformExponentialOperator,
113-
"transform-for-of": transformForOf,
114-
"transform-function-name": transformFunctionName,
115-
"transform-literals": transformLiterals,
116-
"transform-member-expression-literals": transformMemberExpressionLiterals,
117-
"transform-modules-amd": transformModulesAmd,
118-
"transform-modules-commonjs": transformModulesCommonjs,
119-
"transform-modules-systemjs": transformModulesSystemjs,
120-
"transform-modules-umd": transformModulesUmd,
121-
"transform-named-capturing-groups-regex": transformNamedCapturingGroupsRegex,
122-
"transform-new-target": transformNewTarget,
123-
"transform-object-super": transformObjectSuper,
124-
"transform-parameters": transformParameters,
125-
"transform-property-literals": transformPropertyLiterals,
126-
"transform-regenerator": transformRegenerator,
127-
"transform-reserved-words": transformReservedWords,
128-
"transform-shorthand-properties": transformShorthandProperties,
129-
"transform-spread": transformSpread,
130-
"transform-sticky-regex": transformStickyRegex,
131-
"transform-template-literals": transformTemplateLiterals,
132-
"transform-typeof-symbol": transformTypeofSymbol,
133-
"transform-unicode-escapes": transformUnicodeEscapes,
134-
"transform-unicode-regex": transformUnicodeRegex,
71+
"bugfix/transform-async-arrows-in-class": () => bugfixAsyncArrowsInClass,
72+
"bugfix/transform-edge-default-parameters": () => bugfixEdgeDefaultParameters,
73+
"bugfix/transform-edge-function-name": () => bugfixEdgeFunctionName,
74+
"bugfix/transform-safari-block-shadowing": () => bugfixSafariBlockShadowing,
75+
"bugfix/transform-safari-for-shadowing": () => bugfixSafariForShadowing,
76+
"bugfix/transform-tagged-template-caching": () => bugfixTaggedTemplateCaching,
77+
"bugfix/transform-v8-spread-parameters-in-optional-chaining": () =>
78+
bugfixV8SpreadParametersInOptionalChaining,
79+
"proposal-async-generator-functions": () => proposalAsyncGeneratorFunctions,
80+
"proposal-class-properties": () => proposalClassProperties,
81+
"proposal-dynamic-import": () => proposalDynamicImport,
82+
"proposal-export-namespace-from": () => proposalExportNamespaceFrom,
83+
"proposal-json-strings": () => proposalJsonStrings,
84+
"proposal-logical-assignment-operators": () =>
85+
proposalLogicalAssignmentOperators,
86+
"proposal-nullish-coalescing-operator": () =>
87+
proposalNullishCoalescingOperator,
88+
"proposal-numeric-separator": () => proposalNumericSeparator,
89+
"proposal-object-rest-spread": () => proposalObjectRestSpread,
90+
"proposal-optional-catch-binding": () => proposalOptionalCatchBinding,
91+
"proposal-optional-chaining": () => proposalOptionalChaining,
92+
"proposal-private-methods": () => proposalPrivateMethods,
93+
"proposal-unicode-property-regex": () => proposalUnicodePropertyRegex,
94+
"syntax-async-generators": () => syntaxAsyncGenerators,
95+
"syntax-class-properties": () => syntaxClassProperties,
96+
"syntax-dynamic-import": () => syntaxDynamicImport,
97+
"syntax-export-namespace-from": () => syntaxExportNamespaceFrom,
98+
"syntax-json-strings": () => syntaxJsonStrings,
99+
"syntax-logical-assignment-operators": () => syntaxLogicalAssignmentOperators,
100+
"syntax-nullish-coalescing-operator": () => syntaxNullishCoalescingOperator,
101+
"syntax-numeric-separator": () => syntaxNumericSeparator,
102+
"syntax-object-rest-spread": () => syntaxObjectRestSpread,
103+
"syntax-optional-catch-binding": () => syntaxOptionalCatchBinding,
104+
"syntax-optional-chaining": () => syntaxOptionalChaining,
105+
"syntax-top-level-await": () => syntaxTopLevelAwait,
106+
"transform-arrow-functions": () => transformArrowFunctions,
107+
"transform-async-to-generator": () => transformAsyncToGenerator,
108+
"transform-block-scoped-functions": () => transformBlockScopedFunctions,
109+
"transform-block-scoping": () => transformBlockScoping,
110+
"transform-classes": () => transformClasses,
111+
"transform-computed-properties": () => transformComputedProperties,
112+
"transform-destructuring": () => transformDestructuring,
113+
"transform-dotall-regex": () => transformDotallRegex,
114+
"transform-duplicate-keys": () => transformDuplicateKeys,
115+
"transform-exponentiation-operator": () => transformExponentialOperator,
116+
"transform-for-of": () => transformForOf,
117+
"transform-function-name": () => transformFunctionName,
118+
"transform-literals": () => transformLiterals,
119+
"transform-member-expression-literals": () =>
120+
transformMemberExpressionLiterals,
121+
"transform-modules-amd": () => transformModulesAmd,
122+
"transform-modules-commonjs": () => transformModulesCommonjs,
123+
"transform-modules-systemjs": () => transformModulesSystemjs,
124+
"transform-modules-umd": () => transformModulesUmd,
125+
"transform-named-capturing-groups-regex": () =>
126+
transformNamedCapturingGroupsRegex,
127+
"transform-new-target": () => transformNewTarget,
128+
"transform-object-super": () => transformObjectSuper,
129+
"transform-parameters": () => transformParameters,
130+
"transform-property-literals": () => transformPropertyLiterals,
131+
"transform-regenerator": () => transformRegenerator,
132+
"transform-reserved-words": () => transformReservedWords,
133+
"transform-shorthand-properties": () => transformShorthandProperties,
134+
"transform-spread": () => transformSpread,
135+
"transform-sticky-regex": () => transformStickyRegex,
136+
"transform-template-literals": () => transformTemplateLiterals,
137+
"transform-typeof-symbol": () => transformTypeofSymbol,
138+
"transform-unicode-escapes": () => transformUnicodeEscapes,
139+
"transform-unicode-regex": () => transformUnicodeRegex,
135140
};

packages/babel-preset-env/src/index.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ function getPluginList(proposals: boolean, bugfixes: boolean) {
8181
}
8282

8383
const getPlugin = (pluginName: string) => {
84-
const plugin = availablePlugins[pluginName];
84+
const plugin = availablePlugins[pluginName]();
8585

8686
if (!plugin) {
8787
throw new Error(

0 commit comments

Comments
 (0)