Skip to content
This repository has been archived by the owner on Dec 29, 2022. It is now read-only.

audit npm dependencies #337

Closed
samccone opened this issue Aug 27, 2015 · 36 comments
Closed

audit npm dependencies #337

samccone opened this issue Aug 27, 2015 · 36 comments
Assignees
Labels
Milestone

Comments

@samccone
Copy link
Contributor

npm i currently installs 1175 dependencies for this project, some of which require native compilation. The install time on my system takes around 8 minutes. I wonder if there is a way we can trim this install down quite a bit.

Root tree

from 30 comes many

├── browser-sync@2.8.2
├── connect-history-api-fallback@1.1.0
├── del@1.2.1
├── glob@5.0.14
├── gulp@3.9.0
├── gulp-autoprefixer@2.3.1
├── gulp-cache@0.2.10
├── gulp-changed@1.3.0
├── gulp-cssmin@0.1.7
├── gulp-flatten@0.0.4
├── gulp-if@1.2.5
├── gulp-imagemin@2.3.0
├── gulp-jshint@1.11.2
├── gulp-load-plugins@0.10.0
├── gulp-minify-html@1.0.4
├── gulp-rename@1.2.2
├── gulp-replace@0.5.4
├── gulp-size@1.3.0
├── gulp-uglify@1.3.0
├── gulp-useref@1.3.0
├── gulp-vulcanize@6.0.1
├── jshint-stylish@2.0.1
├── merge-stream@0.1.8
├── opn@1.0.2
├── polybuild@1.0.5
├── require-dir@0.3.0
├── run-sequence@1.1.2
├── vulcanize@1.10.3
└── web-component-tester@3.3.15

Full tree

