systemjs
Version:
System loader extension for flexible AMD & CommonJS support
153 lines (105 loc) • 6.41 kB
Markdown
SystemJS
========
[](https://gitter.im/systemjs/systemjs?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
_For upgrading to SystemJS 0.16, see the [ES6 Module Loader 0.16 release upgrade notes for more information](https://github.com/ModuleLoader/es6-module-loader/releases/tag/v0.16.0), or read the updated [Getting Started](#getting-started) guide below._
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](https://github.com/systemjs/systemjs/wiki/Module-Format-Support) with [exact circular reference and binding support](https://github.com/ModuleLoader/es6-module-loader/wiki/Circular-References-&-Bindings).
* Loads [ES6 modules compiled into the `System.register` bundle format for production](https://github.com/systemjs/systemjs/wiki/Production-Workflows), maintaining circular references support.
* Supports RequireJS-style [map](https://github.com/systemjs/systemjs/wiki/Map-Configuration), [paths](https://github.com/ModuleLoader/es6-module-loader/wiki/Configuring-the-Loader#paths-implementation), [bundles](https://github.com/systemjs/systemjs/wiki/Production-Workflows#bundle-extension) and [global shims](https://github.com/systemjs/systemjs/wiki/Module-Format-Support#globals-global).
* [Loader plugins](#plugins) allow loading assets through the module naming system such as CSS, JSON or images.
Designed to work with the [ES6 Module Loader polyfill](https://github.com/ModuleLoader/es6-module-loader) (9KB) for a combined total footprint of 16KB minified and gzipped.
Runs in IE8+ and NodeJS.
For discussion, [see the Google Group](https://groups.google.com/group/systemjs).
For a list of guides and tools, see the [community project page](https://github.com/systemjs/systemjs/wiki/Community-Projects).
Documentation
---
* [Basic Use](https://github.com/systemjs/systemjs/wiki/Basic-Use)
* [Configuration Options](https://github.com/systemjs/systemjs/wiki/Configuration-Options)
* [Loader Configuration](https://github.com/ModuleLoader/es6-module-loader/wiki/Configuring-the-Loader)
* [Map Configuration](https://github.com/systemjs/systemjs/wiki/Map-Configuration)
* [Meta Configuration](https://github.com/systemjs/systemjs/wiki/Meta-Configuration)
* [Module Format Support](https://github.com/systemjs/systemjs/wiki/Module-Format-Support)
* [Relative Dynamic Loading](https://github.com/systemjs/systemjs/wiki/Relative-Dynamic-Loading)
* [Versions Extension](https://github.com/systemjs/systemjs/wiki/Versions-Extension)
* [Production Workflows](https://github.com/systemjs/systemjs/wiki/Production-Workflows)
* [Creating Plugins](https://github.com/systemjs/systemjs/wiki/Creating-a-Plugin)
* [Creating a Custom Module Format](https://github.com/systemjs/systemjs/wiki/Creating-a-Custom-Format-Extension)
Getting Started
---
### Browser Use
Download [`es6-module-loader.js`](https://github.com/ModuleLoader/es6-module-loader/blob/v0.16.0/dist/es6-module-loader.js) into the same folder as `system.js`.
Load SystemJS with a single script tag:
```html
<script src="system.js"></script>
```
It will then load `es6-module-loader.js` itself.
To load ES6, locate [`traceur.js`](https://raw.githubusercontent.com/jmcriffey/bower-traceur/0.0.87/traceur.js) in the baseURL path and it will be loaded when needed.
For use with Babel, locate the `browser.js` file at `babel.js` in the baseURL and set:
```html
<script>
System.transpiler = 'babel';
</script>
```
Alternatively a custom path to Babel or Traceur can also be set through paths:
```javascript
System.config({
paths: {
traceur: 'path/to/traceur.js'
}
});
```
### NodeJS Use
To load modules in NodeJS, install SystemJS with:
```
npm install systemjs traceur
```
(making sure to also install Traceur or Babel as needed, as they are not included as dependencies as of SystemJS 0.16)
We can then load modules equivalently to in the browser:
```javascript
var System = require('systemjs');
/*
* Include
* System.transpiler = 'babel';
* to use Babel instead of Traceur
*/
// loads './app.js' from the current directory
System.import('./app').then(function(m) {
console.log(m);
});
```
If configuring the `baseURL` for use in Windows, prepend `file:` i.e.
```javascipt
System.config({
baseURL: 'file:' + path.resolve('../path')
});
```
### Plugins
Plugins handle alternative loading scenarios, including loading assets such as CSS or images, and providing custom transpilation scenarios.
Supported Plugins:
* [CSS](https://github.com/systemjs/plugin-css) `System.import('my/file.css!')`
* [Image](https://github.com/systemjs/plugin-image) `System.import('some/image.png!image')`
* [JSON](https://github.com/systemjs/plugin-json) `System.import('some/data.json!').then(function(json){})`
* [Text](https://github.com/systemjs/plugin-text) `System.import('some/text.txt!text').then(function(text) {})`
Additional Plugins:
* [CoffeeScript](https://github.com/forresto/plugin-coffee) `System.import('./test.coffee!')`
* [Jade](https://github.com/johnsoftek/plugin-jade)
* [JSX](https://github.com/floatdrop/plugin-jsx) `System.import('template.jsx!')`
* [Markdown](https://github.com/guybedford/plugin-md) `System.import('app/some/project/README.md!').then(function(html) {})`
* [WebFont](https://github.com/guybedford/plugin-font) `System.import('google Port Lligat Slab, Droid Sans !font')`
* [Ember Handlebars](https://github.com/n-fuse/plugin-ember-hbs) `System.import('template.hbs!')`
Plugins are loaded from the module name of the extension. To set them up, you'll most likely want to add map configuration. For example:
```javascript
System.map['css'] = 'path/to/css/plugin';
```
Loading through plugin is indicated with `!` at the end of the name:
```javascript
System.import('file.css!'); // will use the "css" plugin, assumed from the extension
System.import('file.css!text'); // will use the "text" plugin, instead of checking the extension
```
[Read the guide here on creating plugins](https://github.com/systemjs/systemjs/wiki/Creating-a-Plugin).
#### Running the tests
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.
License
---
MIT