Skip to content
/ npm-graph Public

Prints a dependency graph of modules that is actually required

License

Notifications You must be signed in to change notification settings

clux/npm-graph

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

60 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

npm graph

npm status build status dependency status coverage status

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 readable-stream@1.0.27-1
$ 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.

About

Prints a dependency graph of modules that is actually required

Resources

License

Stars

Watchers

Forks

Packages

No packages published