babel-preset-evergreen
raw JSON → 0.11.13 verified Sat Apr 25 auth: no javascript
A Babel preset targeting modern JavaScript (ES2024) with automatic polyfill management via core-js. Current version 0.11.13 requires @babel/core ^7.29.0 and Node >=20.18.0. Unlike other presets like @babel/preset-env, evergreen focuses on evergreen browsers and offers flexible polyfill strategies (global or pure) with mini-program support. Release cadence is irregular; package is part of the best-shot ecosystem.
Common errors
error Error [ERR_REQUIRE_ESM]: require() of ES Module /path/to/babel-preset-evergreen/index.js from /path/to/project/babel.config.js not supported. ↓
cause Using require() to load babel-preset-evergreen in babel.config.js (CommonJS) while package is ESM-only.
fix
Rename file to babel.config.mjs or use the string preset name: "presets": ["evergreen"].
error Error: [BABEL] unknown preset: "babel-preset-evergreen" ↓
cause Using the full package name (including 'babel-preset-') in the presets array instead of just 'evergreen'.
fix
Use "evergreen" as the preset name. Babel resolves 'evergreen' to 'babel-preset-evergreen'.
error SyntaxError: Unexpected token 'export' (or modern feature not transpiled) ↓
cause Missing or incorrect Babel configuration; preset not applied.
fix
Ensure babel.config.json exists with correct presets array and that Babel is run on the files.
Warnings
breaking Requires Node >=20.18.0 and @babel/core ^7.29.0. Older Node or Babel versions will fail. ↓
fix Update Node to >=20.18.0 and @babel/core to ^7.29.0.
breaking ESM-only since v0.11.0. CommonJS require() throws ERR_REQUIRE_ESM. ↓
fix Use import or dynamic import. For babel config, use string preset name 'evergreen', not require().
deprecated core-js@2 is not supported; peg core-js@3 to avoid polyfill conflicts. ↓
fix Run: npm install core-js@3 --save-dev or pin in package.json.
gotcha When using polyfill option, 'usage: global' adds polyfills globally, possibly impacting other code. 'pure' adds per-file imports. ↓
fix Choose 'global' for CLIs/libraries, 'pure' for applications to avoid global scope pollution.
deprecated The 'polyfill.mini' option enables miniprogram presets which are rarely used and may be dropped. ↓
fix Avoid using polyfill.mini unless targeting miniprogram environments.
Install
npm install babel-preset-evergreen yarn add babel-preset-evergreen pnpm add babel-preset-evergreen Imports
- preset wrong
{ "presets": ["babel-preset-evergreen"] }correct{ "presets": ["evergreen"] } - default wrong
const preset = require('babel-preset-evergreen');correctimport preset from 'babel-preset-evergreen'; - polyfill option wrong
{ "presets": [ ["evergreen", { "useBuiltIns": "usage" }] ] }correct{ "presets": [ ["evergreen", { "polyfill": { "usage": "global" } }] ] }
Quickstart
// Install: npm install babel-preset-evergreen @babel/core --save-dev
// babel.config.json
{
"targets": "chrome >= 60",
"presets": [
[
"evergreen",
{
"polyfill": {
"usage": "global"
}
}
]
]
}
// This config transforms modern JS and adds global polyfills for targets chrome >= 60.