node.js module resolution by visual example
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.TRANSCRIPT
![Page 1: Node.js Module Resolution by visual example](https://reader034.vdocuments.mx/reader034/viewer/2022051400/54bd19c64a7959766e8b45d5/html5/thumbnails/1.jpg)
Altamira
Node.js Module Resolution
Jeff Kunkle
April 19, 2012
![Page 2: Node.js Module Resolution by visual example](https://reader034.vdocuments.mx/reader034/viewer/2022051400/54bd19c64a7959766e8b45d5/html5/thumbnails/2.jpg)
Path Resolution
![Page 3: Node.js Module Resolution by visual example](https://reader034.vdocuments.mx/reader034/viewer/2022051400/54bd19c64a7959766e8b45d5/html5/thumbnails/3.jpg)
require(“./mymodule.js”);
1
![Page 4: Node.js Module Resolution by visual example](https://reader034.vdocuments.mx/reader034/viewer/2022051400/54bd19c64a7959766e8b45d5/html5/thumbnails/4.jpg)
mymodule.js
/projects/preso/
main.js
require(“./mymodule.js”);
![Page 5: Node.js Module Resolution by visual example](https://reader034.vdocuments.mx/reader034/viewer/2022051400/54bd19c64a7959766e8b45d5/html5/thumbnails/5.jpg)
require(“./mymodule”);
2
![Page 6: Node.js Module Resolution by visual example](https://reader034.vdocuments.mx/reader034/viewer/2022051400/54bd19c64a7959766e8b45d5/html5/thumbnails/6.jpg)
/projects/preso/
main.js
require(“./mymodule”);
![Page 7: Node.js Module Resolution by visual example](https://reader034.vdocuments.mx/reader034/viewer/2022051400/54bd19c64a7959766e8b45d5/html5/thumbnails/7.jpg)
mymodule.js
/projects/preso/
main.js
require(“./mymodule”);
![Page 8: Node.js Module Resolution by visual example](https://reader034.vdocuments.mx/reader034/viewer/2022051400/54bd19c64a7959766e8b45d5/html5/thumbnails/8.jpg)
mymodule.js
/projects/preso/
mymodule.json
main.js
require(“./mymodule”);
![Page 9: Node.js Module Resolution by visual example](https://reader034.vdocuments.mx/reader034/viewer/2022051400/54bd19c64a7959766e8b45d5/html5/thumbnails/9.jpg)
mymodule.js
/projects/preso/
mymodule.json
mymodule.node
main.js
require(“./mymodule”);
![Page 10: Node.js Module Resolution by visual example](https://reader034.vdocuments.mx/reader034/viewer/2022051400/54bd19c64a7959766e8b45d5/html5/thumbnails/10.jpg)
require(“./mymodule”);
/projects/preso/
main.js
mymodule/
package.json
init.js
![Page 11: Node.js Module Resolution by visual example](https://reader034.vdocuments.mx/reader034/viewer/2022051400/54bd19c64a7959766e8b45d5/html5/thumbnails/11.jpg)
require(“./mymodule”);
mymodule/
/projects/preso/
index.js
main.js
![Page 12: Node.js Module Resolution by visual example](https://reader034.vdocuments.mx/reader034/viewer/2022051400/54bd19c64a7959766e8b45d5/html5/thumbnails/12.jpg)
require(“./mymodule”);
mymodule/
/projects/preso/
index.node
main.js
![Page 13: Node.js Module Resolution by visual example](https://reader034.vdocuments.mx/reader034/viewer/2022051400/54bd19c64a7959766e8b45d5/html5/thumbnails/13.jpg)
require(“mymodule”);
3
![Page 14: Node.js Module Resolution by visual example](https://reader034.vdocuments.mx/reader034/viewer/2022051400/54bd19c64a7959766e8b45d5/html5/thumbnails/14.jpg)
require(“mymodule”);
node_modules/
/usr/local/node/lib/
index.js
mymodule/
* assuming mymodule was a core Node.js module
![Page 15: Node.js Module Resolution by visual example](https://reader034.vdocuments.mx/reader034/viewer/2022051400/54bd19c64a7959766e8b45d5/html5/thumbnails/15.jpg)
require(“mymodule”);
node_modules/
/projects/preso/
index.js
main.js
mymodule/
![Page 16: Node.js Module Resolution by visual example](https://reader034.vdocuments.mx/reader034/viewer/2022051400/54bd19c64a7959766e8b45d5/html5/thumbnails/16.jpg)
require(“mymodule”);
node_modules/
/projects/
index.js
main.js
mymodule/
preso/
![Page 17: Node.js Module Resolution by visual example](https://reader034.vdocuments.mx/reader034/viewer/2022051400/54bd19c64a7959766e8b45d5/html5/thumbnails/17.jpg)
require(“mymodule”);
node_modules/
/
index.js
main.js
mymodule/
projects/
preso/
![Page 18: Node.js Module Resolution by visual example](https://reader034.vdocuments.mx/reader034/viewer/2022051400/54bd19c64a7959766e8b45d5/html5/thumbnails/18.jpg)
require(“mymodule”);
Global load paths also exist,but don’t use them.
![Page 19: Node.js Module Resolution by visual example](https://reader034.vdocuments.mx/reader034/viewer/2022051400/54bd19c64a7959766e8b45d5/html5/thumbnails/19.jpg)
![Page 20: Node.js Module Resolution by visual example](https://reader034.vdocuments.mx/reader034/viewer/2022051400/54bd19c64a7959766e8b45d5/html5/thumbnails/20.jpg)
Dependency Resolution Magic!
![Page 21: Node.js Module Resolution by visual example](https://reader034.vdocuments.mx/reader034/viewer/2022051400/54bd19c64a7959766e8b45d5/html5/thumbnails/21.jpg)
A
B
Cv1.0
v2.0
![Page 22: Node.js Module Resolution by visual example](https://reader034.vdocuments.mx/reader034/viewer/2022051400/54bd19c64a7959766e8b45d5/html5/thumbnails/22.jpg)
a/
node_modules/
c/
b/
node_modules/
c/
b.js
a.js
c.js
c.js
./node_modules/
v1.0
v2.0
![Page 23: Node.js Module Resolution by visual example](https://reader034.vdocuments.mx/reader034/viewer/2022051400/54bd19c64a7959766e8b45d5/html5/thumbnails/23.jpg)
a/
b/
b.js
a.js
./node_modules/
c/
c.js
![Page 24: Node.js Module Resolution by visual example](https://reader034.vdocuments.mx/reader034/viewer/2022051400/54bd19c64a7959766e8b45d5/html5/thumbnails/24.jpg)
Jeff Kunkle@kunklejr