Writing and publishing ES2015 today
James Allardice
ES2015?
- New name for latest version of ECMAScript spec
- Still commonly known as ES6
- Final draft released in April 2015 [1]
- Engines gradually implementing new features

Transpilation
- Convert ES6 into valid ES5
- Source-to-source compilers
- Babel and Traceur
- Babel is winning the race [1]

Getting started
- Keep source and transpiled code separate
- Common convention is
src/andlib/ - Keep
lib/out of source control -
npm install -g babel
package.json
{
"name": "my-es6-project",
"version": "0.1.0",
"scripts": {
"compile": "babel -sd lib/ src/",
"test": "mocha test/ -R spec --recursive --compilers es6:babel/register"
},
"main": "lib/my-es6-project.js",
"dependencies": {
"core-js": "^0.8.4"
},
"devDependencies": {
"babel": "^5.1.10",
"chai": "^2.1.2",
"mocha": "^2.0.1"
}
}
package.json
{
"name": "my-es6-project",
"version": "0.1.0",
"scripts": {
"compile": "babel -sd lib/ src/",
"test": "mocha test/ -R spec --recursive --compilers es6:babel/register"
},
"main": "lib/my-es6-project.js",
"dependencies": {
"core-js": "^0.8.4"
},
"devDependencies": {
"babel": "^5.1.10",
"chai": "^2.1.2",
"mocha": "^2.0.1"
}
}
package.json
{
"name": "my-es6-project",
"version": "0.1.0",
"scripts": {
"compile": "babel -sd lib/ src/",
"test": "mocha test/ -R spec --recursive --compilers es6:babel/register"
},
"main": "lib/my-es6-project.js",
"dependencies": {
"core-js": "^0.8.4"
},
"devDependencies": {
"babel": "^5.1.10",
"chai": "^2.1.2",
"mocha": "^2.0.1"
}
}
package.json
{
"name": "my-es6-project",
"version": "0.1.0",
"scripts": {
"compile": "babel -sd lib/ src/",
"test": "mocha test/ -R spec --recursive --compilers es6:babel/register"
},
"main": "lib/my-es6-project.js",
"dependencies": {
"core-js": "^0.8.4"
},
"devDependencies": {
"babel": "^5.1.10",
"chai": "^2.1.2",
"mocha": "^2.0.1"
}
}
package.json
{
"name": "my-es6-project",
"version": "0.1.0",
"scripts": {
"compile": "babel -sd lib/ src/",
"test": "mocha test/ -R spec --recursive --compilers es6:babel/register"
},
"main": "lib/my-es6-project.js",
"dependencies": {
"core-js": "^0.8.4"
},
"devDependencies": {
"babel": "^5.1.10",
"chai": "^2.1.2",
"mocha": "^2.0.1"
}
}
package.json
{
"name": "my-es6-project",
"version": "0.1.0",
"scripts": {
"compile": "babel -sd lib/ src/",
"test": "mocha test/ -R spec --recursive --compilers es6:babel/register"
},
"main": "lib/my-es6-project.js",
"dependencies": {
"core-js": "^0.8.4"
},
"devDependencies": {
"babel": "^5.1.10",
"chai": "^2.1.2",
"mocha": "^2.0.1"
}
}
Writing ES6
- Use
.es6extention for GitHub - Only use a standard library polyfill if necessary
- Many ES6 guides available [1]
Publishing to npm
- Use a
prepublishscript - Widely used already for e.g. CoffeeScript
- Add an
.npmignorefile to excludesrc/
{
...
"scripts": {
"compile": "babel -sd lib/ src/",
"prepublish": "npm run compile",
"test": "mocha test/ -R spec --recursive --compilers es6:babel/register"
},
...
}
package.json
src/.npmignore
Further explorations
- Publishing transpiled ES6 to Bower
- On-the-fly transpilation for apps
Questions?
Copy of Writing and publishing ES2015 today
By Mike Harris
Copy of Writing and publishing ES2015 today
An exploration into how you can start writing and publishing ES6 modules to npm right now.
- 337