What is babel-register?
The babel-register package is a tool that allows you to compile ES6/ES7 code on the fly as you run your application. It hooks into Node's require system to automatically transpile files as they are loaded, making it easier to use modern JavaScript features without needing a separate build step.
What are babel-register's main functionalities?
On-the-fly Transpilation
This feature allows you to transpile ES6/ES7 code to ES5 on the fly. By requiring 'babel-register' at the beginning of your application, you can use modern JavaScript syntax in your Node.js projects without a separate build step.
require('babel-register')({
presets: ['env']
});
// Now you can require ES6/ES7 modules
const myModule = require('./myModule');
Custom Configuration
You can customize the Babel configuration used by babel-register. This allows you to specify presets and plugins to tailor the transpilation process to your needs.
require('babel-register')({
presets: ['env'],
plugins: ['transform-runtime']
});
// Now you can require ES6/ES7 modules with custom Babel configuration
const myModule = require('./myModule');
Other packages similar to babel-register
ts-node
ts-node is a TypeScript execution environment and REPL for Node.js. It allows you to run TypeScript code directly without precompiling, similar to how babel-register works for JavaScript. While babel-register focuses on JavaScript, ts-node is specifically designed for TypeScript.
esm
esm is a package that enables ES modules in Node.js. It allows you to use import/export syntax in Node.js applications without needing to transpile your code. Unlike babel-register, which transpiles code to ES5, esm focuses on providing native ES module support.
sucrase
Sucrase is a super-fast alternative to Babel that focuses on compiling modern JavaScript syntax to a format that Node.js can understand. It is similar to babel-register in that it allows on-the-fly transpilation, but it is optimized for speed and supports a more limited set of transformations.
babel-register
The require hook will bind itself to node's require and automatically compile files on the fly.
One of the ways you can use Babel is through the require hook. The require hook
will bind itself to node's require
and automatically compile files on the
fly. This is equivalent to CoffeeScript's
coffee-script/register.
Install
npm install babel-register --save-dev
Usage
require("babel-register");
All subsequent files required by node with the extensions .es6
, .es
, .jsx
and .js
will be transformed by Babel.
Polyfill not included
You must include the polyfill separately
when using features that require it, like generators.
Ignores node_modules
by default
NOTE: By default all requires to node_modules
will be ignored. You can
override this by passing an ignore regex via:
require("babel-register")({
ignore: false
});
Specifying options
require("babel-register")({
ignore: /regex/,
ignore: function(filename) {
if (filename === "/path/to/es6-file.js") {
return false;
} else {
return true;
}
},
only: /my_es6_folder/,
extensions: [".es6", ".es", ".jsx", ".js"],
cache: true
});
You can pass in all other options as well,
including plugins
and presets
. But note that the closest .babelrc
to each file still applies, and takes precedence over any options you pass in here.
Environment variables
By default babel-node
and babel-register
will save to a json cache in your
temporary directory.
This will heavily improve with the startup and compilation of your files. There
are however scenarios where you want to change this behaviour and there are
environment variables exposed to allow you to do this.
BABEL_CACHE_PATH
Specify a different cache location.
BABEL_CACHE_PATH=/foo/my-cache.json babel-node script.js
BABEL_DISABLE_CACHE
Disable the cache.
BABEL_DISABLE_CACHE=1 babel-node script.js