我的节点模块是一个简单的模块,具有很少的依赖关系,主要使用内置模块。 鉴于此,我的模块具有声明这些依赖性的模块的依赖性
"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"
}
运行npm install
将最终出现在以下node_submodules
树
├─┬ 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
这不亚于
node_modules admin$ du -d0 -h
40M .
40公斤,什么?起初看起来我有点惊讶,因为依赖列表似乎太多了。我希望来自Makefile
低级C库的Boost
,libcrypto
,libxml
,libssl
,node
或其他所使用的C / C ++库。一个操作系统,但是,嘿,等等,这只是一个使用内置库和一个外部依赖的简单应用程序。那么,这里发生了什么?
认真一点,我的问题是:有没有办法对通过npm
安装的Configuration conf = BigtableConfiguration.configure(projectId, instanceId);
if(!Strings.isNullOrEmpty(host)){
conf.set(BigtableOptionsFactory.BIGTABLE_HOST_KEY, host);
conf.set(BigtableOptionsFactory.BIGTABLE_PORT_KEY, Integer.toString(port));
}
connection = BigtableConfiguration.connect(configuration);
try (Table table = connection.getTable("tName")){
table.put(<Put instance>);
}
个软件包进行静态分析?然后修剪未使用的依赖项?
当然,我的模块在运行时不会在这个树中定义的每个模块的私有范围内使用大多数函数声明。