Upload
jeff-kunkle
View
822
Download
4
Tags:
Embed Size (px)
DESCRIPTION
Node.js has a very clever design for module path resolution and code loading. Most languages punt when asked to load two modules depending on different versions of a shared third module, but not Node. This presentation depicts a handful of module loading scenarios by demonstrating the filesystem layout for each.
Citation preview
Altamira
Node.js Module Resolution
Jeff Kunkle
April 19, 2012
Path Resolution
require(“./mymodule.js”);
1
mymodule.js
/projects/preso/
main.js
require(“./mymodule.js”);
require(“./mymodule”);
2
/projects/preso/
main.js
require(“./mymodule”);
mymodule.js
/projects/preso/
main.js
require(“./mymodule”);
mymodule.js
/projects/preso/
mymodule.json
main.js
require(“./mymodule”);
mymodule.js
/projects/preso/
mymodule.json
mymodule.node
main.js
require(“./mymodule”);
require(“./mymodule”);
/projects/preso/
main.js
mymodule/
package.json
init.js
require(“./mymodule”);
mymodule/
/projects/preso/
index.js
main.js
require(“./mymodule”);
mymodule/
/projects/preso/
index.node
main.js
require(“mymodule”);
3
require(“mymodule”);
node_modules/
/usr/local/node/lib/
index.js
mymodule/
* assuming mymodule was a core Node.js module
require(“mymodule”);
node_modules/
/projects/preso/
index.js
main.js
mymodule/
require(“mymodule”);
node_modules/
/projects/
index.js
main.js
mymodule/
preso/
require(“mymodule”);
node_modules/
/
index.js
main.js
mymodule/
projects/
preso/
require(“mymodule”);
Global load paths also exist,but don’t use them.
Dependency Resolution Magic!
A
B
Cv1.0
v2.0
a/
node_modules/
c/
b/
node_modules/
c/
b.js
a.js
c.js
c.js
./node_modules/
v1.0
v2.0
a/
b/
b.js
a.js
./node_modules/
c/
c.js
Jeff Kunkle@kunklejr