├─┬ browser-sync@2.8.2
│ ├─┬ anymatch@1.3.0
│ │ ├── arrify@1.0.0
│ │ └─┬ micromatch@2.2.0
│ │   ├─┬ arr-diff@1.1.0
│ │   │ ├── arr-flatten@1.0.1
│ │   │ └── array-slice@0.2.3
│ │   ├── array-unique@0.2.1
│ │   ├─┬ braces@1.8.1
│ │   │ ├─┬ expand-range@1.8.1
│ │   │ │ └─┬ fill-range@2.2.2
│ │   │ │   ├── is-number@1.1.2
│ │   │ │   └── randomatic@1.1.0
│ │   │ ├── lazy-cache@0.2.3
│ │   │ ├── preserve@0.2.0
│ │   │ └── repeat-element@1.1.2
│ │   ├── expand-brackets@0.1.4
│ │   ├─┬ extglob@0.3.1
│ │   │ ├── ansi-green@0.1.1
│ │   │ ├── is-extglob@1.0.0
│ │   │ └── success-symbol@0.1.0
│ │   ├── filename-regex@2.0.0
│ │   ├── kind-of@1.1.0
│ │   ├─┬ parse-glob@3.0.2
│ │   │ ├── glob-base@0.2.0
│ │   │ └── is-dotfile@1.0.1
│ │   └─┬ regex-cache@0.4.2
│ │     ├── is-equal-shallow@0.1.3
│ │     └── is-primitive@2.0.0
│ ├── async-each-series@0.1.1
│ ├─┬ browser-sync-client@2.2.1
│ │ ├── etag@1.7.0
│ │ └── fresh@0.3.0
│ ├─┬ browser-sync-ui@0.5.15
│ │ ├── connect-history-api-fallback@0.0.5
│ │ ├─┬ stream-throttle@0.1.3
│ │ │ └── limiter@1.0.5
│ │ └─┬ weinre@2.0.0-pre-I0Z7U9OV
│ │   ├─┬ express@2.5.11
│ │   │ ├─┬ connect@1.9.2
│ │   │ │ └── formidable@1.0.17
│ │   │ ├── mime@1.2.4
│ │   │ ├── mkdirp@0.3.0
│ │   │ └── qs@0.4.2
│ │   └── underscore@1.7.0
│ ├─┬ chokidar@1.0.5
│ │ ├── async-each@0.1.6
│ │ ├─┬ fsevents@0.3.8
│ │ │ └── nan@2.0.7
│ │ ├── glob-parent@1.2.0
│ │ ├─┬ is-binary-path@1.0.1
│ │ │ └── binary-extensions@1.3.1
│ │ ├── is-glob@1.1.3
│ │ └─┬ readdirp@1.4.0
│ │   └── minimatch@0.2.14
│ ├─┬ connect@3.4.0
│ │ ├─┬ debug@2.2.0
│ │ │ └── ms@0.7.1
│ │ ├─┬ finalhandler@0.4.0
│ │ │ └── unpipe@1.0.0
│ │ ├── parseurl@1.3.0
│ │ └── utils-merge@1.0.0
│ ├── dev-ip@1.0.1
│ ├─┬ easy-extender@2.3.1
│ │ └── lodash@2.4.2
│ ├─┬ eazy-logger@2.1.2
│ │ ├─┬ opt-merger@1.1.0
│ │ │ └── lodash@2.4.2
│ │ └─┬ tfunk@3.0.1
│ │   └── object-path@0.9.2
│ ├── emitter-steward@0.0.1
│ ├─┬ foxy@11.1.3
│ │ ├── cookie@0.1.3
│ │ ├─┬ http-proxy@1.11.1
│ │ │ ├── eventemitter3@1.1.1
│ │ │ └── requires-port@0.0.1
│ │ └─┬ lodash.merge@3.3.2
│ │   ├── lodash._arraycopy@3.0.0
│ │   ├── lodash._arrayeach@3.0.0
│ │   ├─┬ lodash._createassigner@3.1.1
│ │   │ └── lodash._bindcallback@3.0.1
│ │   ├── lodash._getnative@3.9.1
│ │   ├── lodash.isarguments@3.0.4
│ │   ├── lodash.isarray@3.0.4
│ │   ├─┬ lodash.isplainobject@3.2.0
│ │   │ └── lodash._basefor@3.0.2
│ │   ├── lodash.istypedarray@3.0.2
│ │   ├── lodash.keys@3.1.2
│ │   ├── lodash.keysin@3.0.8
│ │   └── lodash.toplainobject@3.0.0
│ ├── immutable@3.7.4
│ ├─┬ localtunnel@1.7.0
│ │ ├── debug@0.7.4
│ │ ├── openurl@1.1.0
│ │ ├─┬ request@2.11.4
│ │ │ ├─┬ form-data@0.0.3
│ │ │ │ ├── async@0.1.9
│ │ │ │ └─┬ combined-stream@0.0.3
│ │ │ │   └── delayed-stream@0.0.5
│ │ │ └── mime@1.2.7
│ │ └─┬ yargs@3.15.0
│ │   ├── camelcase@1.2.1
│ │   ├─┬ cliui@2.1.0
│ │   │ ├─┬ center-align@0.1.1
│ │   │ │ └─┬ align-text@0.1.3
│ │   │ │   └─┬ kind-of@2.0.1
│ │   │ │     └── is-buffer@1.0.2
│ │   │ └── right-align@0.1.3
│ │   ├── decamelize@1.0.0
│ │   └── window-size@0.1.2
│ ├── lodash@3.10.1
│ ├── longest@1.0.1
│ ├─┬ meow@3.3.0
│ │ ├─┬ camelcase-keys@1.0.0
│ │ │ └── map-obj@1.0.1
│ │ └── indent-string@1.2.2
│ ├── opn@2.0.1
│ ├─┬ pad-left@1.0.2
│ │ └── repeat-string@1.5.2
│ ├─┬ portscanner@1.0.0
│ │ └── async@0.1.15
│ ├─┬ query-string@2.4.0
│ │ └── strict-uri-encode@1.0.2
│ ├─┬ resp-modifier@4.0.4
│ │ └── minimatch@2.0.10
│ ├─┬ serve-index@1.7.2
│ │ ├─┬ accepts@1.2.12
│ │ │ └── negotiator@0.5.3
│ │ ├── batch@0.5.2
│ │ ├── escape-html@1.0.2
│ │ ├─┬ http-errors@1.3.1
│ │ │ └── statuses@1.2.1
│ │ └─┬ mime-types@2.1.5
│ │   └── mime-db@1.17.0
│ ├─┬ serve-static@1.10.0
│ │ └─┬ send@0.13.0
│ │   └── mime@1.3.4
│ ├─┬ socket.io@1.3.6
│ │ ├─┬ debug@2.1.0
│ │ │ └── ms@0.6.2
│ │ ├─┬ engine.io@1.5.2
│ │ │ ├── base64id@0.1.0
│ │ │ ├─┬ debug@1.0.3
│ │ │ │ └── ms@0.6.2
│ │ │ ├─┬ engine.io-parser@1.2.1
│ │ │ │ ├── after@0.8.1
│ │ │ │ ├── arraybuffer.slice@0.0.6
│ │ │ │ ├── base64-arraybuffer@0.1.2
│ │ │ │ ├── blob@0.0.2
│ │ │ │ ├── has-binary@0.1.5
│ │ │ │ └── utf8@2.0.0
│ │ │ └─┬ ws@0.7.2
│ │ │   ├─┬ bufferutil@1.1.0
│ │ │   │ ├── bindings@1.2.1
│ │ │   │ └── nan@1.8.4
│ │ │   ├── options@0.0.6
│ │ │   ├── ultron@1.0.2
│ │ │   └─┬ utf-8-validate@1.1.0
│ │ │     └── nan@1.8.4
│ │ ├── has-binary-data@0.1.3
│ │ ├─┬ socket.io-adapter@0.3.1
│ │ │ ├─┬ debug@1.0.2
│ │ │ │ └── ms@0.6.2
│ │ │ ├── object-keys@1.0.1
│ │ │ └─┬ socket.io-parser@2.2.2
│ │ │   └── debug@0.7.4
│ │ ├─┬ socket.io-client@1.3.6
│ │ │ ├── backo2@1.0.2
│ │ │ ├── component-bind@1.0.0
│ │ │ ├── component-emitter@1.1.2
│ │ │ ├── debug@0.7.4
│ │ │ ├─┬ engine.io-client@1.5.2
│ │ │ │ ├── component-inherit@0.0.3
│ │ │ │ ├─┬ debug@1.0.4
│ │ │ │ │ └── ms@0.6.2
│ │ │ │ ├─┬ has-cors@1.0.3
│ │ │ │ │ └── global@2.0.1
│ │ │ │ ├── parsejson@0.0.1
│ │ │ │ ├── parseqs@0.0.2
│ │ │ │ ├── parseuri@0.0.4
│ │ │ │ └── xmlhttprequest@1.5.0
│ │ │ ├── has-binary@0.1.6
│ │ │ ├── indexof@0.0.1
│ │ │ ├── object-component@0.0.3
│ │ │ ├─┬ parseuri@0.0.2
│ │ │ │ └─┬ better-assert@1.0.2
│ │ │ │   └── callsite@1.0.0
│ │ │ └── to-array@0.1.3
│ │ └─┬ socket.io-parser@2.2.4
│ │   ├── benchmark@1.0.0
│ │   ├── debug@0.7.4
│ │   └── json3@3.2.6
│ ├── ua-parser-js@0.7.9
│ └── ucfirst@0.0.1
├── connect-history-api-fallback@1.1.0
├─┬ del@1.2.1
│ ├─┬ each-async@1.1.1
│ │ ├── onetime@1.0.0
│ │ └── set-immediate-shim@1.0.1
│ ├─┬ globby@2.1.0
│ │ ├── array-union@1.0.1
│ │ └── async@1.4.2
│ ├── is-path-cwd@1.0.0
│ ├─┬ is-path-in-cwd@1.0.0
│ │ └─┬ is-path-inside@1.0.0
│ │   └── path-is-inside@1.0.1
│ ├── object-assign@3.0.0
│ └── rimraf@2.4.3
├─┬ glob@5.0.14
│ ├─┬ inflight@1.0.4
│ │ └── wrappy@1.0.1
│ ├── inherits@2.0.1
│ ├── minimatch@2.0.10
│ ├── once@1.3.2
│ └── path-is-absolute@1.0.0
├─┬ gulp@3.9.0
│ ├── archy@1.0.0
│ ├─┬ chalk@1.1.1
│ │ ├── ansi-styles@2.1.0
│ │ ├── escape-string-regexp@1.0.3
│ │ ├─┬ has-ansi@2.0.0
│ │ │ └── ansi-regex@2.0.0
│ │ ├── strip-ansi@3.0.0
│ │ └── supports-color@2.0.0
│ ├── deprecated@0.0.1
│ ├─┬ gulp-util@3.0.6
│ │ ├── array-differ@1.0.0
│ │ ├── array-uniq@1.0.2
│ │ ├── beeper@1.1.0
│ │ ├─┬ 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
│ │ ├── dateformat@1.0.11
│ │ ├── 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._basetostring@3.0.1
│ │ │ ├── lodash._basevalues@3.0.0
│ │ │ ├── lodash._isiterateecall@3.0.9
│ │ │ ├── lodash.escape@3.0.0
│ │ │ ├── lodash.restparam@3.6.1
│ │ │ └── lodash.templatesettings@3.1.0
│ │ ├── multipipe@0.1.2
│ │ └── replace-ext@0.0.1
│ ├── interpret@0.6.5
│ ├─┬ liftoff@2.1.0
│ │ ├── extend@2.0.1
│ │ ├── flagged-respawn@0.3.1
│ │ └── rechoir@0.6.2
│ ├── minimist@1.2.0
│ ├─┬ orchestrator@0.3.7
│ │ ├── end-of-stream@0.1.5
│ │ ├── sequencify@0.0.7
│ │ └── stream-consume@0.1.0
│ ├── pretty-hrtime@1.0.0
│ ├── semver@4.3.6
│ ├─┬ tildify@1.1.0
│ │ └── os-homedir@1.0.1
│ ├─┬ v8flags@2.0.10
│ │ └── user-home@1.1.1
│ └─┬ vinyl-fs@0.3.13
│   ├─┬ defaults@1.0.2
│   │ └── clone@0.1.19
│   ├─┬ glob-stream@3.1.18
│   │ ├── glob@4.5.3
│   │ ├─┬ glob2base@0.0.12
│   │ │ └── find-index@0.1.1
│   │ ├── minimatch@2.0.10
│   │ ├── ordered-read-streams@0.1.0
│   │ ├── through2@0.6.5
│   │ └── unique-stream@1.0.0
│   ├─┬ glob-watcher@0.0.6
│   │ └─┬ gaze@0.5.1
│   │   └─┬ globule@0.1.0
│   │     ├─┬ glob@3.1.21
│   │     │ ├── graceful-fs@1.2.3
│   │     │ └── inherits@1.0.2
│   │     └── lodash@1.0.2
│   ├── graceful-fs@3.0.8
│   ├─┬ mkdirp@0.5.1
│   │ └── minimist@0.0.8
│   ├─┬ strip-bom@1.0.0
│   │ ├── first-chunk-stream@1.0.0
│   │ └── is-utf8@0.2.0
│   ├── through2@0.6.5
│   └─┬ vinyl@0.4.6
│     └── clone@0.2.0
├─┬ gulp-autoprefixer@2.3.1
│ ├─┬ autoprefixer-core@5.2.1
│ │ ├── browserslist@0.4.0
│ │ ├── caniuse-db@1.0.30000279
│ │ └── num2fraction@1.1.0
│ ├── object-assign@2.1.1
│ ├─┬ postcss@4.1.16
│ │ ├── js-base64@2.1.9
│ │ └─┬ source-map@0.4.4
│ │   └── amdefine@1.0.0
│ ├─┬ through2@0.6.5
│ │ ├── readable-stream@1.0.33
│ │ └── xtend@4.0.0
│ └─┬ vinyl-sourcemaps-apply@0.1.4
│   └── source-map@0.1.43
├─┬ gulp-cache@0.2.10
│ ├── bluebird@2.9.34
│ ├─┬ cache-swap@0.2.2
│ │ ├── graceful-fs@4.1.2
│ │ └─┬ mkdirp@0.5.1
│ │   └── minimist@0.0.8
│ ├─┬ object.omit@1.1.0
│ │ ├─┬ for-own@0.1.3
│ │ │ └── for-in@0.1.4
│ │ └── isobject@1.0.2
│ ├── object.pick@1.1.1
│ ├── through2@0.6.5
│ ├── try-json-parse@0.1.1
│ └─┬ vinyl@0.5.1
│   ├── clone@1.0.2
│   └── clone-stats@0.0.1
├─┬ gulp-changed@1.3.0
│ └─┬ through2@2.0.0
│   └── readable-stream@2.0.2
├─┬ gulp-cssmin@0.1.7
│ ├─┬ clean-css@3.4.1
│ │ └─┬ commander@2.8.1
│ │   └── graceful-readlink@1.0.1
│ ├── filesize@2.0.4
│ ├── graceful-fs@2.0.3
│ ├── gulp-rename@1.1.0
│ ├─┬ gulp-util@2.2.20
│ │ ├── lodash._reinterpolate@2.4.1
│ │ ├─┬ lodash.template@2.4.1
│ │ │ ├── lodash._escapestringchar@2.4.1
│ │ │ ├─┬ lodash.defaults@2.4.1
│ │ │ │ ├── lodash._objecttypes@2.4.1
│ │ │ │ └── lodash.keys@2.4.1
│ │ │ ├─┬ lodash.escape@2.4.1
│ │ │ │ ├─┬ lodash._escapehtmlchar@2.4.1
│ │ │ │ │ └── lodash._htmlescapes@2.4.1
│ │ │ │ └─┬ lodash._reunescapedhtml@2.4.1
│ │ │ │   └── lodash.keys@2.4.1
│ │ │ ├─┬ lodash.keys@2.4.1
│ │ │ │ ├── lodash._isnative@2.4.1
│ │ │ │ ├── lodash._shimkeys@2.4.1
│ │ │ │ └── lodash.isobject@2.4.1
│ │ │ ├── lodash.templatesettings@2.4.1
│ │ │ └─┬ lodash.values@2.4.1
│ │ │   └── lodash.keys@2.4.1
│ │ ├── minimist@0.2.0
│ │ ├─┬ through2@0.5.1
│ │ │ └── xtend@3.0.0
│ │ └── vinyl@0.2.3
│ ├── map-stream@0.0.4
│ └─┬ temp-write@0.1.1
│   ├── graceful-fs@2.0.3
│   └─┬ tempfile@0.1.3
│     └── uuid@1.4.2
├─┬ gulp-flatten@0.0.4
│ └── through2@0.6.5
├─┬ gulp-if@1.2.5
│ ├─┬ gulp-match@0.2.1
│ │ └─┬ minimatch@1.0.0
│ │   └── sigmund@1.0.1
│ ├─┬ ternary-stream@1.2.3
│ │ ├─┬ duplexer2@0.0.2
│ │ │ └── readable-stream@1.1.13
│ │ ├── fork-stream@0.0.4
│ │ └── through2@0.6.5
│ └── through2@0.6.5
├─┬ gulp-imagemin@2.3.0
│ ├─┬ 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
│ ├─┬ imagemin@3.2.0
│ │ ├─┬ buffer-to-vinyl@1.0.1
│ │ │ ├─┬ file-type@2.10.2
│ │ │ │ └── read-chunk@1.0.1
│ │ │ ├── readable-stream@2.0.2
│ │ │ └── uuid@2.0.1
│ │ ├─┬ concat-stream@1.5.0
│ │ │ ├── readable-stream@2.0.2
│ │ │ └── typedarray@0.0.6
│ │ ├── get-stdin@4.0.1
│ │ ├─┬ imagemin-gifsicle@4.2.0
│ │ │ ├─┬ gifsicle@3.0.1
│ │ │ │ ├─┬ bin-build@2.1.2
│ │ │ │ │ ├── archive-type@2.1.0
│ │ │ │ │ ├─┬ decompress@2.3.0
│ │ │ │ │ │ ├─┬ decompress-tar@3.1.0
│ │ │ │ │ │ │ ├── is-tar@1.0.0
│ │ │ │ │ │ │ ├── object-assign@2.1.1
│ │ │ │ │ │ │ ├─┬ strip-dirs@1.1.1
│ │ │ │ │ │ │ │ ├─┬ 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
│ │ │ │ │ │ │ │ ├── is-natural-number@2.0.0
│ │ │ │ │ │ │ │ └─┬ sum-up@1.0.2
│ │ │ │ │ │ │ │   └─┬ 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
│ │ │ │ │ │ │ ├── through2@0.6.5
│ │ │ │ │ │ │ └─┬ 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
│ │ │ │ │ │ │ └─┬ 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
│ │ │ │ │ │ │ └─┬ vinyl@0.4.6
│ │ │ │ │ │ │   └── clone@0.2.0
│ │ │ │ │ │ ├─┬ decompress-unzip@3.3.0
│ │ │ │ │ │ │ ├── is-zip@1.0.0
│ │ │ │ │ │ │ ├── stat-mode@0.2.1
│ │ │ │ │ │ │ └─┬ yauzl@2.3.1
│ │ │ │ │ │ │   ├── fd-slicer@1.0.1
│ │ │ │ │ │ │   └── pend@1.2.0
│ │ │ │ │ │ ├─┬ vinyl-assign@1.2.0
│ │ │ │ │ │ │ └── readable-stream@2.0.2
│ │ │ │ │ │ └─┬ vinyl-fs@1.0.0
│ │ │ │ │ │   ├─┬ glob-stream@4.1.1
│ │ │ │ │ │   │ ├── glob@4.5.3
│ │ │ │ │ │   │ ├── minimatch@2.0.10
│ │ │ │ │ │   │ └── unique-stream@2.2.0
│ │ │ │ │ │   ├── glob-watcher@0.0.8
│ │ │ │ │ │   ├── graceful-fs@3.0.8
│ │ │ │ │ │   ├─┬ mkdirp@0.5.1
│ │ │ │ │ │   │ └── minimist@0.0.8
│ │ │ │ │ │   ├── object-assign@2.1.1
│ │ │ │ │ │   ├── through2@0.6.5
│ │ │ │ │ │   └─┬ vinyl@0.4.6
│ │ │ │ │ │     └── clone@0.2.0
│ │ │ │ │ ├─┬ download@4.2.0
│ │ │ │ │ │ ├─┬ caw@1.1.0
│ │ │ │ │ │ │ ├─┬ get-proxy@1.0.1
│ │ │ │ │ │ │ │ └─┬ rc@0.5.5
│ │ │ │ │ │ │ │   └── minimist@0.0.10
│ │ │ │ │ │ │ └── is-obj@1.0.0
│ │ │ │ │ │ ├─┬ filenamify@1.2.0
│ │ │ │ │ │ │ ├── filename-reserved-regex@1.0.0
│ │ │ │ │ │ │ ├── strip-outer@1.0.0
│ │ │ │ │ │ │ └── trim-repeated@1.0.0
│ │ │ │ │ │ ├─┬ got@2.9.2
│ │ │ │ │ │ │ ├── object-assign@2.1.1
│ │ │ │ │ │ │ └─┬ read-all-stream@2.2.0
│ │ │ │ │ │ │   └── readable-stream@2.0.2
│ │ │ │ │ │ ├─┬ gulp-decompress@1.1.0
│ │ │ │ │ │ │ └── archive-type@3.0.1
│ │ │ │ │ │ ├── is-url@1.2.1
│ │ │ │ │ │ ├── object-assign@2.1.1
│ │ │ │ │ │ ├─┬ vinyl@0.4.6
│ │ │ │ │ │ │ └── clone@0.2.0
│ │ │ │ │ │ ├─┬ vinyl-fs@1.0.0
│ │ │ │ │ │ │ ├─┬ glob-stream@4.1.1
│ │ │ │ │ │ │ │ ├── glob@4.5.3
│ │ │ │ │ │ │ │ ├── minimatch@2.0.10
│ │ │ │ │ │ │ │ ├── through2@0.6.5
│ │ │ │ │ │ │ │ └── unique-stream@2.2.0
│ │ │ │ │ │ │ ├── glob-watcher@0.0.8
│ │ │ │ │ │ │ ├── graceful-fs@3.0.8
│ │ │ │ │ │ │ ├─┬ mkdirp@0.5.1
│ │ │ │ │ │ │ │ └── minimist@0.0.8
│ │ │ │ │ │ │ └── through2@0.6.5
│ │ │ │ │ │ └─┬ ware@1.3.0
│ │ │ │ │ │   └─┬ wrap-fn@0.1.4
│ │ │ │ │ │     └── co@3.1.0
│ │ │ │ │ ├─┬ exec-series@1.0.2
│ │ │ │ │ │ └── async-each-series@1.0.0
│ │ │ │ │ ├─┬ tempfile@1.1.1
│ │ │ │ │ │ └── uuid@2.0.1
│ │ │ │ │ └─┬ url-regex@2.1.3
│ │ │ │ │   └── 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.1.3
│ │ │ │ │ │ │   └── semver-regex@1.0.0
│ │ │ │ │ │ └── semver-truncate@1.0.0
│ │ │ │ │ ├── lazy-req@1.1.0
│ │ │ │ │ └── os-filter-obj@1.0.3
│ │ │ │ └─┬ logalot@2.1.0
│ │ │ │   └─┬ squeak@1.2.0
│ │ │ │     └─┬ lpad-align@1.1.0
│ │ │ │       └── lpad@2.0.1
│ │ │ ├── is-gif@1.0.0
│ │ │ └── through2@0.6.5
│ │ ├─┬ imagemin-jpegtran@4.3.0
│ │ │ ├── is-jpg@1.0.0
│ │ │ └── jpegtran-bin@3.0.4
│ │ ├─┬ imagemin-optipng@4.3.0
│ │ │ ├─┬ exec-buffer@2.0.1
│ │ │ │ └─┬ tempfile@1.1.1
│ │ │ │   └── uuid@2.0.1
│ │ │ ├── is-png@1.0.0
│ │ │ ├── optipng-bin@3.0.2
│ │ │ └── through2@0.6.5
│ │ ├─┬ imagemin-svgo@4.1.2
│ │ │ ├── is-svg@1.1.1
│ │ │ ├─┬ svgo@0.5.6
│ │ │ │ ├── coa@1.0.1
│ │ │ │ ├── colors@1.1.2
│ │ │ │ ├─┬ mkdirp@0.5.1
│ │ │ │ │ └── minimist@0.0.8
│ │ │ │ ├── sax@1.1.2
│ │ │ │ └── whet.extend@0.9.9
│ │ │ └── through2@0.6.5
│ │ ├── optional@0.1.3
│ │ ├── path-exists@1.0.0
│ │ ├─┬ stream-combiner2@1.0.2
│ │ │ └─┬ through2@0.5.1
│ │ │   └── xtend@3.0.0
│ │ ├── through2@0.6.5
│ │ └─┬ vinyl-fs@1.0.0
│ │   ├─┬ glob-stream@4.1.1
│ │   │ ├── glob@4.5.3
│ │   │ ├── minimatch@2.0.10
│ │   │ └── unique-stream@2.2.0
│ │   ├── glob-watcher@0.0.8
│ │   ├── graceful-fs@3.0.8
│ │   ├─┬ mkdirp@0.5.1
│ │   │ └── minimist@0.0.8
│ │   ├── object-assign@2.1.1
│ │   └─┬ vinyl@0.4.6
│ │     └── clone@0.2.0
│ ├── plur@1.0.0
│ ├─┬ pretty-bytes@2.0.1
│ │ └── number-is-nan@1.0.0
│ └── through2-concurrent@1.1.0
├─┬ gulp-jshint@1.11.2
│ ├─┬ jshint@2.8.0
│ │ ├─┬ cli@0.6.6
│ │ │ └─┬ glob@3.2.11
│ │ │   └── minimatch@0.3.0
│ │ ├─┬ console-browserify@1.1.0
│ │ │ └── date-now@0.1.4
│ │ ├── exit@0.1.2
│ │ ├─┬ 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
│ ├── minimatch@2.0.10
│ ├─┬ rcloader@0.1.2
│ │ ├── lodash@2.4.2
│ │ └─┬ rcfinder@0.1.8
│ │   └── lodash@2.4.2
│ └── through2@0.6.5
├─┬ gulp-load-plugins@0.10.0
│ ├─┬ findup-sync@0.2.1
│ │ └─┬ glob@4.3.5
│ │   └── minimatch@2.0.10
│ └─┬ multimatch@2.0.0
│   └── minimatch@2.0.10
├─┬ gulp-minify-html@1.0.4
│ ├─┬ minimize@1.7.0
│ │ ├── argh@0.1.4
│ │ ├── async@1.4.2
│ │ ├─┬ cli-color@1.0.0
│ │ │ ├── ansi-regex@1.1.1
│ │ │ ├── d@0.1.1
│ │ │ ├─┬ es5-ext@0.10.7
│ │ │ │ └── es6-symbol@2.0.1
│ │ │ ├── es6-iterator@0.1.3
│ │ │ ├─┬ memoizee@0.3.9
│ │ │ │ ├── es6-weak-map@0.1.4
│ │ │ │ ├── event-emitter@0.3.3
│ │ │ │ ├── lru-queue@0.1.0
│ │ │ │ └── next-tick@0.2.2
│ │ │ └── timers-ext@0.1.0
│ │ ├─┬ diagnostics@1.0.1
│ │ │ ├─┬ colorspace@1.0.1
│ │ │ │ ├─┬ color@0.8.0
│ │ │ │ │ ├── color-convert@0.5.3
│ │ │ │ │ └─┬ color-string@0.3.0
│ │ │ │ │   └── color-name@1.0.0
│ │ │ │ └── text-hex@0.0.0
│ │ │ ├─┬ enabled@1.0.1
│ │ │ │ └── env-variable@0.0.3
│ │ │ └─┬ kuler@0.0.0
│ │ │   └── colornames@0.0.2
│ │ └── emits@3.0.0
│ └── through2@0.6.5
├── gulp-rename@1.2.2
├─┬ gulp-replace@0.5.4
│ ├─┬ istextorbinary@1.0.2
│ │ ├── binaryextensions@1.0.0
│ │ └── textextensions@1.0.1
│ ├─┬ readable-stream@2.0.2
│ │ ├── core-util-is@1.0.1
│ │ ├── isarray@0.0.1
│ │ ├── process-nextick-args@1.0.2
│ │ ├── string_decoder@0.10.31
│ │ └── util-deprecate@1.0.1
│ └─┬ replacestream@4.0.0
│   └── readable-stream@2.0.2
├─┬ gulp-size@1.3.0
│ ├─┬ 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
│ └─┬ gzip-size@1.0.0
│   └─┬ browserify-zlib@0.1.4
│     └── pako@0.2.7
├─┬ gulp-uglify@1.3.0
│ ├── deap@1.0.0
│ └─┬ uglify-js@2.4.24
│   ├── async@0.2.10
│   ├── source-map@0.1.34
│   ├── uglify-to-browserify@1.0.2
│   └─┬ yargs@3.5.4
│     ├── window-size@0.1.0
│     └── wordwrap@0.0.2
├─┬ gulp-useref@1.3.0
│ ├─┬ brace-expansion@1.1.0
│ │ ├── balanced-match@0.2.0
│ │ └── concat-map@0.0.1
│ ├─┬ event-stream@3.3.1
│ │ ├── duplexer@0.1.1
│ │ ├── from@0.1.3
│ │ ├── map-stream@0.1.0
│ │ ├── pause-stream@0.0.11
│ │ ├── split@0.3.3
│ │ ├── stream-combiner@0.0.4
│ │ └── through@2.3.8
│ ├─┬ gulp-concat@2.6.0
│ │ ├── concat-with-sourcemaps@1.0.2
│ │ └── through2@0.6.5
│ ├─┬ is-relative-url@1.0.0
│ │ └── is-absolute-url@1.0.0
│ ├── node-useref@0.3.15
│ ├── through2@0.6.5
│ └─┬ vinyl-fs@1.0.0
│   ├─┬ duplexify@3.4.2
│   │ ├── end-of-stream@1.0.0
│   │ └── readable-stream@2.0.2
│   ├─┬ glob-stream@4.1.1
│   │ ├── glob@4.5.3
│   │ ├── minimatch@2.0.10
│   │ └─┬ unique-stream@2.2.0
│   │   └── through2-filter@2.0.0
│   ├── glob-watcher@0.0.8
│   ├── graceful-fs@3.0.8
│   ├─┬ mkdirp@0.5.1
│   │ └── minimist@0.0.8
│   ├── object-assign@2.1.1
│   └─┬ vinyl@0.4.6
│     └── clone@0.2.0
├─┬ gulp-vulcanize@6.0.1
│ └── through2@0.6.5
├─┬ jshint-stylish@2.0.1
│ ├─┬ 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
│ ├─┬ log-symbols@1.0.2
│ │ └─┬ 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
│ ├─┬ string-length@1.0.1
│ │ └─┬ strip-ansi@3.0.0
│ │   └── ansi-regex@2.0.0
│ └── text-table@0.2.0
├─┬ merge-stream@0.1.8
│ └── through2@0.6.5
├── opn@1.0.2
├─┬ polybuild@1.0.5
│ ├─┬ gulp-crisper@0.0.4
│ │ ├── crisper@1.0.7
│ │ └── through2@0.6.5
│ ├── lazypipe@0.2.4
│ ├─┬ nopt@3.0.3
│ │ └── abbrev@1.0.7
│ ├─┬ polyclean@1.2.0
│ │ ├─┬ escodegen@1.6.1
│ │ │ ├── esprima@1.2.5
│ │ │ ├── estraverse@1.9.3
│ │ │ ├── esutils@1.1.6
│ │ │ ├─┬ optionator@0.5.0
│ │ │ │ ├── deep-is@0.1.3
│ │ │ │ ├── fast-levenshtein@1.0.7
│ │ │ │ ├── levn@0.2.5
│ │ │ │ ├── prelude-ls@1.1.2
│ │ │ │ └── type-check@0.3.1
│ │ │ └── source-map@0.1.43
│ │ ├── espree@2.2.4
│ │ ├─┬ plugin-error@0.1.2
│ │ │ ├─┬ ansi-cyan@0.1.1
│ │ │ │ └── ansi-wrap@0.1.0
│ │ │ ├── ansi-red@0.1.1
│ │ │ ├── arr-union@2.1.0
│ │ │ └── extend-shallow@1.1.4
│ │ └── through2@0.6.5
│ └─┬ vinyl-fs@1.0.0
│   ├─┬ glob-stream@4.1.1
│   │ ├── glob@4.5.3
│   │ ├── minimatch@2.0.10
│   │ └── unique-stream@2.2.0
│   ├── glob-watcher@0.0.8
│   ├── graceful-fs@3.0.8
│   ├─┬ mkdirp@0.5.1
│   │ └── minimist@0.0.8
│   ├── object-assign@2.1.1
│   ├── through2@0.6.5
│   └─┬ vinyl@0.4.6
│     └── clone@0.2.0
├── require-dir@0.3.0
├─┬ run-sequence@1.1.2
│ └─┬ 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
├─┬ vulcanize@1.10.3
│ ├─┬ dom5@1.1.1
│ │ └── parse5@1.5.0
│ ├── es6-promise@2.3.0
│ ├─┬ hydrolysis@1.15.4
│ │ ├── doctrine@0.6.4
│ │ ├── espree@2.2.4
│ │ ├── estraverse@3.1.0
│ │ └── setimmediate@1.0.2
│ ├── path-posix@1.0.0
│ └─┬ update-notifier@0.5.0
│   ├─┬ 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
│   ├─┬ configstore@1.2.1
│   │ ├─┬ mkdirp@0.5.1
│   │ │ └── minimist@0.0.8
│   │ ├── os-tmpdir@1.0.1
│   │ ├── osenv@0.1.3
│   │ ├── uuid@2.0.1
│   │ ├─┬ write-file-atomic@1.1.2
│   │ │ ├── graceful-fs@3.0.8
│   │ │ └── slide@1.1.6
│   │ └── xdg-basedir@2.0.0
│   ├── is-npm@1.0.0
│   ├─┬ latest-version@1.0.1
│   │ └─┬ package-json@1.2.0
│   │   ├─┬ got@3.3.1
│   │   │ ├── infinity-agent@2.0.3
│   │   │ ├── is-redirect@1.0.0
│   │   │ ├── is-stream@1.0.1
│   │   │ ├── lowercase-keys@1.0.0
│   │   │ ├── nested-error-stacks@1.0.1
│   │   │ ├── prepend-http@1.0.2
│   │   │ ├─┬ read-all-stream@3.0.1
│   │   │ │ ├─┬ pinkie-promise@1.0.0
│   │   │ │ │ └── pinkie@1.0.0
│   │   │ │ └── readable-stream@2.0.2
│   │   │ └── timed-out@2.0.0
│   │   └─┬ registry-url@3.0.3
│   │     └─┬ rc@1.1.0
│   │       ├── ini@1.3.4
│   │       └── strip-json-comments@0.1.3
│   ├─┬ repeating@1.1.3
│   │ └── is-finite@1.0.1
│   └── semver-diff@2.0.0
└─┬ web-component-tester@3.3.15
  ├── async@0.9.2
  ├─┬ bower@1.5.2
  │ ├─┬ bower-config@0.6.1
  │ │ ├── graceful-fs@2.0.3
  │ │ ├── mout@0.9.1
  │ │ ├─┬ optimist@0.6.1
  │ │ │ └── minimist@0.0.10
  │ │ └── osenv@0.0.3
  │ ├── bower-endpoint-parser@0.2.2
  │ ├─┬ bower-json@0.4.0
  │ │ ├── deep-extend@0.2.11
  │ │ ├── graceful-fs@2.0.3
  │ │ └── intersect@0.0.3
  │ ├── bower-logger@0.2.2
  │ ├─┬ bower-registry-client@0.3.0
  │ │ ├── async@0.2.10
  │ │ ├── graceful-fs@2.0.3
  │ │ ├── lru-cache@2.3.1
  │ │ ├── mkdirp@0.3.5
  │ │ ├─┬ request@2.51.0
  │ │ │ ├── bl@0.9.4
  │ │ │ ├── caseless@0.8.0
  │ │ │ ├─┬ hawk@1.1.1
  │ │ │ │ ├── boom@0.4.2
  │ │ │ │ ├── cryptiles@0.2.2
  │ │ │ │ ├── hoek@0.9.1
  │ │ │ │ └── sntp@0.2.4
  │ │ │ ├── mime-types@1.0.2
  │ │ │ ├── oauth-sign@0.5.0
  │ │ │ └── qs@2.3.3
  │ │ ├── request-replay@0.2.0
  │ │ └── rimraf@2.2.8
  │ ├─┬ cardinal@0.4.4
  │ │ ├── ansicolors@0.2.1
  │ │ └─┬ redeyed@0.4.4
  │ │   └── esprima@1.0.4
  │ ├─┬ 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
  │ ├── chmodr@0.1.0
  │ ├─┬ configstore@0.3.2
  │ │ ├─┬ js-yaml@3.3.1
  │ │ │ ├─┬ argparse@1.0.2
  │ │ │ │ └── sprintf-js@1.0.3
  │ │ │ └── esprima@2.2.0
  │ │ ├── object-assign@2.1.1
  │ │ ├── uuid@2.0.1
  │ │ └── xdg-basedir@1.0.1
  │ ├─┬ decompress-zip@0.1.0
  │ │ ├─┬ binary@0.3.0
  │ │ │ ├── buffers@0.1.1
  │ │ │ └─┬ chainsaw@0.1.0
  │ │ │   └── traverse@0.3.9
  │ │ ├── graceful-fs@3.0.8
  │ │ ├── mkpath@0.1.0
  │ │ ├── readable-stream@1.1.13
  │ │ └─┬ touch@0.0.3
  │ │   └── nopt@1.0.10
  │ ├─┬ deep-sort-object@0.1.1
  │ │ └── mout@0.9.1
  │ ├─┬ fstream@1.0.7
  │ │ ├── graceful-fs@3.0.8
  │ │ └─┬ mkdirp@0.5.1
  │ │   └── minimist@0.0.8
  │ ├─┬ fstream-ignore@1.0.2
  │ │ └── minimatch@2.0.10
  │ ├─┬ github@0.2.4
  │ │ └── mime@1.3.4
  │ ├─┬ glob@4.5.3
  │ │ └── minimatch@2.0.10
  │ ├── graceful-fs@3.0.8
  │ ├─┬ handlebars@2.0.0
  │ │ ├── optimist@0.3.7
  │ │ └─┬ uglify-js@2.3.6
  │ │   ├── async@0.2.10
  │ │   └── source-map@0.1.43
  │ ├─┬ inquirer@0.8.0
  │ │ ├── ansi-regex@1.1.1
  │ │ ├── cli-color@0.3.3
  │ │ ├── figures@1.3.5
  │ │ ├── lodash@2.4.2
  │ │ ├── mute-stream@0.0.4
  │ │ ├─┬ readline2@0.1.1
  │ │ │ └─┬ strip-ansi@2.0.1
  │ │ │   └── ansi-regex@1.1.1
  │ │ └── rx@2.5.3
  │ ├─┬ insight@0.5.3
  │ │ ├── async@0.9.2
  │ │ ├─┬ 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
  │ │ ├─┬ configstore@0.3.2
  │ │ │ ├── graceful-fs@3.0.8
  │ │ │ ├─┬ mkdirp@0.5.1
  │ │ │ │ └── minimist@0.0.8
  │ │ │ ├── uuid@2.0.1
  │ │ │ └── xdg-basedir@1.0.1
  │ │ ├── lodash.debounce@3.1.1
  │ │ ├── object-assign@2.1.1
  │ │ ├─┬ os-name@1.0.3
  │ │ │ ├── osx-release@1.1.0
  │ │ │ └── win-release@1.0.1
  │ │ ├─┬ request@2.61.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.4.2
  │ │ │ ├─┬ hawk@3.1.0
  │ │ │ │ ├── boom@2.8.0
  │ │ │ │ ├── cryptiles@2.0.4
  │ │ │ │ ├── hoek@2.14.0
  │ │ │ │ └── sntp@1.0.9
  │ │ │ ├── http-signature@0.11.0
  │ │ │ ├── oauth-sign@0.8.0
  │ │ │ └── qs@4.0.0
  │ │ └─┬ tough-cookie@0.12.1
  │ │   └── punycode@1.3.2
  │ ├── is-root@1.0.0
  │ ├── junk@1.0.2
  │ ├── lockfile@1.0.1
  │ ├── lru-cache@2.6.5
  │ ├─┬ mkdirp@0.5.0
  │ │ └── minimist@0.0.8
  │ ├── mout@0.11.0
  │ ├─┬ p-throttler@0.1.1
  │ │ └── q@0.9.7
  │ ├─┬ promptly@0.2.0
  │ │ └── read@1.0.7
  │ ├── q@1.4.1
  │ ├─┬ request@2.53.0
  │ │ ├── aws-sign2@0.5.0
  │ │ ├── bl@0.9.4
  │ │ ├── caseless@0.9.0
  │ │ ├─┬ combined-stream@0.0.7
  │ │ │ └── delayed-stream@0.0.5
  │ │ ├── forever-agent@0.5.2
  │ │ ├─┬ form-data@0.2.0
  │ │ │ ├── async@0.9.2
  │ │ │ └─┬ mime-types@2.0.14
  │ │ │   └── mime-db@1.12.0
  │ │ ├─┬ hawk@2.3.1
  │ │ │ ├── boom@2.8.0
  │ │ │ ├── cryptiles@2.0.4
  │ │ │ ├── hoek@2.14.0
  │ │ │ └── sntp@1.0.9
  │ │ ├─┬ http-signature@0.10.1
  │ │ │ ├── asn1@0.1.11
  │ │ │ ├── assert-plus@0.1.5
  │ │ │ └── ctype@0.5.3
  │ │ ├── isstream@0.1.2
  │ │ ├── json-stringify-safe@5.0.1
  │ │ ├─┬ mime-types@2.0.14
  │ │ │ └── mime-db@1.12.0
  │ │ ├── node-uuid@1.4.3
  │ │ ├── oauth-sign@0.6.0
  │ │ ├── qs@2.3.3
  │ │ ├── stringstream@0.0.4
  │ │ ├── tough-cookie@2.0.0
  │ │ └── tunnel-agent@0.4.1
  │ ├─┬ request-progress@0.3.1
  │ │ └── throttleit@0.0.2
  │ ├── retry@0.6.1
  │ ├── semver@2.3.2
  │ ├─┬ shell-quote@1.4.3
  │ │ ├── array-filter@0.0.1
  │ │ ├── array-map@0.0.0
  │ │ ├── array-reduce@0.0.0
  │ │ └── jsonify@0.0.0
  │ ├── stringify-object@1.0.1
  │ ├─┬ tar-fs@1.8.1
  │ │ ├─┬ mkdirp@0.5.1
  │ │ │ └── minimist@0.0.8
  │ │ ├─┬ pump@1.0.0
  │ │ │ └── end-of-stream@1.1.0
  │ │ └─┬ tar-stream@1.2.1
  │ │   ├── end-of-stream@1.1.0
  │ │   └── readable-stream@2.0.2
  │ ├── tmp@0.0.24
  │ ├── update-notifier@0.3.2
  │ └─┬ which@1.1.1
  │   └─┬ is-absolute@0.1.7
  │     └── is-relative@0.1.3
  ├── cleankill@1.0.2
  ├─┬ express@4.13.3
  │ ├── array-flatten@1.1.1
  │ ├── content-disposition@0.5.0
  │ ├── content-type@1.0.1
  │ ├── cookie-signature@1.0.6
  │ ├── depd@1.0.1
  │ ├── merge-descriptors@1.0.0
  │ ├── methods@1.1.1
  │ ├─┬ on-finished@2.3.0
  │ │ └── ee-first@1.1.1
  │ ├── path-to-regexp@0.1.7
  │ ├─┬ proxy-addr@1.0.8
  │ │ ├── forwarded@0.1.0
  │ │ └── ipaddr.js@1.0.1
  │ ├── qs@4.0.0
  │ ├── range-parser@1.0.2
  │ ├─┬ send@0.13.0
  │ │ └── mime@1.3.4
  │ ├─┬ type-is@1.6.7
  │ │ └── media-typer@0.3.0
  │ └── vary@1.0.1
  ├─┬ glob@4.5.3
  │ └── minimatch@2.0.10
  ├─┬ nomnom@1.8.1
  │ ├─┬ chalk@0.4.0
  │ │ ├── ansi-styles@1.0.0
  │ │ ├── has-color@0.1.7
  │ │ └── strip-ansi@0.1.1
  │ └── underscore@1.6.0
  ├── resolve@1.1.6
  ├─┬ send@0.11.1
  │ ├── debug@2.1.3
  │ ├── destroy@1.0.3
  │ ├── escape-html@1.0.1
  │ ├─┬ etag@1.5.1
  │ │ └── crc@3.2.1
  │ ├── fresh@0.2.4
  │ ├── mime@1.2.11
  │ ├── ms@0.7.0
  │ └─┬ on-finished@2.2.1
  │   └── ee-first@1.1.0
  ├─┬ serve-waterfall@1.1.1
  │ └─┬ send@0.11.1
  │   ├── debug@2.1.3
  │   ├── escape-html@1.0.1
  │   ├── etag@1.5.1
  │   ├── fresh@0.2.4
  │   ├── mime@1.2.11
  │   ├── ms@0.7.0
  │   └─┬ on-finished@2.2.1
  │     └── ee-first@1.1.0
  ├── server-destroy@1.0.1
  ├── stacky@1.2.3
  ├─┬ update-notifier@0.4.0
  │ ├─┬ 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
  │ └─┬ configstore@0.3.2
  │   ├── graceful-fs@3.0.8
  │   ├─┬ mkdirp@0.5.1
  │   │ └── minimist@0.0.8
  │   ├── object-assign@2.1.1
  │   ├── uuid@2.0.1
  │   └── xdg-basedir@1.0.1
  ├─┬ wct-local@1.5.2
  │ ├── freeport@1.0.5
  │ ├─┬ launchpad@0.4.7
  │ │ ├── async@0.1.22
  │ │ ├── browserstack@1.2.0
  │ │ ├─┬ plist@0.4.3
  │ │ │ ├── xmlbuilder@0.4.3
  │ │ │ └── xmldom@0.1.19
  │ │ └─┬ restify@1.4.4
  │ │   ├── async@0.1.22
  │ │   ├── bunyan@0.10.0
  │ │   ├── byline@2.0.2
  │ │   ├── UNMET OPTIONAL DEPENDENCY dtrace-provider@0.0.9
  │ │   ├── formidable@1.0.11
  │ │   ├─┬ http-signature@0.9.9
  │ │   │ └── ctype@0.5.0
  │ │   ├── lru-cache@1.1.0
  │ │   ├── mime@1.2.5
  │ │   ├── node-uuid@1.3.3
  │ │   ├── qs@0.5.0
  │ │   ├── retry@0.6.0
  │ │   └── semver@1.0.14
  │ └─┬ selenium-standalone@4.5.3
  │   ├── async@1.2.1
  │   ├── commander@2.6.0
  │   ├── lodash@3.9.3
  │   ├── minimist@1.1.0
  │   ├─┬ mkdirp@0.5.0
  │   │ └── minimist@0.0.8
  │   ├── progress@1.1.8
  │   ├─┬ request@2.51.0
  │   │ ├── bl@0.9.4
  │   │ ├── mime-types@1.0.2
  │   │ └── qs@2.3.3
  │   ├─┬ unzip@0.1.11
  │   │ ├─┬ fstream@0.1.31
  │   │ │ ├── graceful-fs@3.0.8
  │   │ │ └─┬ mkdirp@0.5.1
  │   │ │   └── minimist@0.0.8
  │   │ ├── match-stream@0.0.2
  │   │ └─┬ pullstream@0.4.1
  │   │   ├── over@0.0.5
  │   │   └── slice-stream@1.0.0
  │   └── URIjs@1.15.0
  ├─┬ wct-sauce@1.6.5
  │ ├─┬ request@2.61.0
  │ │ ├─┬ bl@1.0.0
  │ │ │ └── readable-stream@2.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
  │ │ │ └── async@1.4.2
  │ │ ├─┬ har-validator@1.8.0
  │ │ │ ├─┬ 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
  │ │ │ └─┬ is-my-json-valid@2.12.1
  │ │ │   ├── generate-function@2.0.0
  │ │ │   ├─┬ generate-object-property@1.2.0
  │ │ │   │ └── is-property@1.0.2
  │ │ │   └── jsonpointer@1.1.0
  │ │ ├─┬ hawk@3.1.0
  │ │ │ ├── boom@2.8.0
  │ │ │ ├── cryptiles@2.0.4
  │ │ │ ├── hoek@2.14.0
  │ │ │ └── sntp@1.0.9
  │ │ ├── http-signature@0.11.0
  │ │ ├── oauth-sign@0.8.0
  │ │ └── qs@4.0.0
  │ ├─┬ sauce-connect-launcher@0.12.0
  │ │ ├── adm-zip@0.4.7
  │ │ ├── async@1.3.0
  │ │ ├── lodash@3.10.0
  │ │ └─┬ rimraf@2.4.1
  │ │   └─┬ glob@4.5.3
  │ │     └── minimatch@2.0.10
  │ ├─┬ temp@0.8.3
  │ │ └── rimraf@2.2.8
  │ └── uuid@2.0.1
  └─┬ wd@0.3.12
    ├─┬ archiver@0.14.4
    │ ├── async@0.9.2
    │ ├── buffer-crc32@0.2.5
    │ ├─┬ glob@4.3.5
    │ │ └── minimatch@2.0.10
    │ ├── lazystream@0.1.0
    │ ├── lodash@3.2.0
    │ ├─┬ tar-stream@1.1.5
    │ │ ├── bl@0.9.4
    │ │ └── end-of-stream@1.1.0
    │ └─┬ zip-stream@0.5.2
    │   ├─┬ compress-commons@0.2.9
    │   │ ├── crc32-stream@0.3.4
    │   │ └── node-int64@0.3.3
    │   └── lodash@3.2.0
    ├── async@1.0.0
    ├── lodash@3.9.3
    ├─┬ request@2.55.0
    │ ├── bl@0.9.4
    │ ├── caseless@0.9.0
    │ ├── forever-agent@0.6.1
    │ ├─┬ hawk@2.3.1
    │ │ ├── boom@2.8.0
    │ │ ├── cryptiles@2.0.4
    │ │ ├── hoek@2.14.0
    │ │ └── sntp@1.0.9
    │ ├─┬ mime-types@2.0.14
    │ │ └── mime-db@1.12.0
    │ ├── oauth-sign@0.6.0
    │ └── qs@2.4.2
    ├── underscore.string@3.0.3
    └── vargs@0.1.0
