Babel transformer: Use envName to hint default value of dev, don't mutate process.env.BABEL_ENV#55806
Open
Babel transformer: Use envName to hint default value of dev, don't mutate process.env.BABEL_ENV#55806
envName to hint default value of dev, don't mutate process.env.BABEL_ENV#55806Conversation
…hDevTools`, infer from `env()` instead. (#55805) Summary: Currently the RN Babel preset has this surprising bit of behaviour: ```js module.exports = (options, babel) => { if (options.withDevTools == null) { const env = process.env.BABEL_ENV || process.env.NODE_ENV; if (!env || env === 'development') { return getPreset(null, {...options, dev: true}, babel); } } return getPreset(null, options, babel); }; ``` If the (undocumented, otherwise unused) `withDevTools` option is set (to anything), we will override any given value of `dev` to `true` if `BABEL_ENV` || `NODE_ENV || 'development' === 'development'`. To put that another way, with `NODE_ENV=development` and `BABEL_ENV` unset, we would always produce a dev bundle even if `{ dev: false }` Expo sets `withDevTools: false` to stop this happening, and always set `dev` (so this diff means **no observable change under Expo**): https://github.com/expo/expo/blob/4a46dbff7a5a77d9fe06d30a70d7fab38cfc7f9a/packages/babel-preset-expo/build/index.js#L235-L236 This odd-looking override was introduced in 2017 in bc22a4d / D5237158 as a way to gate `babel/plugin-transform-react-jsx-source`, *before the preset accepted any other options* - it was never intended to override `dev`. Now, we gate that same plugin under `options.dev`. ## Inferring `dev` when unspecified The one potentially load-bearing piece of this is that, when a consumer specifies neither `withDevTools` nor `dev` (or maybe no options at all), this code serves to infer it from `process.env.BABEL_ENV || process.env.NODE_ENV`, which is reasonable and actually closer to the way typical plugins/presets work, but a better mechanism compatible with Babel's cache is to use the `env()` API (which defaults to `process.env.BABEL_ENV || process.env.NODE_ENV`, so preserves behaviour). https://babeljs.io/docs/config-files#apienv ## This change - Removes the obsolete use of `withDevToolss`, and never overrides the explicitly-passed `dev` - Where `dev` is not specified, falls back to the Babel environment. Changelog: [General][Fixed] Babel-preset: Don't override explicitly-passed `dev` config if obsolete `withDevTools` is missing Reviewed By: huntie Differential Revision: D94660480
…t mutate `process.env.BABEL_ENV` Summary: After #55805, the RN Babel preset no longer reads `process.env.BABEL_ENV` directly, instead using Babel's `env()` API, which is both cache-aware and properly respects explicit `envName` config. See: - https://babeljs.io/docs/config-files#apienv - https://babeljs.io/docs/options#envname Now, instead of mutating `process.env.BABEL_ENV` to force the environment for a transform, we can specify `envName` instead. Changelog: [Internal] Differential Revision: D94662935
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary:
After #55805, the RN Babel preset no longer reads
process.env.BABEL_ENVdirectly, instead using Babel'senv()API, which is both cache-aware and properly respects explicitenvNameconfig.See:
Now, instead of mutating
process.env.BABEL_ENVto force the environment for a transform, we can specifyenvNameinstead.Changelog: [Internal]
Differential Revision: D94662935