An universal Asynchronous Module Definition (AMD) Loader developed primarily to load VSCode's sources.
- IE 11, Edge, Firefox, Chrome, Safari, Opera
- nodejs
- electron (renderer & browser processes)
In nodejs and electron, when loading a module, if it cannot be found with the AMD rules, it delegates loading them to the native
require
.
- Runs factory methods as soon as dependencies are resolved.
- Contains a CSS loader (
vs/css
). - Contains a natural language strings loader (
vs/nls
).
- In a browser environment:
<script type="text/javascript" src="loader.js"></script>
<script>
require.config({
// ...
});
require(['an/amd/module'], function(value) {
// code is loaded here
});
</script>
- In a node environment:
var loader = require('loader');
loader.config({
// ...
});
loader(['an/amd/module'], function(value) {
// code is loaded here
});
- Supported config options:
baseUrl
- The prefix that will be aplied to all modules when they are resolved to a locationpaths
- Redirect rules for modules. The redirect rules will affect the module ids themselvesconfig
- Per-module configurationcatchError
- Catch errors when invoking the module factoriesrecordStats
- Record statisticsurlArgs
- The suffix that will be aplied to all modules when they are resolved to a locationonError
- Callback that will be called when errors are encounteredignoreDuplicateModules
- The loader will issue warnings when duplicate modules are encountered. This list will inhibit those warnings if duplicate modules are expected.isBuild
- Flag to indicate if current execution is as part of a build.nodeRequire
- The main entry point node's requirenodeInstrumenter
- An optional transformation applied to the source before it is loaded in node's vm
- Recording loading statistics for detailed script loading times:
require.config({
recordStats: true
});
// ...
console.log(require.getRecorder().getEvents());
- Extracting loading metadata for a bundler:
var loader = require('loader');
loader.config({
isBuild: true
});
// ...
console.log(loader.getBuildInfo());
To run the tests:
- code loading in node:
npm run test
- amd spec tests, unit tests & code loading in browser:
npm run simpleserver
- open
http://localhost:8888/tests/run-tests.htm
The project uses as a submodule the AMD compliance tests. The goal is to support as many tests without adding eval()
or an equivalent. It is also not a goal to support loading CommonJS code:
- Basic AMD Functionality (basic)
- The Basic require() Method (require)
- Anonymous Module Support (anon)
CommonJS Compatibility (funcString)CommonJS Compatibility with Named Modules (namedWrap)- AMD Loader Plugins (plugins)
Dynamic Plugins (pluginsDynamic)Common Config: PackagesCommon Config: MapCommon Config: Module- Common Config: Path
Common Config: Shim
- Clone the repository
- Run
git submodule init
- Run
git submodule update
- Run
npm install
- Compile in the background with
npm run watch
This project has adopted the Microsoft Open Source Code of Conduct. For more information see the Code of Conduct FAQ or contact [email protected] with any additional questions or comments.