@addyosmani addyosmani added this to the 1.1.2 milestone Aug 28, 2015
@addyosmani
Copy link
Member

👍

I think we should take the time to analyze our dep tree in more detail after 1.1 is out. There are a few things we could try here like npm dedupe'ing and just looking at whether everything we're pulling in at present is still fully used.

@JosefJezek
Copy link

gulp-flatten and opn are unused.

@arthurvr
Copy link
Contributor

Ah, that seems right. Thanks for reporting @JosefJezek. Removed those in #358.

@chuckh
Copy link
Contributor

chuckh commented Sep 16, 2015

LGTM

@sindresorhus
Copy link

The dep tree has a lot of duplicates, so it will be significantly smaller when deduped or installed with npm@3. web-component-tester should also not depend on bower (massive dep tree) directly, but rather spawn the globally installed one. That will bring it further down. The dep size also doesn't affect the install time as much as compiling native things, like the ws module.

@addyosmani
Copy link
Member

Thanks for the feedback @sindresorhus. Started looking into deduping and shrinkwrapping and came to the same conclusions about web-component-tester. I'm not sure why were weren't globally spawning bower there by default.

@azakus any opposition to us switching to this approach upstream?

@dfreedm
Copy link
Member

dfreedm commented Sep 22, 2015

Probably for the 0.1% use case of people not having bower installed.
I'm willing to cut that out and call it a breaking change, maybe with some more auditing of wct's dependencies as well.

