node.js - Node how to make dependency analysis and remove unused module dependecies -


my node modules simple module have few dependencies , makes use of built-in modules. given that, module has dependency of module declares dependencies

"dependencies": {     "events": "^1.1.1",     "geocoder": "^0.2.2",     "gpsoauthnode": "^0.0.5",     "istanbul": "^0.4.4",     "protobufjs": "^5.0.1",     "request": "^2.73.0",     "s2geometry-node": "^1.3.0",     "tape": "^4.6.0"   } 

running npm install end in following node_submodules tree

├─┬ body-parser@1.15.2  │ ├── bytes@2.4.0  │ ├── content-type@1.0.2  │ ├─┬ debug@2.2.0  │ │ └── ms@0.7.1  │ ├── depd@1.1.0  │ ├─┬ http-errors@1.5.0  │ │ ├── inherits@2.0.1  │ │ ├── setprototypeof@1.0.1  │ │ └── statuses@1.3.0  │ ├── iconv-lite@0.4.13  │ ├─┬ on-finished@2.3.0  │ │ └── ee-first@1.1.1  │ ├── qs@6.2.0  │ ├─┬ raw-body@2.1.7  │ │ └── unpipe@1.0.0  │ └─┬ type-is@1.6.13  │   └── media-typer@0.3.0  ├─┬ express@4.14.0  │ ├─┬ accepts@1.3.3  │ │ └── negotiator@0.6.1  │ ├── array-flatten@1.1.1  │ ├── content-disposition@0.5.1  │ ├── cookie@0.3.1  │ ├── cookie-signature@1.0.6  │ ├── encodeurl@1.0.1  │ ├── escape-html@1.0.3  │ ├── etag@1.7.0  │ ├── finalhandler@0.5.0  │ ├── fresh@0.3.0  │ ├── merge-descriptors@1.0.1  │ ├── methods@1.1.2  │ ├── parseurl@1.3.1  │ ├── path-to-regexp@0.1.7  │ ├─┬ proxy-addr@1.1.2  │ │ ├── forwarded@0.1.0  │ │ └── ipaddr.js@1.1.1  │ ├── range-parser@1.2.0  │ ├─┬ send@0.14.1  │ │ ├── destroy@1.0.4  │ │ └── mime@1.3.4  │ ├── serve-static@1.11.1  │ ├── utils-merge@1.0.0  │ └── vary@1.1.0  ├─┬ pokemon-go-node-api@1.3.1 │ ├── events@1.1.1  │ ├─┬ geocoder@0.2.2  │ │ ├─┬ request@2.11.1  │ │ │ ├─┬ form-data@0.0.3  │ │ │ │ ├── async@0.1.9  │ │ │ │ └─┬ combined-stream@0.0.3  │ │ │ │   └── delayed-stream@0.0.5  │ │ │ └── mime@1.2.7  │ │ ├── underscore@1.3.3  │ │ └─┬ xml2js@0.2.0  │ │   └── sax@1.2.1  │ ├─┬ gpsoauthnode@0.0.5  │ │ └── crypto-js@3.1.6  │ ├─┬ istanbul@0.4.4  │ │ ├── abbrev@1.0.9  │ │ ├── async@1.5.2  │ │ ├─┬ escodegen@1.8.0  │ │ │ ├── estraverse@1.9.3  │ │ │ ├── esutils@2.0.2  │ │ │ ├─┬ optionator@0.8.1  │ │ │ │ ├── deep-is@0.1.3  │ │ │ │ ├── fast-levenshtein@1.1.4  │ │ │ │ ├── levn@0.3.0  │ │ │ │ ├── prelude-ls@1.1.2  │ │ │ │ └── type-check@0.3.2  │ │ │ └─┬ source-map@0.2.0  │ │ │   └── amdefine@1.0.0  │ │ ├── esprima@2.7.2  │ │ ├─┬ fileset@0.2.1  │ │ │ └─┬ minimatch@2.0.10  │ │ │   └─┬ brace-expansion@1.1.6  │ │ │     ├── balanced-match@0.4.2  │ │ │     └── concat-map@0.0.1  │ │ ├─┬ handlebars@4.0.5  │ │ │ ├─┬ optimist@0.6.1  │ │ │ │ ├── minimist@0.0.10  │ │ │ │ └── wordwrap@0.0.3  │ │ │ ├── source-map@0.4.4  │ │ │ └─┬ uglify-js@2.7.0  │ │ │   ├── async@0.2.10  │ │ │   ├── source-map@0.5.6  │ │ │   └── uglify-to-browserify@1.0.2  │ │ ├─┬ js-yaml@3.6.1  │ │ │ └─┬ argparse@1.0.7  │ │ │   └── sprintf-js@1.0.3  │ │ ├─┬ mkdirp@0.5.1  │ │ │ └── minimist@0.0.8  │ │ ├── nopt@3.0.6  │ │ ├─┬ once@1.3.3  │ │ │ └── wrappy@1.0.2  │ │ ├── resolve@1.1.7  │ │ ├─┬ supports-color@3.1.2  │ │ │ └── has-flag@1.0.0  │ │ ├─┬ which@1.2.10  │ │ │ └── isexe@1.1.2  │ │ └── wordwrap@1.0.0  │ ├─┬ protobufjs@5.0.1  │ │ ├─┬ ascli@1.0.0  │ │ │ ├── colour@0.7.1  │ │ │ └── optjs@3.2.2  │ │ ├─┬ bytebuffer@5.0.1  │ │ │ └── long@3.2.0  │ │ ├─┬ glob@5.0.15  │ │ │ ├── inflight@1.0.5  │ │ │ └── path-is-absolute@1.0.0  │ │ └─┬ yargs@3.10.0  │ │   ├── camelcase@1.2.1  │ │   ├─┬ cliui@2.1.0  │ │   │ ├─┬ center-align@0.1.3  │ │   │ │ ├─┬ align-text@0.1.4  │ │   │ │ │ ├─┬ kind-of@3.0.3  │ │   │ │ │ │ └── is-buffer@1.1.3  │ │   │ │ │ ├── longest@1.0.1  │ │   │ │ │ └── repeat-string@1.5.4  │ │   │ │ └── lazy-cache@1.0.4  │ │   │ ├── right-align@0.1.3  │ │   │ └── wordwrap@0.0.2  │ │   ├── decamelize@1.2.0  │ │   └── window-size@0.1.0  │ ├─┬ s2geometry-node@1.3.1  │ │ └── bindings@1.2.1  │ └─┬ tape@4.6.0  │   ├── deep-equal@1.0.1  │   ├── defined@1.0.0  │   ├── function-bind@1.1.0  │   ├─┬ glob@7.0.5  │   │ ├── fs.realpath@1.0.0  │   │ └── minimatch@3.0.2  │   ├── has@1.0.1  │   ├── minimist@1.2.0  │   ├── object-inspect@1.2.1  │   ├── resumer@0.0.0  │   ├─┬ string.prototype.trim@1.1.2  │   │ ├─┬ define-properties@1.1.2  │   │ │ ├── foreach@2.0.5  │   │ │ └── object-keys@1.0.11  │   │ └─┬ es-abstract@1.5.1  │   │   ├─┬ es-to-primitive@1.1.1  │   │   │ ├── is-date-object@1.0.1  │   │   │ └── is-symbol@1.0.1  │   │   ├── is-callable@1.1.3  │   │   └── is-regex@1.0.3  │   └── through@2.3.8  ├─┬ request@2.74.0  │ ├── aws-sign2@0.6.0  │ ├── aws4@1.4.1  │ ├─┬ bl@1.1.2  │ │ └─┬ readable-stream@2.0.6  │ │   ├── core-util-is@1.0.2  │ │   ├── isarray@1.0.0  │ │   ├── process-nextick-args@1.0.7  │ │   ├── string_decoder@0.10.31  │ │   └── util-deprecate@1.0.2  │ ├── caseless@0.11.0  │ ├─┬ combined-stream@1.0.5  │ │ └── delayed-stream@1.0.0  │ ├── extend@3.0.0  │ ├── forever-agent@0.6.1  │ ├── form-data@1.0.0-rc4  │ ├─┬ har-validator@2.0.6  │ │ ├─┬ chalk@1.1.3  │ │ │ ├── ansi-styles@2.2.1  │ │ │ ├── escape-string-regexp@1.0.5  │ │ │ ├─┬ has-ansi@2.0.0  │ │ │ │ └── ansi-regex@2.0.0  │ │ │ ├── strip-ansi@3.0.1  │ │ │ └── supports-color@2.0.0  │ │ ├─┬ commander@2.9.0  │ │ │ └── graceful-readlink@1.0.1  │ │ ├─┬ is-my-json-valid@2.13.1  │ │ │ ├── generate-function@2.0.0  │ │ │ ├─┬ generate-object-property@1.2.0  │ │ │ │ └── is-property@1.0.2  │ │ │ ├── jsonpointer@2.0.0  │ │ │ └── xtend@4.0.1  │ │ └─┬ pinkie-promise@2.0.1  │ │   └── pinkie@2.0.4  │ ├─┬ hawk@3.1.3  │ │ ├── boom@2.10.1  │ │ ├── cryptiles@2.0.5  │ │ ├── hoek@2.16.3  │ │ └── sntp@1.0.9  │ ├─┬ http-signature@1.1.1  │ │ ├── assert-plus@0.2.0  │ │ ├─┬ jsprim@1.3.0  │ │ │ ├── extsprintf@1.0.2  │ │ │ ├── json-schema@0.2.2  │ │ │ └── verror@1.3.6  │ │ └─┬ sshpk@1.8.3  │ │   ├── asn1@0.2.3  │ │   ├── assert-plus@1.0.0  │ │   ├─┬ dashdash@1.14.0  │ │   │ └── assert-plus@1.0.0  │ │   ├── ecc-jsbn@0.1.1  │ │   ├─┬ getpass@0.1.6  │ │   │ └── assert-plus@1.0.0  │ │   ├── jodid25519@1.0.2  │ │   ├── jsbn@0.1.0  │ │   └── tweetnacl@0.13.3  │ ├── is-typedarray@1.0.0  │ ├── isstream@0.1.2  │ ├── json-stringify-safe@5.0.1  │ ├─┬ mime-types@2.1.11  │ │ └── mime-db@1.23.0  │ ├── node-uuid@1.4.7  │ ├── oauth-sign@0.8.2  │ ├── stringstream@0.0.5  │ ├── tough-cookie@2.3.0  │ └── tunnel-agent@0.4.3  └─┬ tough-cookie-filestore@0.0.1    └─┬ tough-cookie@0.12.1      └── punycode@2.0.0  

that nothing less than

node_modules admin$ du -d0 -h  40m    . 

40meg, what? @ first bit surprised of that, since list of dependencies seems much. expect makefile of low level c library boost, libcrypto, libxml, libssl or whatever c/c++ library used os, but, hey wait moment, simple application using built-in library , 1 external dependency. so, what's going on here?

being serious, question is: there way make static analysis of node packages installed via npm? , prune unused dependencies? sure, module not use @ runtime of function declarations in private scope of each of modules, defined in tree.


Comments

Popular posts from this blog

jOOQ update returning clause with Oracle -

java - Warning equals/hashCode on @Data annotation lombok with inheritance -

java - BasicPathUsageException: Cannot join to attribute of basic type -