A tool that tries to automatically update most dependencies, config files, and JavaScript files that require Babel packages directly to Babel v7 (and more in the future).
Run at the root of your git repo:
If using npm < v5.2.0, install npx globally.
# npx lets you run babel-upgrade without installing it locally
npx babel-upgrade
# or install globally and run
npm install babel-upgrade -g
babel-upgrade
Optionally use --install
to run yarn
or npm
after the upgrade.
npx babel-upgrade --install
Ideas from http://new.babeljs.io/docs/en/next/v7-migration.html (or modify that file if it's missing)
- Works on Node >= 4 (anything lower isn't supported in v7) (#16)
- Run npm/yarn after updating dependencies (use
--install
) (#18) - Update
package.json
:dependencies
anddevDependencies
to the "latest supported" version.
{
"devDependencies": {
+ "@babel/core": "7.0.0-beta.39",
+ "@babel/plugin-proposal-object-rest-spread": "7.0.0-beta.39",
+ "@babel/preset-env": "7.0.0-beta.39",
+ "babel-loader": "v8.0.0-beta.0"
- "babel-loader": "6.0.0",
- "babel-plugin-transform-object-rest-spread": "6.0.0",
- "babel-preset-env": "^1.0.0",
},
}
- modify scripts for mocha +
@babel/register
(e81cf7)
{
"name": "mocha-scripts-test",
"scripts": {
- "test": "mocha --compilers js:babel-register --require babel-polyfill test/*Test.js",
+ "test": "mocha --compilers js:@babel/register --require @babel/polyfill test/*Test.js",
}
}
- use
"babel-core": "^7.0.0-bridge-0"
if jest is a dependency (#14)
"devDependencies": {
"@babel/core": "7.0.0-beta.39",
+ "babel-core": "7.0.0-bridge.0",
"jest": "^22.0.0"
},
"scripts": {
"test": "jest"
}
- add new
@babel/node
package ifbabel-node
is used (#14)
"devDependencies": {
"@babel/cli": "7.0.0-beta.39",
+ "@babel/node": "7.0.0-beta.39"
},
"scripts": {
"start": "babel-node a.js"
}
- Handle all nested
.babelrc
(#14)
- src/
- example/
- .babelrc // now modifies these too
- test/
- .babelrc // now modifies these too
- `.babelrc`
- rename config files to swap shorthand form to long form
{
"presets": [
+ "@babel/preset-env"
- "env"
]
}
-
package.json babel key
(d123ad)
{
"babel": {
"presets": [
+ "@babel/preset-env"
- "env"
]
}
}
- handle
env
(e9fc42)
{
"babel": {
"presets": [
"@babel/preset-env"
]
},
"env": {
"development": {
"plugins": [
- "transform-react-jsx-source",
- "babel-plugin-transform-react-jsx-self"
+ "@babel/plugin-transform-react-jsx-source",
+ "@babel/plugin-transform-react-jsx-self",
]
}
}
}
- Modify
mocha.opts
(e81cf7)
---require babel-register
+--require @babel/register
- Convert comma separated presets/plugins into an array (#37)
{
- "presets": "env, react",
+ "presets": ["env", "react"],
- handle react + flow preset being split. Read if
.flowconfig
and add it? (#21)
{
"@babel/preset-react": "7.0.0-beta.39",
+ "@babel/preset-flow": "7.0.0-beta.39"
}
- Log when replacing out preset-es2015,16,17,latest as FYI
- Figure out how to change nested .babelrcs into using "overrides" instead
- Monorepo support
-
.babelrc.js
and other js files with a config like presets,webpack.config.js
- convert
only
/ignore
if necessary - remove
typeof-symbol
if using@babel/preset-env
+ loose - Update test files that use babel directly (
babel-types
->@babel/types
,babel-core
)- Update all requires/imports
- Update the use of the Babel API (plugins, integrations)
- Modify other config files as we go
- Add to the upgrade guide which parts are autofixable and the command (if we care enough to make this individually runnable too infrastructure wise)
- May need to add a warning on any 3rd party plugins since they might not be compatible
- Handle the differences in plugins in v7 for default/loose/spec
- Should certain parts be generic (replace the string
babel-register
with@babel/register
)? Could be in a Makefile or somewhere else, but it's just find replace.
- Move this into the monorepo when somewhat ready
- Maybe move into
@babel/cli
? - Or just another package that is intended to be used via
npx/globally
- Maybe move into
- Whenever there is a breaking change in a PR we should also update this tool when possible or at least provide a warning
- What about with a regression?
- Can be used for non-major bumps too - just for updating to the latest version.
- Include mini-changelog?
- Maybe the version should just reflect the version that it targets?
$ npm i
$ npm start