- developed to unify the browser and the server
 - supports both AMD and CommonJS modules
 - the way it works is essentially passing your module to an IIFE that determines the environment to produce the appropriate type of module
 
script tags.goog.provide('example.model.Person');
example.model.Person = function() { ... };goog.provide('example.model.People');
goog.require('example.model.Person');
example.model.People = function() {
  this.mainPerson = new example.model.Person();
};module.exports = function() { ... };const helper = require('path/to/helper');define(function() { ... });require(['dep1', 'dep2'], function(dep1, dep2) { ... });define and require to asynchronously request files from the server (based on paths you define in dependency list, or in config)export const foo = 100;
export function bar(a, b) { return a + b; }export default class Baz { ... }import { foo, bar } from 'named';
import Baz from 'default'; // name doesn't have to matchexport const foo = 100;"use strict";
Object.defineProperty(exports, "__esModule", {
  value: true
});
var foo = exports.foo = 100;export const foo = 100;define(["require", "exports"], function (require, exports) {
    "use strict";
    exports.foo = 100;
});