The compiler for writing next generation JavaScript.
Check out our website: babeljs.io
For questions and support please visit our discussion forum, sign up for our Slack community, or StackOverflow.
We are in the process of moving our issues from phabricator back to github issues! Check out https://github.com/babel/phabricator-to-github for more info
Bugs and feature requests should be posted at phabricator.babeljs.io.
You can directly translate a github issue to phabricator; just add a T to the beginning of the issue.
https://phabricator.babeljs.io/T2168
corresponds to
https://github.com/babel/babel/issues/2168
Want to report an issue with babeljs.io (the website)?
For documentation and website issues please visit the babel/babel.github.iorepo.
Check out our CONTRIBUTING.md. If you have already joined slack, join our #development channel!
Our discussions/notes/roadmap: babel/notes
The Babel repo is managed as a monorepo; it's composed of many npm packages.
| Package | Version | Dependencies |
|---|---|---|
babel-core |
||
babylon |
||
babel-traverse |
||
babel-generator |
babel-core is the Babel compiler itself; it exposes the babel.transform method, where transformedCode = transform(src).code.
The compiler can be broken down into 3 parts:
- The parser:
babylon(moved to a seperate repo and versioned independently) - The transformer[s]: All the plugins/presets
- These all use
babel-traverseto traverse through the AST
- These all use
- The generator:
babel-generator
The flow goes like this:
input string -> babylon parser -> AST -> transformer[s] -> AST -> babel-generator -> output string
Check out the babel-handbook for more information on this.
| Package | Version | Dependencies |
|---|---|---|
babel-cli |
||
babel-types |
||
babel-polyfill |
||
babel-runtime |
||
babel-register |
||
babel-template |
||
babel-helpers |
||
babel-code-frame |
babel-cliis the CLI tool that runsbabel-coreand helps with outputting to a directory, a file, stdout and more (also includesbabel-node). Check out the docs.babel-typesis used to validate, build, change AST nodes.babel-polyfillis literally a wrapper aroundcore-jsand regenerator-runtime. Check out the docs.babel-runtimeis similar to the polyfill except that it doesn't modify the global scope and is to be used withbabel-plugin-transform-runtime(usually in library/plugin code). Check out the docsbabel-registeris a way to automatically compile files with babel on the fly by binding to node's require. Check out the docsbabel-templateis a helper function to make AST nodes. Instead you can pass a string representing the code you want to create rather than tediously building them usingbabel-types.babel-helpersis a set of premadebabel-templatefunctions that are used in some babel plugins.babel-code-frameis a standalone package used to generate errors that prints the source code and points to error locations.
After Babel 6, the default transforms were removed; if you don't specify any plugins/presets it will just return the original source code.
The transformer[s] used in Babel are the independent pieces of code that transform specific things. For example: the es2015-arrow-functions transform specifically changes arrow functions into a regular function. Presets are just simply an array of plugins that make it easier to run a whole a set of transforms without specifying each one manually.
There are a few presets that we maintain officially.
| Package | Version | Dependencies |
|---|---|---|
babel-preset-es2015 |
||
babel-preset-es2016 |
||
babel-preset-stage-0 |
||
babel-preset-stage-1 |
||
babel-preset-stage-2 |
||
babel-preset-stage-3 |
||
babel-preset-react |
We maintain:
- a preset for each yearly release of ECMAScript (Javascript) starting from ES6/ES2015
- a preset for react (JSX/Flow)
- a preset for each stage (0-3) of the TC-39 Process for ECMAScript proposals.
You can find community maintained presets on npm
Plugins are the heart of Babel and what make it work.
You can find community plugins on npm.
There are many kinds of plugins: ones that convert ES6/ES2015 to ES5, transform to ES3, minification, JSX, flow, experimental features, and more.
These just enable the transform plugins to be able to parse certain features (the transform plugins already include the syntax plugins so you don't need both).
These are mostly for internal use in plugins.
babelthe deprecatedbabelpackage on npm that was used in Babel 5.babel-messagesa package to keep error messages, etc (not always used)