Description
Good work on this package so far!
I have breifly looked through the code and are trying to understand the details of how it works. In doing so I thought I would write my findings down and maybe it could be added to a "How it works" section of the readme in the future. It may also help in discussion of improvements to the algoritm. So here it is, please let me know what I have misunderstood :-).
How it works
SystemJS needs three pieces of information to load a package:
P1. Extended package.json information (eg. format: cjs
).
P2. The URL to the package root.
P3. Map to dependent packages.
systemjs-config-builder
provides the above information for each package by this algoritm:
A1. Walk node_modules
recursively and look for package.json
. Build a registry (map) of packages with key name@version
and value {location}
. The recursive part ensures that packages that has private dependencies in their own node_modules
folder are included in the registry.
A2. Iterate the registry and call jspm
to generate the extended package.json information needed (P1). The registry values now have {location, config}
.
A3. Loop through the registry and write information to a generated.config.js
file.
A3.1 Output path
section (P2). This section is hardcoded to this:
"paths": {
"nm:": "node_modules/"
}
A3.2 Output map
section. For each package (1...N) set name
to registry key minus @version
part and output:
"map": {
"[name1]": "nm:[name1]",
...
"[nameN]": "nm:[nameN]",
}
A3.3 Output packages
section. For each package (1...N) set name
to registry key minus @version
part, and config
from the registry value and output:
"packages": {
"nm:[name1]": {
[config1]
},
...
"nm:[nameN]": {
[configN]
}
}