> For the complete documentation index, see [llms.txt](https://strctr.gitbook.io/programming/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://strctr.gitbook.io/programming/01-languages/javascript/01-language/d-modules.md).

# D. Modules

1. [ES6 modules](/programming/01-languages/javascript/01-language/d-modules/01-modules.md)
2. [`export`-expression](/programming/01-languages/javascript/01-language/d-modules/02-export.md)
3. [`import`-expression](/programming/01-languages/javascript/01-language/d-modules/03-import.md)
4. [Cyclic dependencies](/programming/01-languages/javascript/01-language/d-modules/04-cyclic-dependencies.md)
5. [Browser script modules](/programming/01-languages/javascript/01-language/d-modules/05-browser-script-module.md)
6. [Dynamic `import()`](/programming/01-languages/javascript/01-language/d-modules/06-dynamic-import.md)

## Reference

```javascript
export const x = 42;                          // export a named variable
export function foo() {};                     // export a named function

export default 42;                            // export the default export
export default function foo() {};             // export the default export as a function
export default function () {}                 // export anonymous functionl; no semicolon!
export default class {}                       // export anonymous class; no semicolon!

export { encrypt };                           // export an existing variable
export { decrypt as dec };                    // export a variable as a new name
export { encrypt as en } from 'module';       // export an export from another module

export * from 'module';                       // export all exports from another module
export { foo as myFoo, bar } from 'module';
export { default } from 'module';
export { default as foo } from 'module';
export { foo as default } from 'module';
export * as foo from "module";                // Proposed ES syntax
export foo from "module";                     // Proposed ES syntax

import 'module';                              // import a module without any import bindings
import module from 'module';                  // import the default export of a module
import { foo } from 'module';                 // import a named export of a module
import { module as Module } from 'module';    // import a named export to a different name

import * as module from 'module';             // import an entire module instance object

import('module.js')                           // dynamic import
    .then((module) => { ... })
    .catch((err) => { ... })
```

## References

* [`Nicolás Bevacqua: A Brief History of Modularity`](https://ponyfoo.com/articles/brief-history-of-modularity)
* [The Evolution of JavaScript Modularity](https://github.com/myshov/history-of-javascript/tree/master/4_evolution_of_js_modularity)
