Home

Awesome

#broccoli-es6modules

Dependency Status devDependency Status

Unmaintained! This project is no longer being maintained by the Ember CLI team.
Ember CLI has switched over to the broccoli-babel-transpiler and ember-cli-babel plugins.
If you would like to take off maintenance of this project please let us know!

ES6Modules is a broccoli filter that transpiles source code in a project from ES6 modules to ES5 modules in AMD, CJS, or UMD styles.

ES6Modules has two modes of transpilation: 1-to-1 (per-file) and n-to-1 (bundled);

1-to-1 transpiles

1-to-1 mode transpiles every file in a tree from ES6 to the format specified as the format option.

For example, if you have the following directory:

src/
├── lib
│   ├── promise.js
│   ├── rsvp.js
│   └── utils.js
└── main.js

And convert the files using ES6Modules:

var tree = './src';
var ES6Modules = require('broccoli-es6modules');
var amdFiles = new ES6Modules(tree, {
  format: 'amd'
});

You will have the following tree in your compiled output

├── lib
│   ├── promise.js
│   ├── rsvp.js
│   └── utils.js
└── main.js

And each file's contents will be converted from ES6 module syntax to AMD style.

n-to-1 bundled transpiles

n-to-1 mode begins transpiling at a single entry point and walks the dependency graph starting with the imported statements in the entry point.

This will result in a single, bundled file for your library containing any files referenced by import statements. Enable this mode by supplying a bundleOptions option with (at least) a name for your resulting file and a file to be the entry point:

For example, if you have the following directory:

src/
├── lib
│   ├── promise.js
│   ├── rsvp.js
│   └── utils.js
└── main.js

And convert these files using ES6Modules:

var tree = './src';
var ES6Modules = require('broccoli-es6modules');
var amdFiles = new ES6Modules(tree, {
  format: 'amd',
  bundleOptions: {
    entry: 'main.js',
    name: 'myLib'
  }
});

You will have the following tree in your compiled output

└── myLib.js

The contents of that file will be any code imported from main.js's import process.

Options

format

The ES5 module format to convert to. Available options are:

In namedAmd the file path (with '.js' removed) of the file relative to the tree root is used as the module's name.

So, if you have the following tree:


├── inner
│   └── first.js
└── outer.js

You will have the following module names passed to AMD's define call: 'bundle', 'inner/first', and 'outer'.

Because this strategy combined with UMD would result in many properties being set on the window object in the browser, umd format will throw an error if used without also providing bundleOptions.

formatModuleName

An optional function for namedAmd module format to customize the module name passed to esperanto.

For example if you have foo/bar.js:

export default function() {
}

and a formatModuleName option of:

formatModuleName: function(moduleName) {
  return moduleName.replace('foo/', '');
}

Esperanto will give you:

define('bar', ['exports'], function(exports) {

  'use strict';

  exports['default'] = function() {
  }

});

esperantoOptions

ES6Modules wraps the esperanto library. All options described for esperanto can be provided here. All defaults are identical to those used by esperanto.

Because the ES6Modules uses each file's name as its module name, the esperanto amdName and sourceMapSource options are ignored.

bundleOptions

ES6Modules wraps the esperanto library. All options described for esperanto bundling can be provided here. All defaults are identical to those used by esperanto.

The value you provide for esperantoOptions will be passed to result of bundling, resulting in a single output file.