BTW, there's both a gulp-vulcanize, and vulcanize in that list. Probably only need one.

@samccone
Copy link
Contributor Author

I am +1 for dropping gulp-imagemin@2.3.0 ... it takes a super long time to install, and only really matters when you go to ship your site

Just for fun you guys should rm -rf the starter-kit and npm i from scratch and see just how long it takes to install everything, 🕐

@sindresorhus
Copy link

I am +1 for dropping gulp-imagemin@2.3.0 ... it takes a super long time to install, and only really matters when you go to ship your site

That really depends on your system. If there are precompiled binaries available it will be faster, but compiling those libs from source is extremely slow. But yeah, it adds a lot of overhead regardless.

Just for fun you guys should rm -rf the starter-kit and npm i from scratch and see just how long it takes to install everything, 🕐

Please do so with npm@3, so to measure with the right conditions. Also keep in mind that the dependency tree printed by npm@3 is the virtual tree and not what's actually on disk, as it's deduplicated on disk, but not in the printed tree.

@samccone
Copy link
Contributor Author

@paulirish had a comical experience installing this with npm@3 last friday

His 💻 === 💀 🔥

@sindresorhus
Copy link

It's taking ~10-14 minutes with npm@3. Way too much! It only takes ~2 minutes on npm@2. Seems like a regression: npm/npm#8826

