An ES6 Module Loader shim
npm install steal-es6-module-loader_For upgrading to ES6 Module Loader 0.16, read the release notes here._
Dynamically loads ES6 modules in browsers and NodeJS with support for loading existing and custom module formats through loader hooks.
This project implements dynamic module loading through System exactly to the previous ES6-specified loader API at 2014-08-24 ES6 Specification Draft Rev 27, Section 15 and is being converted to track the newly redrafted specification at https://github.com/whatwg/loader (work in progress at https://github.com/ModuleLoader/es6-module-loader/pull/317).
* Provides an asynchronous loader (System.import) to dynamically load ES6 modules.
* Supports both Traceur and Babel for compiling ES6 modules and syntax into ES5 in the browser with source map support.
* Fully supports ES6 circular references and live bindings.
* Includes baseURL and paths implementations.
* Can be used as a tracing tool for static analysis of modules.
* Polyfills ES6 Promises in the browser with an optionally bundled ES6 promise implementation.
* Supports IE8+, with IE9+ support for ES6 development without pre-compilation.
* The complete combined polyfill, including ES6 promises, comes to 9KB minified and gzipped, making it suitable for production use, provided that modules are built into ES5 making them independent of Traceur.
For an overview of build workflows, see the production guide.
For an example of a universal module loader based on this polyfill for loading AMD, CommonJS and globals, see SystemJS.
* A brief overview of ES6 module syntax
* Configuring the loader
* Production workflows
* Circular References & Bindings
* Extending the loader through loader hooks
* Tracing API
If using ES6 syntax (optional), include traceur.js or babel.js in the page first then include es6-module-loader.js:
``html`
To use Babel, load Babel's browser.js instead and set the transpiler to babel with the loader configuration:
`html`
Then we can write any ES6 module:
mymodule.js:
`javascript`
export class q {
constructor() {
console.log('this is an es6 class!');
}
}
and load the module dynamically in the browser
`html`
The dynamic loader returns a Module object, which contains getters for the named exports (in this case, q).
#### Setting transpilation options
If using Traceur, these can be set with:
`javascript`
System.traceurOptions = {...};
Or with Babel:
`javascript`
System.babelOptions = {...};
#### Module Tag
As well as defining window.System, this polyfill provides support for the
`
Because it is only possible to load ES6 modules with this tag, it is not suitable for production use in this way.
See the demo folder in this repo for a working example demonstrating module loading in the browser both with System.import and with the module-type script tag.
#### NodeJS Use
``
npm install es6-module-loader babel traceur
It is important that Babel or Traceur is installed into the path in order to be found, since these are no longer project dependencies.
For use in NodeJS, the Loader and System globals are provided as exports:
index.js:
`javascript
var System = require('es6-module-loader').System;
/*
* Include:
* System.transpiler = 'babel';
* to use Babel instead of Traceur
*/
System.import('some-module').then(function(m) {
console.log(m.p);
});
`
some-module.js:
`javascript`
export var p = 'NodeJS test';
Running the application:
``
> node index.js
NodeJS test
_Also, please don't edit files in the "dist" subdirectory as they are generated via grunt. You'll find source code in the "lib" subdirectory!_
- npm run test:node will use node to to run the testsnpm run test:browser
- will run npm run test:browser-babel and npm run test:browser-traceurnpm run test:browser-[transpiler]
- use karma to run the tests with Traceur or Babel.npm run test:browser:perf
- will use karma to run benchmarks
npm run test:browser-[transpiler] supports options after a double dash (--) :
- You can use the --polyfill option to test the code with polyfill.
- You can use the --coverage option to test and extract coverage info.
- You can use the --ie8 option to test the code in the ie8 scope only.
- You can use the --saucelabs option to use karma and saucelabs to run the tests in various browsers.
Note: you will need to export your username and key to launch it.
`sh``
export SAUCE_USERNAME={your user name} && export SAUCE_ACCESS_KEY={the access key that you see once logged in}
npm run test:browsers -- --saucelabs
[travis-url]: https://travis-ci.org/ModuleLoader/es6-module-loader
[travis-image]: https://travis-ci.org/ModuleLoader/es6-module-loader.svg?branch=master