Node.js Module Resolution by visual example

24
Altamira Node.js Module Resolution Jeff Kunkle April 19, 2012

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 of Node.js Module Resolution by visual example

Page 1: Node.js Module Resolution by visual example

Altamira

Node.js Module Resolution

Jeff Kunkle

April 19, 2012

Page 2: Node.js Module Resolution by visual example

Path Resolution

Page 3: Node.js Module Resolution by visual example

require(“./mymodule.js”);

1

Page 4: Node.js Module Resolution by visual example

mymodule.js

/projects/preso/

main.js

require(“./mymodule.js”);

Page 5: Node.js Module Resolution by visual example

require(“./mymodule”);

2

Page 6: Node.js Module Resolution by visual example

/projects/preso/

main.js

require(“./mymodule”);

Page 7: Node.js Module Resolution by visual example

mymodule.js

/projects/preso/

main.js

require(“./mymodule”);

Page 8: Node.js Module Resolution by visual example

mymodule.js

/projects/preso/

mymodule.json

main.js

require(“./mymodule”);

Page 9: Node.js Module Resolution by visual example

mymodule.js

/projects/preso/

mymodule.json

mymodule.node

main.js

require(“./mymodule”);

Page 10: Node.js Module Resolution by visual example

require(“./mymodule”);

/projects/preso/

main.js

mymodule/

package.json

init.js

Page 11: Node.js Module Resolution by visual example

require(“./mymodule”);

mymodule/

/projects/preso/

index.js

main.js

Page 12: Node.js Module Resolution by visual example

require(“./mymodule”);

mymodule/

/projects/preso/

index.node

main.js

Page 13: Node.js Module Resolution by visual example

require(“mymodule”);

3

Page 14: Node.js Module Resolution by visual example

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

require(“mymodule”);

node_modules/

/projects/preso/

index.js

main.js

mymodule/

Page 16: Node.js Module Resolution by visual example

require(“mymodule”);

node_modules/

/projects/

index.js

main.js

mymodule/

preso/

Page 17: Node.js Module Resolution by visual example

require(“mymodule”);

node_modules/

/

index.js

main.js

mymodule/

projects/

preso/

Page 18: Node.js Module Resolution by visual example

require(“mymodule”);

Global load paths also exist,but don’t use them.

Page 19: Node.js Module Resolution by visual example
Page 20: Node.js Module Resolution by visual example

Dependency Resolution Magic!

Page 21: Node.js Module Resolution by visual example

A

B

Cv1.0

v2.0

Page 22: Node.js Module Resolution by visual example

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

a/

b/

b.js

a.js

./node_modules/

c/

c.js

Page 24: Node.js Module Resolution by visual example

Jeff Kunkle@kunklejr