@addyosmani
Copy link
Member

Ugh. That's unfortunate. Thanks for commenting on the upstream regression and also putting together the shrinkwrap for them to repro.

Honest question: given the clear slowdown in dependency installation with npm@3, should we suggest users use npm@2 in our README and note the regression isn't on our end? We have a ton of work to do on trimming the tree here otherwise for sure.

@sindresorhus
Copy link

Honest question: given the clear slowdown in dependency installation with npm@3, should we suggest users use npm@2 in our README and note the regression isn't on our end? We have a ton of work to do on trimming the tree here otherwise for sure.

I don't think it will be a big problem yet. Most users, especially the front-end people using this, are from experience very slow with updating both npm and node. I guess it couldn't hurt to warn people temporarily though.

@sindresorhus
Copy link

And biggest size offenders:

screen shot 2015-09-23 at 12 38 00

@addyosmani addyosmani added the bug label Sep 23, 2015
@yocontra
Copy link

@sindresorhus worth opening a ticket on those offenders

@addyosmani addyosmani modified the milestones: 1.1.1, 1.1.2 Oct 8, 2015
@addyosmani
Copy link
Member

@samccone Do you think we'll be able to take an initial look at this this week? If not, we might need to bump it to the next milestone.

@samccone
Copy link
Contributor Author

