Node.js Module Resolution by visual example

Post on 19-Jan-2015

826 views 4 download

Tags:

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

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