Running npm install
for WordPress is a terrifying experience. It installs so many libraries and dependencies, it would take a lifetime to learn them all. If you’ve never had the pleasure, here’s what it looks like today:
WordPress@4.5.0 /Users/johnjamesjacoby/Work/VVV/www/wordpress-develop ├─┬ autoprefixer@6.1.2 │ ├── browserslist@1.0.1 │ ├── caniuse-db@1.0.30000384 │ ├── num2fraction@1.2.2 │ ├─┬ postcss@5.0.14 │ │ ├── js-base64@2.1.9 │ │ ├── source-map@0.5.3 │ │ └─┬ supports-color@3.1.2 │ │ └── has-flag@1.0.0 │ └── postcss-value-parser@3.2.3 ├─┬ grunt@0.4.5 │ ├── async@0.1.22 │ ├── coffee-script@1.3.3 │ ├── colors@0.6.2 │ ├── dateformat@1.0.2-1.2.3 │ ├── eventemitter2@0.4.14 │ ├── exit@0.1.2 │ ├─┬ findup-sync@0.1.3 │ │ ├─┬ glob@3.2.11 │ │ │ └── minimatch@0.3.0 │ │ └── lodash@2.4.2 │ ├── getobject@0.1.0 │ ├─┬ glob@3.1.21 │ │ ├── graceful-fs@1.2.3 │ │ └── inherits@1.0.2 │ ├─┬ grunt-legacy-log@0.1.3 │ │ ├─┬ grunt-legacy-log-utils@0.1.1 │ │ │ ├── lodash@2.4.2 │ │ │ └── underscore.string@2.3.3 │ │ ├── lodash@2.4.2 │ │ └── underscore.string@2.3.3 │ ├── hooker@0.2.3 │ ├── iconv-lite@0.2.11 │ ├─┬ js-yaml@2.0.5 │ │ └─┬ argparse@0.1.16 │ │ ├── underscore@1.7.0 │ │ └── underscore.string@2.4.0 │ ├── lodash@0.9.2 │ ├─┬ minimatch@0.2.14 │ │ ├── lru-cache@2.7.3 │ │ └── sigmund@1.0.1 │ ├─┬ nopt@1.0.10 │ │ └── abbrev@1.0.7 │ ├── rimraf@2.2.8 │ ├── underscore.string@2.2.1 │ └── which@1.0.9 ├─┬ grunt-browserify@4.0.1 │ ├── async@0.9.2 │ ├─┬ browserify@11.2.0 │ │ ├── assert@1.3.0 │ │ ├─┬ browser-pack@5.0.1 │ │ │ ├─┬ combine-source-map@0.6.1 │ │ │ │ ├── convert-source-map@1.1.3 │ │ │ │ ├─┬ inline-source-map@0.5.0 │ │ │ │ │ └── source-map@0.4.4 │ │ │ │ ├── lodash.memoize@3.0.4 │ │ │ │ └── source-map@0.4.4 │ │ │ └── umd@3.0.1 │ │ ├── browser-resolve@1.11.0 │ │ ├─┬ browserify-zlib@0.1.4 │ │ │ └── pako@0.2.8 │ │ ├─┬ buffer@3.6.0 │ │ │ ├── base64-js@0.0.8 │ │ │ ├── ieee754@1.1.6 │ │ │ └── isarray@1.0.0 │ │ ├── builtins@0.0.7 │ │ ├── commondir@0.0.1 │ │ ├─┬ concat-stream@1.4.10 │ │ │ ├── readable-stream@1.1.13 │ │ │ └── typedarray@0.0.6 │ │ ├─┬ console-browserify@1.1.0 │ │ │ └── date-now@0.1.4 │ │ ├── constants-browserify@0.0.1 │ │ ├─┬ crypto-browserify@3.11.0 │ │ │ ├─┬ browserify-cipher@1.0.0 │ │ │ │ ├─┬ browserify-aes@1.0.5 │ │ │ │ │ └── buffer-xor@1.0.3 │ │ │ │ ├─┬ browserify-des@1.0.0 │ │ │ │ │ └─┬ des.js@1.0.0 │ │ │ │ │ └── minimalistic-assert@1.0.0 │ │ │ │ └── evp_bytestokey@1.0.0 │ │ │ ├─┬ browserify-sign@4.0.0 │ │ │ │ ├── bn.js@4.6.2 │ │ │ │ ├── browserify-rsa@4.0.0 │ │ │ │ ├─┬ elliptic@6.0.2 │ │ │ │ │ ├── brorand@1.0.5 │ │ │ │ │ └── hash.js@1.0.3 │ │ │ │ └─┬ parse-asn1@5.0.0 │ │ │ │ └── asn1.js@4.3.0 │ │ │ ├── create-ecdh@4.0.0 │ │ │ ├─┬ create-hash@1.1.2 │ │ │ │ ├── cipher-base@1.0.2 │ │ │ │ └── ripemd160@1.0.1 │ │ │ ├── create-hmac@1.1.4 │ │ │ ├─┬ diffie-hellman@5.0.0 │ │ │ │ └── miller-rabin@4.0.0 │ │ │ ├── pbkdf2@3.0.4 │ │ │ ├── public-encrypt@4.0.0 │ │ │ └── randombytes@2.0.1 │ │ ├── defined@1.0.0 │ │ ├── deps-sort@1.3.9 │ │ ├── domain-browser@1.1.7 │ │ ├─┬ duplexer2@0.0.2 │ │ │ └── readable-stream@1.1.13 │ │ ├── events@1.0.2 │ │ ├─┬ glob@4.5.3 │ │ │ └── minimatch@2.0.10 │ │ ├─┬ has@1.0.1 │ │ │ └── function-bind@1.0.2 │ │ ├── htmlescape@1.1.0 │ │ ├── https-browserify@0.0.1 │ │ ├── inherits@2.0.1 │ │ ├─┬ insert-module-globals@6.6.3 │ │ │ ├── is-buffer@1.1.1 │ │ │ └─┬ lexical-scope@1.2.0 │ │ │ └── astw@2.0.0 │ │ ├── isarray@0.0.1 │ │ ├─┬ JSONStream@1.0.7 │ │ │ ├── jsonparse@1.2.0 │ │ │ └── through@2.3.8 │ │ ├─┬ labeled-stream-splicer@1.0.2 │ │ │ └─┬ stream-splicer@1.3.2 │ │ │ └── readable-stream@1.1.13 │ │ ├─┬ module-deps@3.9.1 │ │ │ ├── detective@4.3.1 │ │ │ ├── readable-stream@1.1.13 │ │ │ └─┬ stream-combiner2@1.0.2 │ │ │ └─┬ through2@0.5.1 │ │ │ ├── readable-stream@1.0.33 │ │ │ └── xtend@3.0.0 │ │ ├── os-browserify@0.1.2 │ │ ├─┬ parents@1.0.1 │ │ │ └── path-platform@0.11.15 │ │ ├── path-browserify@0.0.0 │ │ ├── process@0.11.2 │ │ ├── punycode@1.4.0 │ │ ├── querystring-es3@0.2.1 │ │ ├─┬ read-only-stream@1.1.1 │ │ │ ├── readable-stream@1.1.13 │ │ │ └─┬ readable-wrap@1.0.0 │ │ │ └── readable-stream@1.1.13 │ │ ├─┬ readable-stream@2.0.5 │ │ │ ├── core-util-is@1.0.2 │ │ │ ├── process-nextick-args@1.0.6 │ │ │ └── util-deprecate@1.0.2 │ │ ├─┬ shasum@1.0.2 │ │ │ ├─┬ json-stable-stringify@0.0.1 │ │ │ │ └── jsonify@0.0.0 │ │ │ └── sha.js@2.4.4 │ │ ├── shell-quote@0.0.1 │ │ ├── stream-browserify@2.0.1 │ │ ├─┬ stream-http@1.7.1 │ │ │ ├── builtin-status-codes@1.0.0 │ │ │ ├── foreach@2.0.5 │ │ │ ├── indexof@0.0.1 │ │ │ └── object-keys@1.0.9 │ │ ├── string_decoder@0.10.31 │ │ ├─┬ subarg@1.0.0 │ │ │ └── minimist@1.2.0 │ │ ├─┬ syntax-error@1.1.4 │ │ │ └── acorn@1.2.2 │ │ ├─┬ through2@1.1.1 │ │ │ └── readable-stream@1.1.13 │ │ ├── timers-browserify@1.4.2 │ │ ├── tty-browserify@0.0.0 │ │ ├─┬ url@0.10.3 │ │ │ ├── punycode@1.3.2 │ │ │ └── querystring@0.2.0 │ │ ├── util@0.10.3 │ │ ├── vm-browserify@0.0.4 │ │ └── xtend@4.0.1 │ ├─┬ glob@5.0.15 │ │ ├─┬ inflight@1.0.4 │ │ │ └── wrappy@1.0.1 │ │ ├─┬ minimatch@3.0.0 │ │ │ └─┬ brace-expansion@1.1.2 │ │ │ ├── balanced-match@0.3.0 │ │ │ └── concat-map@0.0.1 │ │ ├── once@1.3.3 │ │ └── path-is-absolute@1.0.0 │ ├── lodash@3.10.1 │ ├── resolve@1.1.6 │ └─┬ watchify@3.6.1 │ ├─┬ anymatch@1.3.0 │ │ ├── arrify@1.0.1 │ │ └─┬ micromatch@2.3.7 │ │ ├─┬ arr-diff@2.0.0 │ │ │ └── arr-flatten@1.0.1 │ │ ├── array-unique@0.2.1 │ │ ├─┬ braces@1.8.3 │ │ │ ├─┬ expand-range@1.8.1 │ │ │ │ └─┬ fill-range@2.2.3 │ │ │ │ ├── is-number@2.1.0 │ │ │ │ ├── isobject@2.0.0 │ │ │ │ ├── randomatic@1.1.5 │ │ │ │ └── repeat-string@1.5.2 │ │ │ ├── preserve@0.2.0 │ │ │ └── repeat-element@1.1.2 │ │ ├── expand-brackets@0.1.4 │ │ ├─┬ extglob@0.3.1 │ │ │ ├─┬ ansi-green@0.1.1 │ │ │ │ └── ansi-wrap@0.1.0 │ │ │ └── success-symbol@0.1.0 │ │ ├── filename-regex@2.0.0 │ │ ├── is-extglob@1.0.0 │ │ ├── kind-of@3.0.2 │ │ ├── normalize-path@2.0.1 │ │ ├─┬ object.omit@2.0.0 │ │ │ ├─┬ for-own@0.1.3 │ │ │ │ └── for-in@0.1.4 │ │ │ └── is-extendable@0.1.1 │ │ ├─┬ parse-glob@3.0.4 │ │ │ ├── glob-base@0.3.0 │ │ │ └── is-dotfile@1.0.2 │ │ └─┬ regex-cache@0.4.2 │ │ ├── is-equal-shallow@0.1.3 │ │ └── is-primitive@2.0.0 │ ├─┬ browserify@12.0.1 │ │ ├─┬ browser-pack@6.0.1 │ │ │ └─┬ combine-source-map@0.7.1 │ │ │ ├── inline-source-map@0.6.1 │ │ │ └── source-map@0.4.2 │ │ ├── concat-stream@1.5.1 │ │ ├── constants-browserify@1.0.0 │ │ ├── deps-sort@2.0.0 │ │ ├── duplexer2@0.1.4 │ │ ├── events@1.1.0 │ │ ├─┬ glob@5.0.15 │ │ │ └── minimatch@3.0.0 │ │ ├── insert-module-globals@7.0.1 │ │ ├─┬ labeled-stream-splicer@2.0.0 │ │ │ └── stream-splicer@2.0.0 │ │ ├─┬ module-deps@4.0.5 │ │ │ └── stream-combiner2@1.1.1 │ │ ├── read-only-stream@2.0.0 │ │ ├── shell-quote@1.4.3 │ │ ├── stream-http@2.0.2 │ │ └─┬ url@0.11.0 │ │ └── punycode@1.3.2 │ ├─┬ chokidar@1.4.2 │ │ ├── async-each@0.1.6 │ │ ├─┬ fsevents@1.0.6 │ │ │ └─┬ node-pre-gyp@0.6.17 │ │ │ ├─┬ mkdirp@0.5.1 │ │ │ │ └── minimist@0.0.8 │ │ │ ├─┬ nopt@3.0.6 │ │ │ │ └── abbrev@1.0.7 │ │ │ ├─┬ npmlog@2.0.0 │ │ │ │ ├── ansi@0.3.0 │ │ │ │ ├─┬ are-we-there-yet@1.0.4 │ │ │ │ │ ├── delegates@0.1.0 │ │ │ │ │ └─┬ readable-stream@1.1.13 │ │ │ │ │ ├── core-util-is@1.0.2 │ │ │ │ │ ├── isarray@0.0.1 │ │ │ │ │ └── string_decoder@0.10.31 │ │ │ │ └─┬ gauge@1.2.2 │ │ │ │ ├── has-unicode@1.0.1 │ │ │ │ ├─┬ lodash.pad@3.1.1 │ │ │ │ │ ├── lodash._basetostring@3.0.1 │ │ │ │ │ └─┬ lodash._createpadding@3.6.1 │ │ │ │ │ └── lodash.repeat@3.0.1 │ │ │ │ ├── lodash.padleft@3.1.1 │ │ │ │ └── lodash.padright@3.1.1 │ │ │ ├─┬ rc@1.1.5 │ │ │ │ ├── ini@1.3.4 │ │ │ │ ├── minimist@1.2.0 │ │ │ │ └── strip-json-comments@1.0.4 │ │ │ ├─┬ request@2.67.0 │ │ │ │ ├── aws-sign2@0.6.0 │ │ │ │ ├─┬ bl@1.0.0 │ │ │ │ │ └─┬ readable-stream@2.0.4 │ │ │ │ │ ├── core-util-is@1.0.2 │ │ │ │ │ ├── inherits@2.0.1 │ │ │ │ │ ├── isarray@0.0.1 │ │ │ │ │ ├── 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-rc3 │ │ │ │ ├─┬ har-validator@2.0.3 │ │ │ │ │ ├─┬ chalk@1.1.1 │ │ │ │ │ │ ├── ansi-styles@2.1.0 │ │ │ │ │ │ ├─┬ has-ansi@2.0.0 │ │ │ │ │ │ │ └── ansi-regex@2.0.0 │ │ │ │ │ │ ├── strip-ansi@3.0.0 │ │ │ │ │ │ └── supports-color@2.0.0 │ │ │ │ │ ├─┬ commander@2.9.0 │ │ │ │ │ │ └── graceful-readlink@1.0.1 │ │ │ │ │ ├─┬ is-my-json-valid@2.12.3 │ │ │ │ │ │ ├── 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.0 │ │ │ │ │ └── pinkie@2.0.1 │ │ │ │ ├─┬ hawk@3.1.2 │ │ │ │ │ ├── boom@2.10.1 │ │ │ │ │ ├── cryptiles@2.0.5 │ │ │ │ │ ├── hoek@2.16.3 │ │ │ │ │ └── sntp@1.0.9 │ │ │ │ ├─┬ http-signature@1.1.0 │ │ │ │ │ ├── assert-plus@0.1.5 │ │ │ │ │ ├─┬ jsprim@1.2.2 │ │ │ │ │ │ ├── extsprintf@1.0.2 │ │ │ │ │ │ ├── json-schema@0.2.2 │ │ │ │ │ │ └── verror@1.3.6 │ │ │ │ │ └─┬ sshpk@1.7.0 │ │ │ │ │ ├── asn1@0.2.3 │ │ │ │ │ ├── assert-plus@0.2.0 │ │ │ │ │ ├── ecc-jsbn@0.1.1 │ │ │ │ │ ├── jodid25519@1.0.2 │ │ │ │ │ └── jsbn@0.1.0 │ │ │ │ ├── is-typedarray@1.0.0 │ │ │ │ ├── isstream@0.1.2 │ │ │ │ ├── json-stringify-safe@5.0.1 │ │ │ │ ├── node-uuid@1.4.7 │ │ │ │ ├── oauth-sign@0.8.0 │ │ │ │ ├── qs@5.2.0 │ │ │ │ ├── stringstream@0.0.5 │ │ │ │ └── tough-cookie@2.2.1 │ │ │ ├─┬ rimraf@2.4.4 │ │ │ │ └─┬ glob@5.0.15 │ │ │ │ ├─┬ inflight@1.0.4 │ │ │ │ │ └── wrappy@1.0.1 │ │ │ │ ├── inherits@2.0.1 │ │ │ │ ├─┬ minimatch@3.0.0 │ │ │ │ │ └─┬ brace-expansion@1.1.1 │ │ │ │ │ └── concat-map@0.0.1 │ │ │ │ ├─┬ once@1.3.3 │ │ │ │ │ └── wrappy@1.0.1 │ │ │ │ └── path-is-absolute@1.0.0 │ │ │ ├── semver@5.1.0 │ │ │ ├─┬ tar@2.2.1 │ │ │ │ ├── block-stream@0.0.8 │ │ │ │ ├── fstream@1.0.8 │ │ │ │ └── inherits@2.0.1 │ │ │ └─┬ tar-pack@3.1.0 │ │ │ ├── debug@0.7.4 │ │ │ ├─┬ fstream-ignore@1.0.3 │ │ │ │ └─┬ minimatch@3.0.0 │ │ │ │ └─┬ brace-expansion@1.1.1 │ │ │ │ └── concat-map@0.0.1 │ │ │ ├── graceful-fs@4.1.2 │ │ │ ├─┬ readable-stream@1.0.33 │ │ │ │ ├── core-util-is@1.0.2 │ │ │ │ ├── inherits@2.0.1 │ │ │ │ ├── isarray@0.0.1 │ │ │ │ └── string_decoder@0.10.31 │ │ │ └── rimraf@2.2.8 │ │ ├── glob-parent@2.0.0 │ │ ├─┬ is-binary-path@1.0.1 │ │ │ └── binary-extensions@1.4.0 │ │ ├── is-glob@2.0.1 │ │ └─┬ readdirp@2.0.0 │ │ ├── graceful-fs@4.1.2 │ │ └── minimatch@2.0.10 │ ├─┬ outpipe@1.1.1 │ │ └─┬ shell-quote@1.4.3 │ │ ├── array-filter@0.0.1 │ │ ├── array-map@0.0.0 │ │ └── array-reduce@0.0.0 │ └── through2@2.0.0 ├── grunt-contrib-clean@0.6.0 ├─┬ grunt-contrib-compress@0.14.0 │ ├─┬ archiver@0.16.0 │ │ ├── async@1.4.2 │ │ ├── buffer-crc32@0.2.5 │ │ ├─┬ glob@5.0.15 │ │ │ └── minimatch@3.0.0 │ │ ├─┬ lazystream@0.1.0 │ │ │ └── readable-stream@1.0.33 │ │ ├── lodash@3.10.1 │ │ ├── readable-stream@1.0.33 │ │ ├─┬ tar-stream@1.2.2 │ │ │ ├── bl@1.0.0 │ │ │ └── end-of-stream@1.1.0 │ │ └─┬ zip-stream@0.6.0 │ │ ├─┬ compress-commons@0.3.0 │ │ │ ├─┬ crc32-stream@0.3.4 │ │ │ │ └── readable-stream@1.0.33 │ │ │ ├── node-int64@0.4.0 │ │ │ └── readable-stream@1.0.33 │ │ ├── lodash@3.10.1 │ │ └── readable-stream@1.0.33 │ ├─┬ chalk@1.1.1 │ │ ├── ansi-styles@2.1.0 │ │ ├── escape-string-regexp@1.0.4 │ │ ├─┬ has-ansi@2.0.0 │ │ │ └── ansi-regex@2.0.0 │ │ ├── strip-ansi@3.0.0 │ │ └── supports-color@2.0.0 │ └─┬ pretty-bytes@2.0.1 │ ├── get-stdin@4.0.1 │ ├─┬ meow@3.7.0 │ │ ├─┬ camelcase-keys@2.0.0 │ │ │ └── camelcase@2.0.1 │ │ ├── decamelize@1.1.2 │ │ ├─┬ loud-rejection@1.2.0 │ │ │ └── signal-exit@2.1.2 │ │ ├── map-obj@1.0.1 │ │ ├─┬ normalize-package-data@2.3.5 │ │ │ ├── hosted-git-info@2.1.4 │ │ │ ├─┬ is-builtin-module@1.0.0 │ │ │ │ └── builtin-modules@1.1.1 │ │ │ └─┬ validate-npm-package-license@3.0.1 │ │ │ ├─┬ spdx-correct@1.0.2 │ │ │ │ └── spdx-license-ids@1.1.0 │ │ │ └─┬ spdx-expression-parse@1.0.2 │ │ │ └── spdx-exceptions@1.0.4 │ │ ├─┬ read-pkg-up@1.0.1 │ │ │ ├─┬ find-up@1.1.0 │ │ │ │ └── path-exists@2.1.0 │ │ │ └─┬ read-pkg@1.1.0 │ │ │ ├─┬ load-json-file@1.1.0 │ │ │ │ ├── graceful-fs@4.1.2 │ │ │ │ ├─┬ parse-json@2.2.0 │ │ │ │ │ └─┬ error-ex@1.3.0 │ │ │ │ │ └── is-arrayish@0.2.1 │ │ │ │ └── pify@2.3.0 │ │ │ └─┬ path-type@1.1.0 │ │ │ └── graceful-fs@4.1.2 │ │ ├─┬ redent@1.0.0 │ │ │ ├─┬ indent-string@2.1.0 │ │ │ │ └─┬ repeating@2.0.0 │ │ │ │ └── is-finite@1.0.1 │ │ │ └── strip-indent@1.0.1 │ │ └── trim-newlines@1.0.0 │ └── number-is-nan@1.0.0 ├─┬ grunt-contrib-concat@0.5.1 │ ├─┬ chalk@0.5.1 │ │ ├── ansi-styles@1.1.0 │ │ ├─┬ has-ansi@0.1.0 │ │ │ └── ansi-regex@0.2.1 │ │ ├── strip-ansi@0.3.0 │ │ └── supports-color@0.2.0 │ └─┬ source-map@0.3.0 │ └── amdefine@1.0.0 ├─┬ grunt-contrib-copy@0.8.2 │ └── file-sync-cmp@0.1.1 ├─┬ grunt-contrib-cssmin@0.14.0 │ ├─┬ clean-css@3.4.9 │ │ ├─┬ commander@2.8.1 │ │ │ └── graceful-readlink@1.0.1 │ │ └── source-map@0.4.4 │ └─┬ maxmin@1.1.0 │ ├── figures@1.4.0 │ ├── gzip-size@1.0.0 │ └── pretty-bytes@1.0.4 ├─┬ grunt-contrib-imagemin@1.0.0 │ ├── async@0.9.2 │ ├── gulp-rename@1.2.2 │ ├─┬ imagemin@4.0.0 │ │ ├─┬ buffer-to-vinyl@1.1.0 │ │ │ ├── file-type@3.4.0 │ │ │ ├── uuid@2.0.1 │ │ │ └─┬ vinyl@1.1.0 │ │ │ ├── clone@1.0.2 │ │ │ ├── clone-stats@0.0.1 │ │ │ └── replace-ext@0.0.1 │ │ ├─┬ imagemin-gifsicle@4.2.0 │ │ │ ├─┬ gifsicle@3.0.3 │ │ │ │ ├─┬ bin-build@2.2.0 │ │ │ │ │ ├── archive-type@3.2.0 │ │ │ │ │ ├─┬ decompress@3.0.0 │ │ │ │ │ │ ├─┬ decompress-tar@3.1.0 │ │ │ │ │ │ │ ├── is-tar@1.0.0 │ │ │ │ │ │ │ ├── object-assign@2.1.1 │ │ │ │ │ │ │ ├─┬ strip-dirs@1.1.1 │ │ │ │ │ │ │ │ ├── is-natural-number@2.0.0 │ │ │ │ │ │ │ │ └── sum-up@1.0.2 │ │ │ │ │ │ │ ├─┬ through2@0.6.5 │ │ │ │ │ │ │ │ └── readable-stream@1.0.33 │ │ │ │ │ │ │ └─┬ vinyl@0.4.6 │ │ │ │ │ │ │ └── clone@0.2.0 │ │ │ │ │ │ ├─┬ decompress-tarbz2@3.1.0 │ │ │ │ │ │ │ ├── is-bzip2@1.0.0 │ │ │ │ │ │ │ ├── object-assign@2.1.1 │ │ │ │ │ │ │ ├── seek-bzip@1.0.5 │ │ │ │ │ │ │ ├─┬ through2@0.6.5 │ │ │ │ │ │ │ │ └── readable-stream@1.0.33 │ │ │ │ │ │ │ └─┬ vinyl@0.4.6 │ │ │ │ │ │ │ └── clone@0.2.0 │ │ │ │ │ │ ├─┬ decompress-targz@3.1.0 │ │ │ │ │ │ │ ├── is-gzip@1.0.0 │ │ │ │ │ │ │ ├── object-assign@2.1.1 │ │ │ │ │ │ │ ├─┬ through2@0.6.5 │ │ │ │ │ │ │ │ └── readable-stream@1.0.33 │ │ │ │ │ │ │ └─┬ vinyl@0.4.6 │ │ │ │ │ │ │ └── clone@0.2.0 │ │ │ │ │ │ ├─┬ decompress-unzip@3.4.0 │ │ │ │ │ │ │ ├── is-zip@1.0.0 │ │ │ │ │ │ │ ├── stat-mode@0.2.1 │ │ │ │ │ │ │ ├── through2@2.0.0 │ │ │ │ │ │ │ └─┬ yauzl@2.4.1 │ │ │ │ │ │ │ └─┬ fd-slicer@1.0.1 │ │ │ │ │ │ │ └── pend@1.2.0 │ │ │ │ │ │ ├─┬ stream-combiner2@1.1.1 │ │ │ │ │ │ │ └── duplexer2@0.1.4 │ │ │ │ │ │ └── vinyl-assign@1.2.1 │ │ │ │ │ ├─┬ download@4.4.3 │ │ │ │ │ │ ├─┬ caw@1.2.0 │ │ │ │ │ │ │ ├─┬ get-proxy@1.0.1 │ │ │ │ │ │ │ │ └─┬ rc@0.5.5 │ │ │ │ │ │ │ │ ├── deep-extend@0.2.11 │ │ │ │ │ │ │ │ ├── minimist@0.0.10 │ │ │ │ │ │ │ │ └── strip-json-comments@0.1.3 │ │ │ │ │ │ │ ├── is-obj@1.0.0 │ │ │ │ │ │ │ └── object-assign@3.0.0 │ │ │ │ │ │ ├─┬ filenamify@1.2.0 │ │ │ │ │ │ │ ├── filename-reserved-regex@1.0.0 │ │ │ │ │ │ │ ├── strip-outer@1.0.0 │ │ │ │ │ │ │ └── trim-repeated@1.0.0 │ │ │ │ │ │ ├─┬ got@5.3.0 │ │ │ │ │ │ │ ├─┬ create-error-class@2.0.1 │ │ │ │ │ │ │ │ └── capture-stack-trace@1.0.0 │ │ │ │ │ │ │ ├── is-plain-obj@1.1.0 │ │ │ │ │ │ │ ├── is-redirect@1.0.0 │ │ │ │ │ │ │ ├── lowercase-keys@1.0.0 │ │ │ │ │ │ │ ├── node-status-codes@1.0.0 │ │ │ │ │ │ │ ├── timed-out@2.0.0 │ │ │ │ │ │ │ ├── unzip-response@1.0.0 │ │ │ │ │ │ │ └─┬ url-parse-lax@1.0.0 │ │ │ │ │ │ │ └── prepend-http@1.0.3 │ │ │ │ │ │ ├─┬ gulp-decompress@1.2.0 │ │ │ │ │ │ │ └─┬ gulp-util@3.0.7 │ │ │ │ │ │ │ ├── array-differ@1.0.0 │ │ │ │ │ │ │ ├── array-uniq@1.0.2 │ │ │ │ │ │ │ ├── beeper@1.1.0 │ │ │ │ │ │ │ ├── dateformat@1.0.12 │ │ │ │ │ │ │ ├─┬ fancy-log@1.1.0 │ │ │ │ │ │ │ │ └── dateformat@1.0.12 │ │ │ │ │ │ │ ├─┬ gulplog@1.0.0 │ │ │ │ │ │ │ │ └── glogg@1.0.0 │ │ │ │ │ │ │ ├─┬ has-gulplog@0.1.0 │ │ │ │ │ │ │ │ └── sparkles@1.0.0 │ │ │ │ │ │ │ ├── lodash._reescape@3.0.0 │ │ │ │ │ │ │ ├── lodash._reevaluate@3.0.0 │ │ │ │ │ │ │ ├── lodash._reinterpolate@3.0.0 │ │ │ │ │ │ │ ├─┬ lodash.template@3.6.2 │ │ │ │ │ │ │ │ ├── lodash._basecopy@3.0.1 │ │ │ │ │ │ │ │ ├── lodash._basevalues@3.0.0 │ │ │ │ │ │ │ │ ├── lodash._isiterateecall@3.0.9 │ │ │ │ │ │ │ │ ├── lodash.escape@3.0.0 │ │ │ │ │ │ │ │ ├─┬ lodash.keys@3.1.2 │ │ │ │ │ │ │ │ │ ├── lodash._getnative@3.9.1 │ │ │ │ │ │ │ │ │ ├── lodash.isarguments@3.0.4 │ │ │ │ │ │ │ │ │ └── lodash.isarray@3.0.4 │ │ │ │ │ │ │ │ ├── lodash.restparam@3.6.1 │ │ │ │ │ │ │ │ └── lodash.templatesettings@3.1.0 │ │ │ │ │ │ │ ├── multipipe@0.1.2 │ │ │ │ │ │ │ ├── object-assign@3.0.0 │ │ │ │ │ │ │ ├── through2@2.0.0 │ │ │ │ │ │ │ └── vinyl@0.5.3 │ │ │ │ │ │ ├── is-url@1.2.1 │ │ │ │ │ │ ├─┬ read-all-stream@3.0.1 │ │ │ │ │ │ │ └─┬ pinkie-promise@1.0.0 │ │ │ │ │ │ │ └── pinkie@1.0.0 │ │ │ │ │ │ ├─┬ stream-combiner2@1.1.1 │ │ │ │ │ │ │ └── duplexer2@0.1.4 │ │ │ │ │ │ └─┬ ware@1.3.0 │ │ │ │ │ │ └─┬ wrap-fn@0.1.4 │ │ │ │ │ │ └── co@3.1.0 │ │ │ │ │ ├─┬ exec-series@1.0.2 │ │ │ │ │ │ └── async-each-series@1.1.0 │ │ │ │ │ └─┬ url-regex@3.1.0 │ │ │ │ │ └── ip-regex@1.0.3 │ │ │ │ ├─┬ bin-wrapper@3.0.2 │ │ │ │ │ ├─┬ bin-check@2.0.0 │ │ │ │ │ │ └── executable@1.1.0 │ │ │ │ │ ├─┬ bin-version-check@2.1.0 │ │ │ │ │ │ ├─┬ bin-version@1.0.4 │ │ │ │ │ │ │ └─┬ find-versions@1.2.1 │ │ │ │ │ │ │ └── semver-regex@1.0.0 │ │ │ │ │ │ ├── semver@4.3.6 │ │ │ │ │ │ └── semver-truncate@1.1.0 │ │ │ │ │ ├── lazy-req@1.1.0 │ │ │ │ │ └── os-filter-obj@1.0.3 │ │ │ │ └─┬ logalot@2.1.0 │ │ │ │ └─┬ squeak@1.3.0 │ │ │ │ ├── console-stream@0.1.1 │ │ │ │ └─┬ lpad-align@1.1.0 │ │ │ │ ├── longest@1.0.1 │ │ │ │ └── lpad@2.0.1 │ │ │ ├── is-gif@1.0.0 │ │ │ └─┬ through2@0.6.5 │ │ │ └── readable-stream@1.0.33 │ │ ├─┬ imagemin-jpegtran@4.3.2 │ │ │ ├── is-jpg@1.0.0 │ │ │ ├── jpegtran-bin@3.0.6 │ │ │ └── through2@2.0.0 │ │ ├─┬ imagemin-optipng@4.3.0 │ │ │ ├─┬ exec-buffer@2.0.1 │ │ │ │ └── tempfile@1.1.1 │ │ │ ├── is-png@1.0.0 │ │ │ ├── optipng-bin@3.0.4 │ │ │ └─┬ through2@0.6.5 │ │ │ └── readable-stream@1.0.33 │ │ ├─┬ imagemin-svgo@4.2.0 │ │ │ ├── is-svg@1.1.1 │ │ │ ├─┬ svgo@0.6.1 │ │ │ │ ├─┬ coa@1.0.1 │ │ │ │ │ └── q@1.4.1 │ │ │ │ ├── colors@1.1.2 │ │ │ │ ├─┬ csso@1.4.4 │ │ │ │ │ └── clap@1.0.10 │ │ │ │ ├─┬ js-yaml@3.4.6 │ │ │ │ │ ├─┬ argparse@1.0.3 │ │ │ │ │ │ ├── lodash@3.10.1 │ │ │ │ │ │ └── sprintf-js@1.0.3 │ │ │ │ │ ├── esprima@2.7.1 │ │ │ │ │ └── inherit@2.2.2 │ │ │ │ ├── sax@1.1.4 │ │ │ │ └── whet.extend@0.9.9 │ │ │ └── through2@2.0.0 │ │ ├── optional@0.1.3 │ │ ├─┬ stream-combiner2@1.1.1 │ │ │ └── duplexer2@0.1.4 │ │ └─┬ vinyl-fs@2.2.1 │ │ ├─┬ duplexify@3.4.2 │ │ │ └── end-of-stream@1.0.0 │ │ ├─┬ glob-stream@5.3.1 │ │ │ ├─┬ glob@5.0.15 │ │ │ │ └── minimatch@3.0.0 │ │ │ ├─┬ ordered-read-streams@0.3.0 │ │ │ │ └── is-stream@1.0.1 │ │ │ ├─┬ through2@0.6.5 │ │ │ │ └── readable-stream@1.0.33 │ │ │ ├─┬ to-absolute-glob@0.1.1 │ │ │ │ └── extend-shallow@2.0.1 │ │ │ └── unique-stream@2.2.0 │ │ ├── graceful-fs@4.1.2 │ │ ├─┬ gulp-sourcemaps@1.6.0 │ │ │ ├── graceful-fs@4.1.2 │ │ │ └── through2@2.0.0 │ │ ├── is-valid-glob@0.3.0 │ │ ├── merge-stream@1.0.0 │ │ ├─┬ strip-bom@2.0.0 │ │ │ └── is-utf8@0.2.1 │ │ ├─┬ strip-bom-stream@1.0.0 │ │ │ └── first-chunk-stream@1.0.0 │ │ ├── through2@2.0.0 │ │ └─┬ through2-filter@2.0.0 │ │ └── through2@2.0.0 │ └── pretty-bytes@1.0.4 ├─┬ grunt-contrib-jshint@0.11.3 │ └─┬ jshint@2.8.0 │ ├─┬ cli@0.6.6 │ │ └─┬ glob@3.2.11 │ │ └── minimatch@0.3.0 │ ├─┬ htmlparser2@3.8.3 │ │ ├── domelementtype@1.3.0 │ │ ├── domhandler@2.3.0 │ │ ├─┬ domutils@1.5.1 │ │ │ └─┬ dom-serializer@0.1.0 │ │ │ ├── domelementtype@1.1.3 │ │ │ └── entities@1.1.1 │ │ ├── entities@1.0.0 │ │ └── readable-stream@1.1.13 │ ├── lodash@3.7.0 │ ├── minimatch@2.0.10 │ ├── shelljs@0.3.0 │ └── strip-json-comments@1.0.4 ├─┬ grunt-contrib-qunit@0.7.0 │ └─┬ grunt-lib-phantomjs@0.6.0 │ ├─┬ phantomjs@1.9.19 │ │ ├── adm-zip@0.4.4 │ │ ├─┬ fs-extra@0.23.1 │ │ │ ├── graceful-fs@4.1.2 │ │ │ └── jsonfile@2.2.3 │ │ ├── kew@0.4.0 │ │ ├─┬ md5@2.0.0 │ │ │ ├── charenc@0.0.1 │ │ │ ├── crypt@0.0.1 │ │ │ └── is-buffer@1.0.2 │ │ ├─┬ npmconf@2.1.1 │ │ │ ├── nopt@3.0.6 │ │ │ └── semver@4.3.6 │ │ ├── progress@1.1.8 │ │ ├─┬ request@2.42.0 │ │ │ ├── aws-sign2@0.5.0 │ │ │ ├─┬ bl@0.9.4 │ │ │ │ └── readable-stream@1.0.33 │ │ │ ├── caseless@0.6.0 │ │ │ ├── hawk@1.1.1 │ │ │ ├── mime-types@1.0.2 │ │ │ ├── oauth-sign@0.4.0 │ │ │ └── qs@1.2.2 │ │ └─┬ request-progress@0.3.1 │ │ └── throttleit@0.0.2 │ ├── semver@1.0.14 │ └─┬ temporary@0.0.8 │ └── package@1.0.1 ├─┬ grunt-contrib-uglify@0.10.1 │ ├─┬ chalk@1.0.0 │ │ ├─┬ has-ansi@1.0.3 │ │ │ └── ansi-regex@1.1.1 │ │ ├── strip-ansi@2.0.1 │ │ └── supports-color@1.3.1 │ ├── lodash@3.2.0 │ ├─┬ maxmin@1.0.1 │ │ └── pretty-bytes@1.0.4 │ ├─┬ uglify-js@2.5.0 │ │ ├── async@0.2.10 │ │ ├── uglify-to-browserify@1.0.2 │ │ └─┬ yargs@3.5.4 │ │ ├── camelcase@1.2.1 │ │ ├── window-size@0.1.0 │ │ └── wordwrap@0.0.2 │ └── uri-path@1.0.0 ├─┬ grunt-contrib-watch@0.6.1 │ ├── async@0.2.10 │ ├─┬ gaze@0.5.2 │ │ └─┬ globule@0.1.0 │ │ └── lodash@1.0.2 │ ├── lodash@2.4.2 │ └─┬ tiny-lr-fork@0.0.5 │ ├── debug@0.7.4 │ ├── faye-websocket@0.4.4 │ ├─┬ noptify@0.0.3 │ │ └── nopt@2.0.0 │ └── qs@0.5.6 ├── grunt-includes@0.5.2 ├─┬ grunt-jsvalidate@0.2.2 │ └── esprima@1.0.4 ├── grunt-legacy-util@0.2.0 ├─┬ grunt-patch-wordpress@0.3.0 │ ├─┬ inquirer@0.2.5 │ │ ├── async@0.2.10 │ │ ├─┬ cli-color@0.2.3 │ │ │ ├── es5-ext@0.9.2 │ │ │ └─┬ memoizee@0.2.6 │ │ │ ├── event-emitter@0.2.2 │ │ │ └── next-tick@0.1.0 │ │ ├── lodash@1.2.1 │ │ └── mute-stream@0.0.3 │ ├─┬ request@2.27.0 │ │ ├── aws-sign@0.3.0 │ │ ├── cookie-jar@0.3.0 │ │ ├── forever-agent@0.5.2 │ │ ├─┬ form-data@0.1.4 │ │ │ ├── async@0.9.2 │ │ │ └─┬ combined-stream@0.0.7 │ │ │ └── delayed-stream@0.0.5 │ │ ├─┬ hawk@1.0.0 │ │ │ ├── boom@0.4.2 │ │ │ ├── cryptiles@0.2.2 │ │ │ ├── hoek@0.9.1 │ │ │ └── sntp@0.2.4 │ │ ├─┬ http-signature@0.10.1 │ │ │ ├── asn1@0.1.11 │ │ │ ├── assert-plus@0.1.5 │ │ │ └── ctype@0.5.3 │ │ ├── json-stringify-safe@5.0.1 │ │ ├── mime@1.2.11 │ │ ├── node-uuid@1.4.7 │ │ ├── oauth-sign@0.3.0 │ │ ├── qs@0.6.6 │ │ └── tunnel-agent@0.3.0 │ ├── underscore@1.5.2 │ └── underscore.string@2.3.3 ├─┬ grunt-postcss@0.7.1 │ ├── diff@2.2.1 │ └── es6-promise@3.0.2 ├─┬ grunt-rtlcss@1.6.0 │ └─┬ rtlcss@1.7.2 │ ├─┬ findup@0.1.5 │ │ └── commander@2.1.0 │ ├─┬ mkdirp@0.5.0 │ │ └── minimist@0.0.8 │ └── strip-json-comments@1.0.4 ├─┬ grunt-sass@1.1.0 │ ├─┬ each-async@1.1.1 │ │ ├── onetime@1.1.0 │ │ └── set-immediate-shim@1.0.1 │ ├─┬ node-sass@3.4.2 │ │ ├── async-foreach@0.1.3 │ │ ├─┬ cross-spawn@2.1.4 │ │ │ ├─┬ cross-spawn-async@2.1.6 │ │ │ │ ├─┬ lru-cache@4.0.0 │ │ │ │ │ ├── pseudomap@1.0.2 │ │ │ │ │ └── yallist@2.0.0 │ │ │ │ └─┬ which@1.2.1 │ │ │ │ └─┬ is-absolute@0.1.7 │ │ │ │ └── is-relative@0.1.3 │ │ │ └─┬ spawn-sync@1.0.15 │ │ │ └── os-shim@0.1.3 │ │ ├─┬ glob@5.0.15 │ │ │ └── minimatch@3.0.0 │ │ ├─┬ mkdirp@0.5.1 │ │ │ └── minimist@0.0.8 │ │ ├── nan@2.1.0 │ │ ├─┬ node-gyp@3.2.1 │ │ │ ├─┬ fstream@1.0.8 │ │ │ │ └── graceful-fs@4.1.2 │ │ │ ├── graceful-fs@4.1.2 │ │ │ ├── minimatch@1.0.0 │ │ │ ├── nopt@3.0.6 │ │ │ ├─┬ npmlog@1.2.1 │ │ │ │ ├── ansi@0.3.0 │ │ │ │ ├─┬ are-we-there-yet@1.0.5 │ │ │ │ │ └── delegates@0.1.0 │ │ │ │ └─┬ gauge@1.2.2 │ │ │ │ ├── has-unicode@1.0.1 │ │ │ │ ├─┬ lodash.pad@3.1.1 │ │ │ │ │ ├── lodash._basetostring@3.0.1 │ │ │ │ │ └─┬ lodash._createpadding@3.6.1 │ │ │ │ │ └── lodash.repeat@3.0.1 │ │ │ │ ├── lodash.padleft@3.1.1 │ │ │ │ └── lodash.padright@3.1.1 │ │ │ ├─┬ osenv@0.1.3 │ │ │ │ ├── os-homedir@1.0.1 │ │ │ │ └── os-tmpdir@1.0.1 │ │ │ ├─┬ path-array@1.0.0 │ │ │ │ └── array-index@0.1.1 │ │ │ ├── semver@5.1.0 │ │ │ └─┬ tar@2.2.1 │ │ │ └── block-stream@0.0.8 │ │ ├─┬ npmconf@2.1.2 │ │ │ ├─┬ config-chain@1.1.9 │ │ │ │ └── proto-list@1.2.4 │ │ │ ├── ini@1.3.4 │ │ │ ├── nopt@3.0.6 │ │ │ ├── semver@4.3.6 │ │ │ └── uid-number@0.0.5 │ │ ├─┬ request@2.67.0 │ │ │ ├── aws-sign2@0.6.0 │ │ │ ├── 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-rc3 │ │ │ │ └── async@1.5.1 │ │ │ ├─┬ har-validator@2.0.3 │ │ │ │ ├── commander@2.9.0 │ │ │ │ ├─┬ is-my-json-valid@2.12.3 │ │ │ │ │ ├── generate-function@2.0.0 │ │ │ │ │ ├─┬ generate-object-property@1.2.0 │ │ │ │ │ │ └── is-property@1.0.2 │ │ │ │ │ └── jsonpointer@2.0.0 │ │ │ │ └─┬ pinkie-promise@2.0.0 │ │ │ │ └── pinkie@2.0.1 │ │ │ ├─┬ hawk@3.1.2 │ │ │ │ ├── boom@2.10.1 │ │ │ │ ├── cryptiles@2.0.5 │ │ │ │ ├── hoek@2.16.3 │ │ │ │ └── sntp@1.0.9 │ │ │ ├─┬ http-signature@1.1.0 │ │ │ │ ├─┬ jsprim@1.2.2 │ │ │ │ │ ├── extsprintf@1.0.2 │ │ │ │ │ ├── json-schema@0.2.2 │ │ │ │ │ └── verror@1.3.6 │ │ │ │ └─┬ sshpk@1.7.2 │ │ │ │ ├── asn1@0.2.3 │ │ │ │ ├── assert-plus@0.2.0 │ │ │ │ ├── dashdash@1.11.0 │ │ │ │ ├── ecc-jsbn@0.1.1 │ │ │ │ ├── jodid25519@1.0.2 │ │ │ │ ├── jsbn@0.1.0 │ │ │ │ └── tweetnacl@0.13.3 │ │ │ ├── is-typedarray@1.0.0 │ │ │ ├── isstream@0.1.2 │ │ │ ├─┬ mime-types@2.1.9 │ │ │ │ └── mime-db@1.21.0 │ │ │ ├── oauth-sign@0.8.0 │ │ │ ├── qs@5.2.0 │ │ │ ├── stringstream@0.0.5 │ │ │ ├── tough-cookie@2.2.1 │ │ │ └── tunnel-agent@0.4.2 │ │ └─┬ sass-graph@2.0.1 │ │ ├─┬ glob@5.0.15 │ │ │ └── minimatch@3.0.0 │ │ ├── lodash@3.10.1 │ │ └─┬ yargs@3.31.0 │ │ ├─┬ cliui@3.1.0 │ │ │ └── wrap-ansi@1.0.0 │ │ ├─┬ os-locale@1.4.0 │ │ │ └─┬ lcid@1.0.0 │ │ │ └── invert-kv@1.0.0 │ │ ├─┬ string-width@1.0.1 │ │ │ ├── code-point-at@1.0.0 │ │ │ └── is-fullwidth-code-point@1.0.0 │ │ ├── window-size@0.1.4 │ │ └── y18n@3.2.0 │ └── object-assign@4.0.1 └─┬ matchdep@1.0.0 ├─┬ findup-sync@0.3.0 │ └─┬ glob@5.0.15 │ └── minimatch@3.0.0 ├─┬ globule@0.2.0 │ ├─┬ glob@3.2.11 │ │ └── minimatch@0.3.0 │ ├── lodash@2.4.2 │ └── minimatch@0.2.14 └── stack-trace@0.0.9
And this is just for WordPress core; it doesn’t include the tools we use for BuddyPress or bbPress.
I don’t like this. I don’t like not knowing what these tools do or why they’re necessary. It feels like having one-thousand hammers instead of drill-bits and screwdrivers and power-tools. It’s not immediately obvious what the return on learning each or any of these unique tools is.
And when a tool becomes obsolete or out-of-date, the rabbit hole is full of eels:
npm WARN deprecated lodash@0.9.2: lodash@<2.0.0 is no longer maintained. Upgrade to lodash@^3.0.0 npm WARN deprecated npmconf@2.1.1: this package has been reintegrated into npm and is now out of date with respect to npm npm WARN deprecated lodash@1.0.2: lodash@<2.0.0 is no longer maintained. Upgrade to lodash@^3.0.0 npm WARN deprecated lodash@1.2.1: lodash@<2.0.0 is no longer maintained. Upgrade to lodash@^3.0.0 npm WARN deprecated npmconf@2.1.2: this package has been reintegrated into npm and is now out of date with respect to npm npm WARN deprecated lodash@2.4.2: lodash@<3.0.0 is no longer maintained. Upgrade to lodash@^3.0.0. n
These relatively helpful messages may be outside of your control. They might be directly your fault. They might be globally installed modules or locally installed ones. Upgrading might be good for WordPress but break everything else you work on without warning.
Here’s usually what happens:
- Something in the mystery toolbox breaks and complains about it
- Try to upgrade the broken tool according to the feedback message(s)
- The tool is still broken
- Delete the entire `node_modules` directory and `npm install` again
- Fixed!
Now, I understand what’s going on here is a miracle of modern software engineering. An enormous amount of automation is going on here, and the fact it actually works most of the time I’ll consider another closely coupled miracle. It still feels like there must be a better way, even though I can’t claim the fame of knowing right now what that might actually be.
I get that this is all awesome. I get that this process, and having & using these tools, is better than smashing things with rocks and hoping for the best. I get that a ton of work has gone into making this as seamless and wrinkle-free as possible.
I accept it, and work with it, and try not to think about it, but the trend of installing and trusting hundreds of tiny unknown libraries feels a little too organic and alive for a man-made computing machine. Like millions of nerve-endings and neurons and vessels and muscles working in unison to blink your eyes and sip on some coffee, the line between being a software developer or a software doctor is an increasingly jagged one.
If we aren’t careful, we’ll end up as lost amongst our own creations as we are inside of mother nature’s.