samccone commented Nov 3, 2015

ref: yeoman/generator-polymer#223

@addyosmani addyosmani modified the milestones: 1.1.2, 1.1.3 Nov 9, 2015
@samccone
Copy link
Contributor Author

samccone commented Nov 9, 2015

I just did a clean install on the latest npm and it took well over 7 minutes on a newish macbook air

I think this is really undesirable and we should try and figure out what we can do to make this fast.

@sindresorhus
Copy link

@samccone Bother npm about it? A large part of it is clearly a regression in npm@3 as npm@2 i so much faster relatively (still slow though).

It's also clear from #337 (comment) where the biggest size offenders are.

@chuckh
Copy link
Contributor

chuckh commented Nov 23, 2015

Looks like gulp-cssmin https://github.com/chilijung/gulp-cssmin has been depreciated in favor of gulp-minify-css https://github.com/murphydanger/gulp-minify-css. We may want to switch.

@addyosmani
Copy link
Member

@chuckh Good catch. It may be worth us trying to switch before the next release is out.

@chuckh
Copy link
Contributor

chuckh commented Nov 24, 2015

I found this using Bithound. You can see it for PSK at https://www.bithound.io/github/PolymerElements/polymer-starter-kit/master.

@addyosmani I will create a pull request for gulp-minify-css today,

