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
Post a Comment