a4681f93ae
feature: set `amdLoaderGlobal` to `globalThis` in case `this` is not defined |
||
---|---|---|
.github/workflows | ||
.vscode | ||
src | ||
tests | ||
.gitattributes | ||
.gitignore | ||
.gitmodules | ||
.lsifrc.json | ||
License.txt | ||
README.md | ||
SECURITY.md | ||
ThirdPartyNotices.txt | ||
package-lock.json | ||
package.json | ||
tsconfig.json |
README.md
VSCode Loader
An universal Asynchronous Module Definition (AMD) Loader developed primarily to load VSCode's sources.
Supported environments
- Edge, Firefox, Chrome, Safari
- 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
.
Features
- Runs factory methods as soon as dependencies are resolved.
Using
- 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.cspNonce
- Allows setting a Content Security Policy nonce value on script tags created by the loader.nodeRequire
- The main entry point node's requirenodeInstrumenter
- An optional transformation applied to the source before it is loaded in node's vm
Custom features
- 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());
Testing
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:9999/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
Developing
- Clone the repository
- Run
git submodule init
- Run
git submodule update
- Run
npm install
- Compile in the background with
npm run watch1
andnpm run watch2
Code of Conduct
This project has adopted the Microsoft Open Source Code of Conduct. For more information see the Code of Conduct FAQ or contact opencode@microsoft.com with any additional questions or comments.