@addyosmani
Copy link
Member

Thanks Chuck!

@dfreedm
Copy link
Member

dfreedm commented Dec 17, 2015

WCT 4.0 no longer depends on bower

@robdodson
Copy link
Contributor

My primary concern with removing imagemin is that images account for so much of page weight and I fear folks won't add it back in..

Web Component Tester, on the other hand, could maybe be omitted. It's a big dependency and I'm already making it optional in the yeoman generator.

@fmauNeko
Copy link

It seems that gulp-minify-html https://www.npmjs.com/package/gulp-minify-html has been deprecated in favor of https://www.npmjs.com/package/gulp-htmlmin. I'll do a pull request after christmas if it hasn't been done.

@samccone
Copy link
Contributor Author

👌 sgtm

@robdodson
Copy link
Contributor

There's an open PR for this now:
#645

A long time ago we tried using htmlmin in generator-polymer and it would do nasty things to the page. Probably need to run through both htmlmin and cssnano again to see if things have improved

@TimvdLippe
Copy link
Contributor

Our project has 847 dependencies loaded: https://gist.github.com/TimvdLippe/a62ee54f8d1541557f550aa9ffb738f7

The gist also includes our package.json and gulpfile.js. Since we are working towards PSK2 I think it is a good time to evaluate all dependencies. In my opinion, switching to polybuild greatly simplifies the build process. Also we switched to gulp-htmlmin which is working for us just fine.

