1# initialize
2npm init -y
3
4# install dependencies
5npm i -D babel-cli babel-preset-es2015 babel-preset-stage-0 nodemon
6
7# Babel config
8touch .babelrc
9echo '{ presets: [ "es2015", "stage-0" ] }' >> .babelrc
10
11# directory structure
12# mkdir src && touch src/index.js
13# add some es6 code to index.js for testing
14
15# run Babel
16babel-node src/index.js
17
18# add npm run scripts
Note: For the sake of simplicity, i use ES6 and ES2015 interchangeably. Both mean the same thing to me, though technically it should be called ES2015, that’s the official version name.
install Babel for code transpilation, a babel preset for ES2015, and nodemon for monitoring file changes
1npm i -D babel-cli babel-preset-es2015 nodemon
create a Babel configuration file called .babelrc
, and add your presets to it
1nano .bablerc
1{
2 presets: [ "es2015" ]
3}
test with some ES2015 code
1// path: src/index.js
2import { createServer } from 'http' // ES6 named import instead of require()
3createServer((req, res) => { // ES6 arrow function
4 res.writeHead(200, { 'Content-Type': 'text/plain' })
5 res.end('Hello World \n')
6}).listen(3000, '127.0.0.1')
7
8console.log(`Server running at http://127.0.0.1:3000`)
You can either transpile directly with the command babel-node src/index.js
or add an npm run script to run babel
1"scripts": {
2 "dev": "babel-node src/index.js"
3}
1npm run dev
1"scripts": {
2 "dev": "nodemon --exec babel-node src/index.js"
3}
Now nodemon
will watch your files and if anything changes execute the babel-node
command specified
The is all good for development. But babel-node isn’t meant to be used in production. We can add scripts though so it builds the code for production. The scripts will transpile our code and
1"scripts": {
2 "dev": "nodemon --exec babel-node src/index.js",
3 "prestart": "babel src --out-dir dist",
4 "start": "node dist/index.js"
5}
If we call our script prestart
, npm will automatically run it every time we run start
, it’ll run prestart
first.
Also, add the dist
directory to .gitignore
so we are never checking in generated code, because we don’t need to.
1echo 'dist' >> .gitignore
We can watch the whole folder, like so:
1"dev": "NODE_ENV=development nodemon -w src --exec \"babel-node src --presets=es2015,stage-0\""