npm-graph
v0.5.0
Published
Prints a dependency graph of modules that is actually required
Downloads
85
Maintainers
Readme
npm graph
Essentially npm ls
with two modifications:
- only explicitly required dependencies
- finds cyclical requires
Dependencies are analyzed using parts of the browserify toolchain.
Usage
Install globally and give it a path to a local package or a file:
$ npm install -g npm-graph
no arguments - npm modules only
$ npm-graph node_modules/irc-stream/
irc-stream
└───irc
If all modules in "dependencies" are used, then this should look like npm ls
.
show builtins
$ npm-graph node_modules/irc-stream/ -b
irc-stream
├──┬irc
│ ├───net
│ ├───tls
│ └───util
└───stream
This can give some at a glance information about how browserifiable the module is.
show local files
File by file inclusion:
$ npm-graph node_modules/irc-stream/ -l
irc-stream
└──┬irc
├───./codes
└───./colors
cycle detection
Cycles are detected and shown in the tree with a ↪
after an offender. As an example, readable-stream (tsk tsk) closes a cyclical loop by having Duplex depend on Writable and vice versa (albeit lightly).
$ npm install [email protected]
$ npm-graph node_modules/readable-stream/writable.js -l
writable.js
└─┬./lib/_stream_writable.js
├─┬./_stream_duplex ↪ ./_stream_writable
│ ├─┬./_stream_readable
│ │ ├──core-util-is
│ │ ├──inherits
│ │ ├──isarray
│ │ └──string_decoder/
│ ├──core-util-is
│ └──inherits
├──core-util-is
└──inherits
The mutual file inclusions would normally cause a recursion overflow when generating the tree if we hadn't first found the strongly connected components in the inclusion digraph and manually broken the cycle.
( •_•)
( •_•)>⌐■-■
(⌐■_■)
The cyclical components from Tarjan's algorithm are also available with -c
:
$ npm-graph node_modules/readable-stream/writable.js -l -c
[ [ './node_modules/readable-stream/lib/_stream_writable.js',
'./node_modules/readable-stream/lib/_stream_duplex.js' ] ]
In this case, a 2-cycle.
License
MIT-Licensed. See LICENSE file for details.