The biggest dependency contributors in our project are:

  • Browsersync with 227 dependencies
  • gulp-imagemin with 196 dependencies

An item still on my TODO list is to look for other image plugins, preferably compressing them too to for example .webp.

In total, installation on my computer was 2m4.215s. (I do not know if this includes downloading, I just removed node_modules/ and ran time npm i).

TLDR: For PSK2, consider adding back polybuild and switch to gulp-htmlmin with correct options. Consider replacing gulp-imagemin with a similar gulp-plugin, maybe something which supports .webp.

@niutech
Copy link

niutech commented Jul 11, 2016

I've just downloaded a fresh PSK and it took 30 min on a low bandwidth connection just to install 151 MB (!) of the dependencies. This is way too much for a starter kit. Please slim it down.

@robdodson
Copy link
Contributor

@niutech probably the biggest thing would be removing web-component-tester from both package.json and bower.json. It downloads Selenium which is the majority of that 151 megs i believe

@niutech
Copy link

niutech commented Jul 12, 2016

Right. Among 738 modules in node_modules folder, the heaviest is selenium-standalone (45 MB).

@harmjanluth
Copy link

Maybe considering an alternative to gulp? The webpack image loader for example seems to be a lot smaller.

@robdodson
Copy link
Contributor

I feel like we conveniently sidestepped this issue by switching to Polymer CLI. Now we only have 1 dependency :P

I'm going to float the idea of closing this unless folks object?

@chuckh
Copy link
Contributor

chuckh commented Aug 28, 2016

@robdodson SGTM to close this issue.

@abdonrd
Copy link
Contributor

abdonrd commented Aug 28, 2016

@robdodson SGTM!

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
Projects
None yet
Development

No branches or pull requests