For upgrading to SystemJS 0.17-0.19, see the SystemJS 0.17 release upgrade notes for more information, or read the updated SystemJS Overview guide.
Universal dynamic module loader - loads ES6 modules, AMD, CommonJS and global scripts in the browser and NodeJS. Works with both Traceur and Babel.
- Loads any module format with exact circular reference and binding support.
- Loads ES6 modules compiled into the
System.register
bundle format for production, maintaining circular references support. - Supports RequireJS-style map, paths, bundles and global shims.
- Loader plugins allow loading assets through the module naming system such as CSS, JSON or images.
Built on top of the ES6 Module Loader polyfill.
~15KB minified and gzipped, runs in IE8+ and NodeJS.
For discussion, see the Google Group.
For a list of guides and tools, see the Third-Party Resources Wiki.
- ES6 Modules Overview
- SystemJS Overview
- Config API
- Module Formats
- Production Workflows
- System API
- Creating Plugins
<script src="system.js"></script>
<script>
// set our baseURL reference path
System.config({
baseURL: '/app'
});
// loads /app/main.js
System.import('main.js');
</script>
To load ES6, locate a transpiler (traceur.js
, 'browser.js' from Babel, or 'typescript.js' from TypeScript)
in the baseURL path, then set the transpiler:
<script>
System.config({
// or 'traceur' or 'typescript'
transpiler: 'babel',
// or traceurOptions or typescriptOptions
babelOptions: {
}
});
</script>
Alternatively a custom path to Babel or Traceur can also be set through paths:
System.config({
map: {
traceur: 'path/to/traceur.js'
}
});
SystemJS relies on Promise
and URL
being present in the environment. When these are not available it will send a request out to the system-polyfills.js
file located in the dist folder which will polyfill window.Promise
and window.URLPolyfill
.
This is typically necessary in IE, so ensure to keep this file in the same folder as SystemJS.
Alternatively these polyfills can be loaded with a script tag before SystemJS or via other polyfill implementations as well.
To load modules in NodeJS, install SystemJS with:
npm install systemjs
If transpiling ES6, also install the transpiler:
npm install traceur babel typescript
We can then load modules equivalently to in the browser:
var System = require('systemjs');
System.transpiler = 'traceur';
// loads './app.js' from the current directory
System.import('./app.js').then(function(m) {
console.log(m);
});
If using TypeScript, set global.ts = require('typescript')
before importing to ensure it is loaded correctly.
If you are using jspm as a package manager you will also need to load the generated config.js
. The best way to do this in node is to get your System
instance through jspm, which will automatically load your config correctly for you:
var System = require('jspm').Loader();
System.import('lodash').then(function (_) {
console.log(_);
});
Supported loader plugins:
Additional Plugins:
- Audio
- CoffeeScript
- Ember Handlebars
- Handlebars
- HTML
- Image (lazy)
- Jade
- Jade VirtualDOM
- jst
- JSX
- Markdown
- raw
- SASS
- sofe
- SVG
- WebFont
- YAML
Guides:
To install the dependencies correctly, run bower install
from the root of the repo, then open test/test.html
in a browser with a local server
or file access flags enabled.
MIT