Gulp - errors, mess with npm - node.js

I work in project with laravel framework and I really can't deal with npm,
1) first the version of node was wrong so I upgrade with npm like that
2) second I run sudo npm install and I have errors:
npm WARN deprecated lodash#1.0.2: lodash#<2.0.0 is no longer maintained. Upgrade to lodash#^3.0.0
npm WARN install Couldn't install optional dependency: Unsupported
npm WARN install Couldn't install optional dependency: Unsupported
npm WARN install Couldn't install optional dependency: Unsupported
/home/student/PhpstormProjects/laravel
├─┬ gulp#3.9.0
│ ├── minimist#1.2.0
│ └── semver#4.3.6
├─┬ gulp-util#3.0.7
│ ├─┬ dateformat#1.0.12
│ │ └─┬ meow#3.7.0
│ │ ├── minimist#1.2.0
│ │ ├── object-assign#4.0.1
│ │ ├─┬ read-pkg-up#1.0.1
│ │ │ └─┬ read-pkg#1.1.0
│ │ │ ├─┬ load-json-file#1.1.0
│ │ │ │ └── graceful-fs#4.1.2
│ │ │ └─┬ path-type#1.1.0
│ │ │ └── graceful-fs#4.1.2
│ │ └─┬ redent#1.0.0
│ │ └─┬ indent-string#2.1.0
│ │ └── repeating#2.0.0
│ ├── minimist#1.2.0
│ └─┬ multipipe#0.1.2
│ └─┬ duplexer2#0.0.2
│ └── readable-stream#1.1.13
├─┬ laravel-elixir#4.2.0
│ ├─┬ babel-preset-es2015#6.3.13
│ │ └─┬ babel-plugin-transform-regenerator#6.3.26
│ │ └─┬ babel-core#6.4.0
│ │ └─┬ babel-generator#6.4.2
│ │ └─┬ detect-indent#3.0.1
│ │ └── minimist#1.2.0
│ ├─┬ babelify#7.2.0
│ │ ├─┬ babel-core#6.4.0
│ │ │ └─┬ babel-generator#6.4.2
│ │ │ └─┬ detect-indent#3.0.1
│ │ │ └── minimist#1.2.0
│ │ └── object-assign#4.0.1
│ ├─┬ browser-sync#2.11.0
│ │ ├─┬ chokidar#1.4.1
│ │ │ └─┬ readdirp#2.0.0
│ │ │ └── graceful-fs#4.1.2
│ │ ├─┬ eazy-logger#2.1.2
│ │ │ └─┬ opt-merger#1.1.1
│ │ │ └── minimist#1.2.0
│ │ ├─┬ fs-extra#0.26.4
│ │ │ └── graceful-fs#4.1.2
│ │ ├─┬ meow#3.3.0
│ │ │ └── minimist#1.2.0
│ │ └─┬ opn#3.0.3
│ │ └── object-assign#4.0.1
│ ├─┬ browserify#11.2.0
│ │ ├─┬ concat-stream#1.4.10
│ │ │ └── readable-stream#1.1.13
│ │ ├─┬ duplexer2#0.0.2
│ │ │ └── readable-stream#1.1.13
│ │ ├── glob#4.5.3
│ │ ├─┬ labeled-stream-splicer#1.0.2
│ │ │ └─┬ stream-splicer#1.3.2
│ │ │ └── readable-stream#1.1.13
│ │ ├─┬ module-deps#3.9.1
│ │ │ ├── readable-stream#1.1.13
│ │ │ └─┬ stream-combiner2#1.0.2
│ │ │ └─┬ through2#0.5.1
│ │ │ └── readable-stream#1.0.33
│ │ ├─┬ read-only-stream#1.1.1
│ │ │ └── readable-stream#1.1.13
│ │ ├─┬ subarg#1.0.0
│ │ │ └── minimist#1.2.0
│ │ └─┬ through2#1.1.1
│ │ └── readable-stream#1.1.13
│ ├── glob#5.0.15
│ ├─┬ gulp-autoprefixer#2.3.1
│ │ └─┬ through2#0.6.5
│ │ └── readable-stream#1.0.33
│ ├─┬ gulp-babel#6.1.1
│ │ ├─┬ babel-core#6.4.0
│ │ │ └─┬ babel-generator#6.4.2
│ │ │ └─┬ detect-indent#3.0.1
│ │ │ └── minimist#1.2.0
│ │ └── object-assign#4.0.1
│ ├─┬ gulp-coffee#2.3.1
│ │ └─┬ through2#0.6.5
│ │ └── readable-stream#1.0.33
│ ├─┬ gulp-concat#2.6.0
│ │ └─┬ through2#0.6.5
│ │ └── readable-stream#1.0.33
│ ├─┬ gulp-cssnano#2.1.0
│ │ ├─┬ cssnano#3.4.0
│ │ │ └─┬ postcss-svgo#2.1.1
│ │ │ └─┬ svgo#0.6.1
│ │ │ └── mkdirp#0.5.1
│ │ └── object-assign#4.0.1
│ ├─┬ gulp-if#1.2.5
│ │ ├─┬ ternary-stream#1.2.3
│ │ │ └─┬ duplexer2#0.0.2
│ │ │ └── readable-stream#1.1.13
│ │ └─┬ through2#0.6.5
│ │ └── readable-stream#1.0.33
│ ├─┬ gulp-less#3.0.5
│ │ ├─┬ accord#0.20.5
│ │ │ └── semver#4.3.6
│ │ ├─┬ less#2.5.3
│ │ │ └── mkdirp#0.5.1
│ │ └── object-assign#4.0.1
│ ├─┬ gulp-notify#2.2.0
│ │ ├─┬ node-notifier#4.4.0
│ │ │ ├── minimist#1.2.0
│ │ │ └── semver#4.3.6
│ │ └─┬ through2#0.6.5
│ │ └── readable-stream#1.0.33
│ ├─┬ gulp-phpspec#0.5.3
│ │ ├─┬ gulp-jshint#1.12.0
│ │ │ ├─┬ gulp-util#3.0.7
│ │ │ │ ├─┬ dateformat#1.0.12
│ │ │ │ │ └─┬ meow#3.7.0
│ │ │ │ │ ├── object-assign#4.0.1
│ │ │ │ │ ├─┬ read-pkg-up#1.0.1
│ │ │ │ │ │ └─┬ read-pkg#1.1.0
│ │ │ │ │ │ ├─┬ load-json-file#1.1.0
│ │ │ │ │ │ │ └── graceful-fs#4.1.2
│ │ │ │ │ │ └─┬ path-type#1.1.0
│ │ │ │ │ │ └── graceful-fs#4.1.2
│ │ │ │ │ └─┬ redent#1.0.0
│ │ │ │ │ └─┬ indent-string#2.1.0
│ │ │ │ │ └── repeating#2.0.0
│ │ │ │ ├── minimist#1.2.0
│ │ │ │ └─┬ multipipe#0.1.2
│ │ │ │ └─┬ duplexer2#0.0.2
│ │ │ │ └── readable-stream#1.1.13
│ │ │ └─┬ through2#0.6.5
│ │ │ └── readable-stream#1.0.33
│ │ ├─┬ gulp-logger#0.0.2
│ │ │ ├─┬ gulp-util#3.0.7
│ │ │ │ ├─┬ dateformat#1.0.12
│ │ │ │ │ └─┬ meow#3.7.0
│ │ │ │ │ ├── object-assign#4.0.1
│ │ │ │ │ ├─┬ read-pkg-up#1.0.1
│ │ │ │ │ │ └─┬ read-pkg#1.1.0
│ │ │ │ │ │ ├─┬ load-json-file#1.1.0
│ │ │ │ │ │ │ └── graceful-fs#4.1.2
│ │ │ │ │ │ └─┬ path-type#1.1.0
│ │ │ │ │ │ └── graceful-fs#4.1.2
│ │ │ │ │ └─┬ redent#1.0.0
│ │ │ │ │ └─┬ indent-string#2.1.0
│ │ │ │ │ └── repeating#2.0.0
│ │ │ │ ├── minimist#1.2.0
│ │ │ │ └─┬ multipipe#0.1.2
│ │ │ │ └─┬ duplexer2#0.0.2
│ │ │ │ └── readable-stream#1.1.13
│ │ │ └─┬ through2#0.5.1
│ │ │ └── readable-stream#1.0.33
│ │ ├─┬ gulp-todo#2.6.2
│ │ │ ├─┬ gulp-util#3.0.7
│ │ │ │ ├─┬ dateformat#1.0.12
│ │ │ │ │ └─┬ meow#3.7.0
│ │ │ │ │ ├── object-assign#4.0.1
│ │ │ │ │ ├─┬ read-pkg-up#1.0.1
│ │ │ │ │ │ └─┬ read-pkg#1.1.0
│ │ │ │ │ │ ├─┬ load-json-file#1.1.0
│ │ │ │ │ │ │ └── graceful-fs#4.1.2
│ │ │ │ │ │ └─┬ path-type#1.1.0
│ │ │ │ │ │ └── graceful-fs#4.1.2
│ │ │ │ │ └─┬ redent#1.0.0
│ │ │ │ │ └─┬ indent-string#2.1.0
│ │ │ │ │ └── repeating#2.0.0
│ │ │ │ ├── minimist#1.2.0
│ │ │ │ └─┬ multipipe#0.1.2
│ │ │ │ └─┬ duplexer2#0.0.2
│ │ │ │ └── readable-stream#1.1.13
│ │ │ └─┬ through2#0.6.5
│ │ │ └── readable-stream#1.0.33
│ │ ├─┬ gulp-util#2.2.20
│ │ │ ├─┬ dateformat#1.0.12
│ │ │ │ └─┬ meow#3.7.0
│ │ │ │ ├── minimist#1.2.0
│ │ │ │ ├── object-assign#4.0.1
│ │ │ │ ├─┬ read-pkg-up#1.0.1
│ │ │ │ │ └─┬ read-pkg#1.1.0
│ │ │ │ │ ├─┬ load-json-file#1.1.0
│ │ │ │ │ │ └── graceful-fs#4.1.2
│ │ │ │ │ └─┬ path-type#1.1.0
│ │ │ │ │ └── graceful-fs#4.1.2
│ │ │ │ └─┬ redent#1.0.0
│ │ │ │ └─┬ indent-string#2.1.0
│ │ │ │ └── repeating#2.0.0
│ │ │ ├─┬ multipipe#0.1.2
│ │ │ │ └─┬ duplexer2#0.0.2
│ │ │ │ └── readable-stream#1.1.13
│ │ │ └─┬ through2#0.5.1
│ │ │ └── readable-stream#1.0.33
│ │ └─┬ jshint#2.8.0
│ │ └─┬ htmlparser2#3.8.3
│ │ └── readable-stream#1.1.13
│ ├─┬ gulp-phpunit#0.11.3
│ │ ├─┬ gulp-messenger#0.7.0
│ │ │ ├─┬ gulp-debug#2.1.2
│ │ │ │ ├─┬ gulp-util#3.0.7
│ │ │ │ │ ├─┬ dateformat#1.0.12
│ │ │ │ │ │ └─┬ meow#3.7.0
│ │ │ │ │ │ ├── object-assign#4.0.1
│ │ │ │ │ │ ├─┬ read-pkg-up#1.0.1
│ │ │ │ │ │ │ └─┬ read-pkg#1.1.0
│ │ │ │ │ │ │ ├─┬ load-json-file#1.1.0
│ │ │ │ │ │ │ │ └── graceful-fs#4.1.2
│ │ │ │ │ │ │ └─┬ path-type#1.1.0
│ │ │ │ │ │ │ └── graceful-fs#4.1.2
│ │ │ │ │ │ └─┬ redent#1.0.0
│ │ │ │ │ │ └─┬ indent-string#2.1.0
│ │ │ │ │ │ └── repeating#2.0.0
│ │ │ │ │ ├── minimist#1.2.0
│ │ │ │ │ └─┬ multipipe#0.1.2
│ │ │ │ │ └─┬ duplexer2#0.0.2
│ │ │ │ │ └── readable-stream#1.1.13
│ │ │ │ └── object-assign#4.0.1
│ │ │ ├── mkdirp#0.5.1
│ │ │ └─┬ through2#0.6.5
│ │ │ └── readable-stream#1.0.33
│ │ ├─┬ gulp-util#2.2.20
│ │ │ ├─┬ dateformat#1.0.12
│ │ │ │ └─┬ meow#3.7.0
│ │ │ │ ├── minimist#1.2.0
│ │ │ │ ├── object-assign#4.0.1
│ │ │ │ ├─┬ read-pkg-up#1.0.1
│ │ │ │ │ └─┬ read-pkg#1.1.0
│ │ │ │ │ ├─┬ load-json-file#1.1.0
│ │ │ │ │ │ └── graceful-fs#4.1.2
│ │ │ │ │ └─┬ path-type#1.1.0
│ │ │ │ │ └── graceful-fs#4.1.2
│ │ │ │ └─┬ redent#1.0.0
│ │ │ │ └─┬ indent-string#2.1.0
│ │ │ │ └── repeating#2.0.0
│ │ │ ├─┬ multipipe#0.1.2
│ │ │ │ └─┬ duplexer2#0.0.2
│ │ │ │ └── readable-stream#1.1.13
│ │ │ └─┬ through2#0.5.1
│ │ │ └── readable-stream#1.0.33
│ │ └─┬ node-notifier#4.3.1
│ │ ├── minimist#1.2.0
│ │ └── semver#4.3.6
│ ├─┬ gulp-rev#5.1.0
│ │ ├─┬ through2#0.6.5
│ │ │ └── readable-stream#1.0.33
│ │ └─┬ vinyl-file#1.3.0
│ │ └── graceful-fs#4.1.2
│ ├─┬ gulp-sass#2.1.1
│ │ ├─┬ node-sass#3.4.2
│ │ │ ├─┬ gaze#0.5.2
│ │ │ │ └─┬ globule#0.1.0
│ │ │ │ ├─┬ glob#3.1.21
│ │ │ │ │ ├── graceful-fs#1.2.3
│ │ │ │ │ └── inherits#1.0.2
│ │ │ │ ├── lodash#1.0.2
│ │ │ │ └── minimatch#0.2.14
│ │ │ ├─┬ meow#3.7.0
│ │ │ │ ├── minimist#1.2.0
│ │ │ │ ├─┬ read-pkg-up#1.0.1
│ │ │ │ │ └─┬ read-pkg#1.1.0
│ │ │ │ │ ├─┬ load-json-file#1.1.0
│ │ │ │ │ │ └── graceful-fs#4.1.2
│ │ │ │ │ └─┬ path-type#1.1.0
│ │ │ │ │ └── graceful-fs#4.1.2
│ │ │ │ └─┬ redent#1.0.0
│ │ │ │ └─┬ indent-string#2.1.0
│ │ │ │ └── repeating#2.0.0
│ │ │ ├── mkdirp#0.5.1
│ │ │ ├─┬ node-gyp#3.2.1
│ │ │ │ ├─┬ fstream#1.0.8
│ │ │ │ │ ├── graceful-fs#4.1.2
│ │ │ │ │ └── mkdirp#0.5.1
│ │ │ │ ├── glob#4.5.3
│ │ │ │ └── graceful-fs#4.1.2
│ │ │ └─┬ npmconf#2.1.2
│ │ │ └── semver#4.3.6
│ │ └── object-assign#4.0.1
│ ├─┬ gulp-sourcemaps#1.6.0
│ │ └── graceful-fs#4.1.2
│ ├─┬ gulp-uglify#1.5.1
│ │ └─┬ fancy-log#1.1.0
│ │ └─┬ dateformat#1.0.12
│ │ └─┬ meow#3.7.0
│ │ ├── minimist#1.2.0
│ │ ├── object-assign#4.0.1
│ │ ├─┬ read-pkg-up#1.0.1
│ │ │ └─┬ read-pkg#1.1.0
│ │ │ ├─┬ load-json-file#1.1.0
│ │ │ │ └── graceful-fs#4.1.2
│ │ │ └─┬ path-type#1.1.0
│ │ │ └── graceful-fs#4.1.2
│ │ └─┬ redent#1.0.0
│ │ └─┬ indent-string#2.1.0
│ │ └── repeating#2.0.0
│ ├─┬ gulp-util#3.0.7
│ │ ├─┬ dateformat#1.0.12
│ │ │ └─┬ meow#3.7.0
│ │ │ ├── object-assign#4.0.1
│ │ │ ├─┬ read-pkg-up#1.0.1
│ │ │ │ └─┬ read-pkg#1.1.0
│ │ │ │ ├─┬ load-json-file#1.1.0
│ │ │ │ │ └── graceful-fs#4.1.2
│ │ │ │ └─┬ path-type#1.1.0
│ │ │ │ └── graceful-fs#4.1.2
│ │ │ └─┬ redent#1.0.0
│ │ │ └─┬ indent-string#2.1.0
│ │ │ └── repeating#2.0.0
│ │ ├── minimist#1.2.0
│ │ └─┬ multipipe#0.1.2
│ │ └─┬ duplexer2#0.0.2
│ │ └── readable-stream#1.1.13
│ ├─┬ gulp-watch#4.3.5
│ │ ├─┬ chokidar#1.4.2
│ │ │ └─┬ readdirp#2.0.0
│ │ │ └── graceful-fs#4.1.2
│ │ └─┬ vinyl-file#1.3.0
│ │ └── graceful-fs#4.1.2
│ ├─┬ merge-stream#0.1.8
│ │ └─┬ through2#0.6.5
│ │ └── readable-stream#1.0.33
│ ├─┬ vinyl-buffer#1.0.0
│ │ ├─┬ bl#0.9.4
│ │ │ └── readable-stream#1.0.33
│ │ └─┬ through2#0.6.5
│ │ └── readable-stream#1.0.33
│ ├─┬ vinyl-paths#1.0.0
│ │ └─┬ through2#0.6.5
│ │ └── readable-stream#1.0.33
│ ├─┬ vinyl-source-stream#1.1.0
│ │ ├─┬ through2#0.6.5
│ │ │ └── readable-stream#1.0.33
│ │ └─┬ vinyl#0.4.6
│ │ └── clone#0.2.0
│ └─┬ watchify#3.7.0
│ ├─┬ browserify#13.0.0
│ │ └─┬ subarg#1.0.0
│ │ └── minimist#1.2.0
│ └─┬ chokidar#1.4.2
│ └─┬ readdirp#2.0.0
│ └── graceful-fs#4.1.2
├─┬ liftoff#2.2.0
│ ├── extend#2.0.1
│ └─┬ findup-sync#0.3.0
│ └── glob#5.0.15
└─┬ vinyl-fs#0.3.14
├─┬ glob-stream#3.1.18
│ ├── glob#4.5.3
│ └─┬ through2#0.6.5
│ └── readable-stream#1.0.33
├─┬ glob-watcher#0.0.6
│ └─┬ gaze#0.5.2
│ └─┬ globule#0.1.0
│ ├─┬ glob#3.1.21
│ │ ├── graceful-fs#1.2.3
│ │ └── inherits#1.0.2
│ ├── lodash#1.0.2
│ └── minimatch#0.2.14
├── mkdirp#0.5.1
├── strip-bom#1.0.0
├─┬ through2#0.6.5
│ └── readable-stream#1.0.33
└─┬ vinyl#0.4.6
└── clone#0.2.0
Could you help me? Meybe I should just rollback all things but I really don't know how. Any suggestion will be important for me.
EDIT:
When I try to run gulp:
module.js:328
throw err;
^
Error: Cannot find module './lib/UI'
at Function.Module._resolveFilename (module.js:326:15)
at Function.Module._load (module.js:277:25)
at Module.require (module.js:354:17)
at require (internal/module.js:12:17)
at Object.<anonymous> (/home/student/PhpstormProjects/laravel/node_modules/laravel-elixir/node_modules/browser-sync/node_modules/browser-sync-ui/index.js:3:19)
at Module._compile (module.js:398:26)
at Object.Module._extensions..js (module.js:405:10)
at Module.load (module.js:344:32)
at Function.Module._load (module.js:301:12)
at Module.require (module.js:354:17)
at require (internal/module.js:12:17)

Related

Issue integrating Firebase Cloud Functions

I want to use Firebase Cloud Functions in my APP. So for that I have installed "node-v6.17.1.pkg" from official site.
After installing I run "npm install -g firebase-tools" that brought permission error SO I run "sudo npm install -g firebase-tools" and it may be successfully installed.
Output like
/Users/ipatel/.npm-global/bin/firebase -> /Users/ipatel/.npm-global/lib/node_modules/firebase-tools/lib/bin/firebase.js
#google-cloud/functions-emulator#1.0.0-beta.5 postinstall /Users/ipatel/.npm-global/lib/node_modules/firebase-tools/node_modules/#google-cloud/functions-emulator
node scripts/upgrade-warning
If you're using the Emulator via the Firebase CLI, you can
disregard this message.
If you're upgrading #google-cloud/functions-emulator, these
are the recommended upgrade steps:
Stop the currently running emulator, if any:
functions stop
Uninstall the current emulator, if any:
npm uninstall -g #google-cloud/functions-emulator
Install the new version of the emulator:
npm install -g #google-cloud/functions-emulator
If you have trouble after upgrading, try deleting the config
directory found in:
~/.config/configstore/#google-cloud/functions-emulator
Then restart the emulator. You can also check for any renegade
Node.js emulator processes that may need to be killed:
ps aux | grep node
/Users/ipatel/.npm-global/lib
└─┬ firebase-tools#6.6.0
├─┬ #google-cloud/functions-emulator#1.0.0-beta.5
│ ├─┬ #google-cloud/storage#1.7.0
│ │ ├─┬ #google-cloud/common#0.17.0
│ │ │ ├── array-uniq#1.0.3
│ │ │ ├── ent#2.2.0
│ │ │ ├─┬ google-auto-auth#0.10.1
│ │ │ │ ├─┬ gcp-metadata#0.6.3
│ │ │ │ │ ├─┬ axios#0.18.0
│ │ │ │ │ │ ├── follow-redirects#1.7.0
│ │ │ │ │ │ └── is-buffer#1.1.6
│ │ │ │ │ └── retry-axios#0.3.2
│ │ │ │ └─┬ google-auth-library#1.6.1
│ │ │ │ └─┬ gtoken#2.3.3
│ │ │ │ ├─┬ gaxios#1.8.3
│ │ │ │ │ ├─┬ abort-controller#3.0.0
│ │ │ │ │ │ └── event-target-shim#5.0.1
│ │ │ │ │ ├─┬ https-proxy-agent#2.2.1
│ │ │ │ │ │ └─┬ agent-base#4.2.1
│ │ │ │ │ │ └─┬ es6-promisify#5.0.0
│ │ │ │ │ │ └── es6-promise#4.2.6
│ │ │ │ │ └── node-fetch#2.3.0
│ │ │ │ ├─┬ google-p12-pem#1.0.4
│ │ │ │ │ └── node-forge#0.8.2
│ │ │ │ └── pify#4.0.1
│ │ │ ├── log-driver#1.2.7
│ │ │ ├── methmeth#1.1.0
│ │ │ ├── modelo#4.2.3
│ │ │ ├─┬ split-array-stream#1.0.3
│ │ │ │ └── is-stream-ended#0.1.4
│ │ │ └── string-format-obj#1.1.1
│ │ ├── arrify#1.0.1
│ │ ├── compressible#2.0.16
│ │ ├─┬ concat-stream#1.6.2
│ │ │ ├── buffer-from#1.1.1
│ │ │ └── typedarray#0.0.6
│ │ ├─┬ create-error-class#3.0.2
│ │ │ └── capture-stack-trace#1.0.1
│ │ ├─┬ duplexify#3.7.1
│ │ │ └── stream-shift#1.0.0
│ │ ├─┬ gcs-resumable-upload#0.10.2
│ │ │ ├── configstore#3.1.2
│ │ │ └── google-auto-auth#0.10.1
│ │ ├── hash-stream-validation#0.2.1
│ │ ├── mime#2.4.2
│ │ ├─┬ pumpify#1.5.1
│ │ │ └── pump#2.0.1
│ │ ├── snakeize#0.1.0
│ │ ├─┬ stream-events#1.0.5
│ │ │ └── stubs#3.0.0
│ │ └── through2#2.0.5
│ ├── adm-zip#0.4.13
│ ├─┬ ajv#6.10.0
│ │ ├── fast-deep-equal#2.0.1
│ │ ├── fast-json-stable-stringify#2.0.0
│ │ ├── json-schema-traverse#0.4.1
│ │ └─┬ uri-js#4.2.2
│ │ └── punycode#2.1.1
│ ├─┬ body-parser#1.18.3
│ │ ├── bytes#3.0.0
│ │ ├── content-type#1.0.4
│ │ ├─┬ debug#2.6.9
│ │ │ └── ms#2.0.0
│ │ ├── depd#1.1.2
│ │ ├─┬ http-errors#1.6.3
│ │ │ └── statuses#1.5.0
│ │ ├─┬ iconv-lite#0.4.23
│ │ │ └── safer-buffer#2.1.2
│ │ ├─┬ raw-body#2.3.3
│ │ │ └── unpipe#1.0.0
│ │ └─┬ type-is#1.6.16
│ │ └── media-typer#0.3.0
│ ├─┬ cli-table2#0.2.0
│ │ └── lodash#3.10.1
│ ├── colors#1.1.2
│ ├─┬ configstore#3.1.2
│ │ ├─┬ dot-prop#4.2.0
│ │ │ └── is-obj#1.0.1
│ │ ├─┬ make-dir#1.3.0
│ │ │ └── pify#3.0.0
│ │ ├─┬ unique-string#1.0.0
│ │ │ └── crypto-random-string#1.0.0
│ │ └─┬ write-file-atomic#2.4.2
│ │ └── signal-exit#3.0.2
│ ├─┬ express#4.16.4
│ │ ├─┬ accepts#1.3.5
│ │ │ └── negotiator#0.6.1
│ │ ├── array-flatten#1.1.1
│ │ ├── content-disposition#0.5.2
│ │ ├── cookie#0.3.1
│ │ ├── cookie-signature#1.0.6
│ │ ├─┬ debug#2.6.9
│ │ │ └── ms#2.0.0
│ │ ├── encodeurl#1.0.2
│ │ ├── escape-html#1.0.3
│ │ ├── etag#1.8.1
│ │ ├─┬ finalhandler#1.1.1
│ │ │ ├─┬ debug#2.6.9
│ │ │ │ └── ms#2.0.0
│ │ │ └── statuses#1.4.0
│ │ ├── fresh#0.5.2
│ │ ├── merge-descriptors#1.0.1
│ │ ├── methods#1.1.2
│ │ ├── parseurl#1.3.2
│ │ ├── path-to-regexp#0.1.7
│ │ ├─┬ proxy-addr#2.0.4
│ │ │ ├── forwarded#0.1.2
│ │ │ └── ipaddr.js#1.8.0
│ │ ├── range-parser#1.2.0
│ │ ├─┬ send#0.16.2
│ │ │ ├── debug#2.6.9
│ │ │ ├── mime#1.4.1
│ │ │ ├── ms#2.0.0
│ │ │ └── statuses#1.4.0
│ │ ├── serve-static#1.13.2
│ │ ├── setprototypeof#1.1.0
│ │ ├── statuses#1.4.0
│ │ ├── utils-merge#1.0.1
│ │ └── vary#1.1.2
│ ├─┬ googleapis#23.0.2
│ │ ├── async#2.6.0
│ │ ├─┬ google-auth-library#0.12.0
│ │ │ ├─┬ gtoken#1.2.3
│ │ │ │ ├─┬ google-p12-pem#0.1.2
│ │ │ │ │ └── node-forge#0.7.6
│ │ │ │ └── mime#1.6.0
│ │ │ └── lodash.merge#4.6.1
│ │ └── string-template#1.0.0
│ ├─┬ got#8.3.2
│ │ ├── #sindresorhus/is#0.7.0
│ │ ├─┬ cacheable-request#2.1.4
│ │ │ ├── clone-response#1.0.2
│ │ │ ├── http-cache-semantics#3.8.1
│ │ │ ├─┬ keyv#3.0.0
│ │ │ │ └── json-buffer#3.0.0
│ │ │ ├── lowercase-keys#1.0.0
│ │ │ ├─┬ normalize-url#2.0.1
│ │ │ │ ├─┬ query-string#5.1.1
│ │ │ │ │ ├── decode-uri-component#0.2.0
│ │ │ │ │ └── strict-uri-encode#1.1.0
│ │ │ │ └─┬ sort-keys#2.0.0
│ │ │ │ └── is-plain-obj#1.1.0
│ │ │ └── responselike#1.0.2
│ │ ├── decompress-response#3.3.0
│ │ ├── duplexer3#0.1.4
│ │ ├── get-stream#3.0.0
│ │ ├─┬ into-stream#3.1.0
│ │ │ ├── from2#2.3.0
│ │ │ └── p-is-promise#1.1.0
│ │ ├── is-retry-allowed#1.1.0
│ │ ├─┬ isurl#1.0.0
│ │ │ ├─┬ has-to-string-tag-x#1.4.1
│ │ │ │ └── has-symbol-support-x#1.4.2
│ │ │ └── is-object#1.0.1
│ │ ├── lowercase-keys#1.0.1
│ │ ├── mimic-response#1.0.1
│ │ ├── p-cancelable#0.4.1
│ │ ├─┬ p-timeout#2.0.1
│ │ │ └── p-finally#1.0.0
│ │ ├── pify#3.0.0
│ │ ├── timed-out#4.0.1
│ │ ├─┬ url-parse-lax#3.0.0
│ │ │ └── prepend-http#2.0.0
│ │ └── url-to-options#1.0.1
│ ├─┬ http-proxy#1.16.2
│ │ ├── eventemitter3#1.2.0
│ │ └── requires-port#1.0.0
│ ├── lodash#4.17.5
│ ├─┬ prompt#1.0.0
│ │ ├── pkginfo#0.4.1
│ │ ├─┬ read#1.0.7
│ │ │ └── mute-stream#0.0.8
│ │ ├── revalidator#0.1.8
│ │ ├─┬ utile#0.3.0
│ │ │ ├── async#0.9.2
│ │ │ ├── deep-equal#0.2.2
│ │ │ ├── i#0.3.6
│ │ │ └── ncp#1.0.1
│ │ └─┬ winston#2.1.1
│ │ ├── async#1.0.0
│ │ ├── colors#1.0.3
│ │ └── pkginfo#0.3.1
│ ├── rimraf#2.6.2
│ ├── semver#5.5.0
│ ├─┬ serializerr#1.0.3
│ │ └── protochain#1.0.5
│ ├── uuid#3.2.1
│ ├─┬ winston#2.4.0
│ │ ├── async#1.0.0
│ │ └── colors#1.0.3
│ └─┬ yargs#11.0.0
│ ├─┬ cliui#4.1.0
│ │ ├─┬ string-width#2.1.1
│ │ │ └── is-fullwidth-code-point#2.0.0
│ │ ├─┬ strip-ansi#4.0.0
│ │ │ └── ansi-regex#3.0.0
│ │ └── wrap-ansi#2.1.0
│ ├── decamelize#1.2.0
│ ├─┬ find-up#2.1.0
│ │ └─┬ locate-path#2.0.0
│ │ ├─┬ p-locate#2.0.0
│ │ │ └─┬ p-limit#1.3.0
│ │ │ └── p-try#1.0.0
│ │ └── path-exists#3.0.0
│ ├── get-caller-file#1.0.3
│ ├─┬ os-locale#2.1.0
│ │ ├─┬ execa#0.7.0
│ │ │ ├── cross-spawn#5.1.0
│ │ │ ├── is-stream#1.1.0
│ │ │ ├── npm-run-path#2.0.2
│ │ │ └── strip-eof#1.0.0
│ │ ├─┬ lcid#1.0.0
│ │ │ └── invert-kv#1.0.0
│ │ └─┬ mem#1.1.0
│ │ └── mimic-fn#1.2.0
│ ├── require-directory#2.1.1
│ ├── require-main-filename#1.0.1
│ ├── set-blocking#2.0.0
│ ├─┬ string-width#2.1.1
│ │ ├── is-fullwidth-code-point#2.0.0
│ │ └─┬ strip-ansi#4.0.0
│ │ └── ansi-regex#3.0.0
│ ├── which-module#2.0.0
│ ├── y18n#3.2.1
│ └── yargs-parser#9.0.2
├─┬ archiver#2.1.1
│ ├─┬ archiver-utils#1.3.0
│ │ ├── lazystream#1.0.0
│ │ └─┬ normalize-path#2.1.1
│ │ └── remove-trailing-separator#1.1.0
│ ├── async#2.6.2
│ ├── buffer-crc32#0.2.13
│ ├─┬ readable-stream#2.3.6
│ │ ├── core-util-is#1.0.2
│ │ ├── isarray#1.0.0
│ │ ├── process-nextick-args#2.0.0
│ │ ├── string_decoder#1.1.1
│ │ └── util-deprecate#1.0.2
│ ├─┬ tar-stream#1.6.2
│ │ ├── bl#1.2.2
│ │ ├─┬ buffer-alloc#1.2.0
│ │ │ ├── buffer-alloc-unsafe#1.1.0
│ │ │ └── buffer-fill#1.0.0
│ │ ├── end-of-stream#1.4.1
│ │ ├── fs-constants#1.0.0
│ │ ├── to-buffer#1.1.1
│ │ └── xtend#4.0.1
│ └─┬ zip-stream#1.2.0
│ └─┬ compress-commons#1.2.2
│ └─┬ crc32-stream#2.0.0
│ └─┬ crc#3.8.0
│ └─┬ buffer#5.2.1
│ ├── base64-js#1.3.0
│ └── ieee754#1.1.13
├─┬ cjson#0.3.3
│ └─┬ json-parse-helpfulerror#1.0.3
│ └── jju#1.4.0
├─┬ cli-color#1.4.0
│ ├── ansi-regex#2.1.1
│ ├── d#1.0.0
│ ├─┬ es5-ext#0.10.49
│ │ └── next-tick#1.0.0
│ ├── es6-iterator#2.0.3
│ ├─┬ memoizee#0.4.14
│ │ ├── es6-weak-map#2.0.2
│ │ ├── is-promise#2.1.0
│ │ └── lru-queue#0.1.0
│ └── timers-ext#0.1.7
├─┬ cli-table#0.3.1
│ └── colors#1.0.3
├── commander#2.20.0
├─┬ configstore#1.4.0
│ ├── graceful-fs#4.1.15
│ ├─┬ mkdirp#0.5.1
│ │ └── minimist#0.0.8
│ ├── object-assign#4.1.1
│ ├── os-tmpdir#1.0.2
│ ├── osenv#0.1.5
│ ├── uuid#2.0.3
│ ├─┬ write-file-atomic#1.3.4
│ │ ├── imurmurhash#0.1.4
│ │ └── slide#1.1.6
│ └── xdg-basedir#2.0.0
├─┬ cross-env#5.2.0
│ ├─┬ cross-spawn#6.0.5
│ │ ├── nice-try#1.0.5
│ │ ├── path-key#2.0.1
│ │ └─┬ shebang-command#1.2.0
│ │ └── shebang-regex#1.0.0
│ └── is-windows#1.0.2
├─┬ cross-spawn#4.0.2
│ ├─┬ lru-cache#4.1.5
│ │ ├── pseudomap#1.0.2
│ │ └── yallist#2.1.2
│ └─┬ which#1.3.1
│ └── isexe#2.0.0
├─┬ csv-streamify#3.0.4
│ └─┬ through2#2.0.1
│ └─┬ readable-stream#2.0.6
│ ├── process-nextick-args#1.0.7
│ └── string_decoder#0.10.31
├── didyoumean#1.2.1
├─┬ es6-set#0.1.5
│ ├── es6-symbol#3.1.1
│ └── event-emitter#0.3.5
├── exit-code#1.0.2
├── filesize#3.6.1
├─┬ firebase#2.4.2
│ └─┬ faye-websocket#0.9.3
│ └─┬ websocket-driver#0.5.2
│ └── websocket-extensions#0.1.1
├─┬ fs-extra#0.23.1
│ ├── jsonfile#2.4.0
│ └── path-is-absolute#1.0.1
├─┬ glob#7.1.3
│ ├── fs.realpath#1.0.0
│ ├─┬ inflight#1.0.6
│ │ └── wrappy#1.0.2
│ ├── inherits#2.0.3
│ └── once#1.4.0
├─┬ google-auto-auth#0.7.2
│ ├─┬ gcp-metadata#0.3.1
│ │ └── retry-request#3.3.2
│ └─┬ google-auth-library#0.10.0
│ ├─┬ gtoken#1.2.3
│ │ ├─┬ google-p12-pem#0.1.2
│ │ │ └── node-forge#0.7.6
│ │ └── mime#1.6.0
│ └── lodash.noop#3.0.1
├─┬ inquirer#0.12.0
│ ├── ansi-escapes#1.4.0
│ ├─┬ chalk#1.1.3
│ │ ├── ansi-styles#2.2.1
│ │ ├── escape-string-regexp#1.0.5
│ │ ├── has-ansi#2.0.0
│ │ └── supports-color#2.0.0
│ ├─┬ cli-cursor#1.0.2
│ │ └─┬ restore-cursor#1.0.1
│ │ ├── exit-hook#1.1.1
│ │ └── onetime#1.1.0
│ ├── cli-width#2.2.0
│ ├── figures#1.7.0
│ ├─┬ readline2#1.0.1
│ │ ├── code-point-at#1.1.0
│ │ ├─┬ is-fullwidth-code-point#1.0.0
│ │ │ └── number-is-nan#1.0.1
│ │ └── mute-stream#0.0.5
│ ├── run-async#0.1.0
│ ├── rx-lite#3.1.2
│ ├── string-width#1.0.2
│ └── strip-ansi#3.0.1
├── is#3.3.0
├── jsonschema#1.2.4
├─┬ JSONStream#1.3.5
│ ├── jsonparse#1.3.1
│ └── through#2.3.8
├─┬ jsonwebtoken#8.5.1
│ ├─┬ jws#3.2.2
│ │ └─┬ jwa#1.4.1
│ │ ├── buffer-equal-constant-time#1.0.1
│ │ └── ecdsa-sig-formatter#1.0.11
│ ├── lodash.includes#4.3.0
│ ├── lodash.isboolean#3.0.3
│ ├── lodash.isinteger#4.0.4
│ ├── lodash.isnumber#3.0.3
│ ├── lodash.isplainobject#4.0.6
│ ├── lodash.isstring#4.0.1
│ ├── lodash.once#4.1.1
│ └── ms#2.1.1
├── lodash#4.17.11
├─┬ minimatch#3.0.4
│ └─┬ brace-expansion#1.1.11
│ ├── balanced-match#1.0.0
│ └── concat-map#0.0.1
├─┬ opn#5.5.0
│ └── is-wsl#1.1.0
├─┬ ora#0.2.3
│ └── cli-spinners#0.1.2
├─┬ portfinder#1.0.20
│ ├── async#1.5.2
│ └─┬ debug#2.6.9
│ └── ms#2.0.0
├── progress#2.0.3
├─┬ request#2.88.0
│ ├── aws-sign2#0.7.0
│ ├── aws4#1.8.0
│ ├── caseless#0.12.0
│ ├─┬ combined-stream#1.0.7
│ │ └── delayed-stream#1.0.0
│ ├── extend#3.0.2
│ ├── forever-agent#0.6.1
│ ├─┬ form-data#2.3.3
│ │ └── asynckit#0.4.0
│ ├─┬ har-validator#5.1.3
│ │ └── har-schema#2.0.0
│ ├─┬ http-signature#1.2.0
│ │ ├── assert-plus#1.0.0
│ │ ├─┬ jsprim#1.4.1
│ │ │ ├── extsprintf#1.3.0
│ │ │ ├── json-schema#0.2.3
│ │ │ └── verror#1.10.0
│ │ └─┬ sshpk#1.16.1
│ │ ├── asn1#0.2.4
│ │ ├── bcrypt-pbkdf#1.0.2
│ │ ├── dashdash#1.14.1
│ │ ├── ecc-jsbn#0.1.2
│ │ ├── getpass#0.1.7
│ │ ├── jsbn#0.1.1
│ │ └── tweetnacl#0.14.5
│ ├── is-typedarray#1.0.0
│ ├── isstream#0.1.2
│ ├── json-stringify-safe#5.0.1
│ ├─┬ mime-types#2.1.22
│ │ └── mime-db#1.38.0
│ ├── oauth-sign#0.9.0
│ ├── performance-now#2.1.0
│ ├── qs#6.5.2
│ ├── safe-buffer#5.1.2
│ ├─┬ tough-cookie#2.4.3
│ │ ├── psl#1.1.31
│ │ └── punycode#1.4.1
│ └── tunnel-agent#0.6.0
├── semver#5.7.0
├─┬ superstatic#6.0.4
│ ├── as-array#2.0.0
│ ├── async#1.5.2
│ ├── basic-auth-connect#1.0.0
│ ├── char-spinner#1.0.1
│ ├── compare-semver#1.1.0
│ ├─┬ compression#1.7.4
│ │ └─┬ debug#2.6.9
│ │ └── ms#2.0.0
│ ├─┬ connect#3.6.6
│ │ ├─┬ debug#2.6.9
│ │ │ └── ms#2.0.0
│ │ └─┬ finalhandler#1.1.0
│ │ └── statuses#1.3.1
│ ├─┬ connect-query#1.0.0
│ │ └── qs#6.4.0
│ ├── destroy#1.0.4
│ ├─┬ fast-url-parser#1.1.3
│ │ └── punycode#1.4.1
│ ├─┬ fs-extra#0.30.0
│ │ └── klaw#1.3.1
│ ├─┬ glob-slasher#1.0.1
│ │ ├── glob-slash#1.0.0
│ │ ├─┬ lodash.isobject#2.4.1
│ │ │ └── lodash._objecttypes#2.4.1
│ │ └── toxic#1.0.1
│ ├── home-dir#1.0.0
│ ├── is-url#1.2.4
│ ├─┬ join-path#1.1.1
│ │ ├── url-join#0.0.1
│ │ └── valid-url#1.0.9
│ ├─┬ morgan#1.9.1
│ │ ├── basic-auth#2.0.1
│ │ └─┬ debug#2.6.9
│ │ └── ms#2.0.0
│ ├─┬ nash#3.0.0
│ │ ├── async#1.5.2
│ │ ├─┬ flat-arguments#1.0.2
│ │ │ ├─┬ as-array#1.0.0
│ │ │ │ ├── lodash.isarguments#2.4.1
│ │ │ │ ├── lodash.isobject#2.4.1
│ │ │ │ └─┬ lodash.values#2.4.1
│ │ │ │ └─┬ lodash.keys#2.4.1
│ │ │ │ ├── lodash._isnative#2.4.1
│ │ │ │ └── lodash._shimkeys#2.4.1
│ │ │ ├── lodash.isarguments#3.1.0
│ │ │ └── lodash.isobject#3.0.2
│ │ └── minimist#1.2.0
│ ├─┬ on-finished#2.3.0
│ │ └── ee-first#1.1.1
│ ├── on-headers#1.0.2
│ ├─┬ path-to-regexp#1.7.0
│ │ └── isarray#0.0.1
│ ├─┬ router#1.3.3
│ │ ├── array-flatten#2.1.1
│ │ └─┬ debug#2.6.9
│ │ └── ms#2.0.0
│ ├── rsvp#3.6.2
│ ├── string-length#1.0.1
│ └── try-require#1.2.1
├─┬ tar#4.4.8
│ ├── chownr#1.1.1
│ ├── fs-minipass#1.2.5
│ ├─┬ minipass#2.3.5
│ │ └── yallist#3.0.3
│ ├── minizlib#1.2.1
│ └── yallist#3.0.3
├── tmp#0.0.33
├─┬ universal-analytics#0.4.20
│ └── debug#3.2.6
├─┬ update-notifier#2.5.0
│ ├─┬ boxen#1.3.0
│ │ ├─┬ ansi-align#2.0.0
│ │ │ └─┬ string-width#2.1.1
│ │ │ ├── is-fullwidth-code-point#2.0.0
│ │ │ └─┬ strip-ansi#4.0.0
│ │ │ └── ansi-regex#3.0.0
│ │ ├── camelcase#4.1.0
│ │ ├─┬ chalk#2.4.2
│ │ │ ├── ansi-styles#3.2.1
│ │ │ └── supports-color#5.5.0
│ │ ├── cli-boxes#1.0.0
│ │ ├─┬ string-width#2.1.1
│ │ │ ├── is-fullwidth-code-point#2.0.0
│ │ │ └─┬ strip-ansi#4.0.0
│ │ │ └── ansi-regex#3.0.0
│ │ ├── term-size#1.2.0
│ │ └─┬ widest-line#2.0.1
│ │ └─┬ string-width#2.1.1
│ │ ├── is-fullwidth-code-point#2.0.0
│ │ └─┬ strip-ansi#4.0.0
│ │ └── ansi-regex#3.0.0
│ ├─┬ chalk#2.4.2
│ │ ├─┬ ansi-styles#3.2.1
│ │ │ └─┬ color-convert#1.9.3
│ │ │ └── color-name#1.1.3
│ │ └─┬ supports-color#5.5.0
│ │ └── has-flag#3.0.0
│ ├── configstore#3.1.2
│ ├── import-lazy#2.1.0
│ ├─┬ is-ci#1.2.1
│ │ └── ci-info#1.6.0
│ ├─┬ is-installed-globally#0.1.0
│ │ ├─┬ global-dirs#0.1.1
│ │ │ └── ini#1.3.5
│ │ └─┬ is-path-inside#1.0.1
│ │ └── path-is-inside#1.0.2
│ ├── is-npm#1.0.0
│ ├─┬ latest-version#3.1.0
│ │ └─┬ package-json#4.0.1
│ │ ├─┬ got#6.7.1
│ │ │ ├── is-redirect#1.0.0
│ │ │ ├── unzip-response#2.0.1
│ │ │ └─┬ url-parse-lax#1.0.0
│ │ │ └── prepend-http#1.0.4
│ │ ├─┬ registry-auth-token#3.4.0
│ │ │ └─┬ rc#1.2.8
│ │ │ ├── deep-extend#0.6.0
│ │ │ ├── minimist#1.2.0
│ │ │ └── strip-json-comments#2.0.1
│ │ └── registry-url#3.1.0
│ ├── semver-diff#2.1.0
│ └── xdg-basedir#3.0.0
├─┬ user-home#2.0.0
│ └── os-homedir#1.0.2
├── uuid#3.3.2
└─┬ winston#1.1.2
├── async#1.0.0
├── colors#1.0.3
├── cycle#1.0.3
├── eyes#0.1.8
├── pkginfo#0.3.1
└── stack-trace#0.0.10
Might be success in install! BUT
Issue is When I'm trying to run "firebase login" any other "firebase" command that It give me error like
-bash: firebase: command not found
Any setup I required? Guide me.

Node how to make dependency analysis and remove unused module dependecies

My node modules is a simple module that have few dependencies and makes use mostly of built-in modules.
Given that, my module has a dependency of a module that declares those 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 will end up in the 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 is nothing less than
node_modules admin$ du -d0 -h
40M .
40Meg, what? At first look I was a bit surprised of that, since the list of dependencies seems to be too much. I would expect something like that from the Makefile of low level C library like Boost, libcrypto, libxml, libssl or whatever C/C++ library used by an OS, but, hey wait a moment, this is just a simple application using built-in library and just one external dependency. So, what's going on here?
Being serious, my question is: is there a way to make a static analysis of node packages installed via npm? And then to prune unused dependencies?
For sure, my module will not use at runtime most of the function declarations in the private scope of each of those modules, defined in this tree.

TopoJson Install Error?

I am trying to install topojson with node.js and I am getting a frustrating error. I reinstalled the latest version of node.js (4.4.5) and running the standard install method. It seems like everything installs correctly. Then I try to do something with topojson and it is clear that not everything is installed correctly--illegal operation on directory. So it seems like it is installed but that I am having permission problems perhaps? Can anyone help with this?
C:\>npm install -g topojson
C:\Users\Seth\AppData\Roaming\npm\topojson-geojson -> C:\Users\Seth\AppData\Roaming\npm\node_modules\topojson\bin\topojson-geojson
C:\Users\Seth\AppData\Roaming\npm\topojson -> C:\Users\Seth\AppData\Roaming\npm\node_modules\topojson\bin\topojson
C:\Users\Seth\AppData\Roaming\npm\topojson-merge -> C:\Users\Seth\AppData\Roaming\npm\node_modules\topojson\bin\topojson-merge
C:\Users\Seth\AppData\Roaming\npm\topojson-group -> C:\Users\Seth\AppData\Roaming\npm\node_modules\topojson\bin\topojson-group
C:\Users\Seth\AppData\Roaming\npm\topojson-svg -> C:\Users\Seth\AppData\Roaming\npm\node_modules\topojson\bin\topojson-svg
C:\Users\Seth\AppData\Roaming\npm
└─┬ topojson#1.6.26
├── d3#3.5.17
├─┬ d3-geo-projection#0.2.16
│ └─┬ brfs#1.4.3
│ ├─┬ quote-stream#1.0.2
│ │ ├── buffer-equal#0.0.1
│ │ └── minimist#1.2.0
│ ├── resolve#1.1.7
│ ├─┬ static-module#1.3.1
│ │ ├─┬ concat-stream#1.4.10
│ │ │ ├── inherits#2.0.1
│ │ │ ├─┬ readable-stream#1.1.14
│ │ │ │ └── isarray#0.0.1
│ │ │ └── typedarray#0.0.6
│ │ ├─┬ duplexer2#0.0.2
│ │ │ └─┬ readable-stream#1.1.14
│ │ │ └── isarray#0.0.1
│ │ ├─┬ escodegen#1.3.3
│ │ │ ├── esprima#1.1.1
│ │ │ ├── estraverse#1.5.1
│ │ │ ├── esutils#1.0.0
│ │ │ └─┬ source-map#0.1.43
│ │ │ └── amdefine#1.0.0
│ │ ├─┬ falafel#1.2.0
│ │ │ ├── acorn#1.2.2
│ │ │ ├── foreach#2.0.5
│ │ │ ├── isarray#0.0.1
│ │ │ └── object-keys#1.0.9
│ │ ├─┬ has#1.0.1
│ │ │ └── function-bind#1.1.0
│ │ ├── object-inspect#0.4.0
│ │ ├─┬ quote-stream#0.0.0
│ │ │ └── minimist#0.0.8
│ │ ├─┬ readable-stream#1.0.34
│ │ │ ├── core-util-is#1.0.2
│ │ │ ├── isarray#0.0.1
│ │ │ └── string_decoder#0.10.31
│ │ ├── shallow-copy#0.0.1
│ │ ├─┬ static-eval#0.2.4
│ │ │ └─┬ escodegen#0.0.28
│ │ │ ├── esprima#1.0.4
│ │ │ └── estraverse#1.3.2
│ │ └─┬ through2#0.4.2
│ │ └─┬ xtend#2.1.2
│ │ └── object-keys#0.4.0
│ └─┬ through2#2.0.1
│ ├─┬ readable-stream#2.0.6
│ │ ├── isarray#1.0.0
│ │ ├── process-nextick-args#1.0.7
│ │ └── util-deprecate#1.0.2
│ └── xtend#4.0.1
├── d3-queue#2.0.3
├─┬ optimist#0.3.7
│ └── wordwrap#0.0.3
├── rw#1.3.2
└─┬ shapefile#0.3.1
├── d3-queue#1.2.3
└── iconv-lite#0.2.11
C:\>topojson -v
C:\Users\Seth\AppData\Roaming\npm\node_modules\topojson\bin\topojson:259
if (error) throw error;
^
Error: EISDIR: illegal operation on a directory, read
at Error (native)
at Object.fs.readSync (fs.js:603:19)
at module.exports (C:\Users\Seth\AppData\Roaming\npm\node_modules\topojson\node_modules\rw\lib\rw\read-file-sync.js:14:28)
at Object.readFileSync (C:\Users\Seth\AppData\Roaming\npm\node_modules\topojson\node_modules\rw\lib\rw\dash.js:7:19)
at inputJson (C:\Users\Seth\AppData\Roaming\npm\node_modules\topojson\bin\topojson:245:30)
at start (C:\Users\Seth\AppData\Roaming\npm\node_modules\topojson\node_modules\d3-queue\build\d3-queue.js:68:13)
at poke (C:\Users\Seth\AppData\Roaming\npm\node_modules\topojson\node_modules\d3-queue\build\d3-queue.js:56:26)
at Queue.queue.defer (C:\Users\Seth\AppData\Roaming\npm\node_modules\topojson\node_modules\d3-queue\build\d3-queue.js:34:7)
at C:\Users\Seth\AppData\Roaming\npm\node_modules\topojson\bin\topojson:196:5
at Array.forEach (native)

How to easily verify correct npm dependencies installed?

How can I know when to prompt user to run npm install if there are any unmet package.json dependencies?
I would like to do this, because if any require() fails, the user gets a poor error message:
module.js:340
throw err;
^
Error: Cannot find module 'nopt'
I've previously tried to just check for the existence of a node_modules directory, but this only works effectively for fresh git clones. I've also tried just requiring npm and running npm install as part of load, but that is very heavy weight.
I'm hoping there is a lighter weight library out there that just parses package.json and makes sure node_modules contents satisfy the requirements.
One idea was to use process.on('uncaughtException') to catch only module import errors, but looking to see if there is a "standard" solution first.
You can use yarn and do yarn check --verify-tree (you can continue using npm for everything else)
Found this today. Not sure if your still need this.
https://www.npmjs.com/package/check-dependencies
npm install check-dependencies --save-dev
Install this package and save to your package.json.
require('check-dependencies')(config, callback);
config is the following object, which is then passed to the callback.
{
status: number, // 0 if successful, 1 otherwise
depsWereOk: boolean, // true if dependencies were already satisfied
log: array, // array of logged messages
error: array, // array of logged errors
}
npm ls will report missing packages when run from the project folder.
npm-ls documentation
This might have issues if you're using git dependencies, though. (Thanks #gman).
Another solution
function dependenciesNeedUpdating() {
const childProcess = require('child_process');
const result = JSON.parse(childProcess.execSync('npm install --dry-run --json').toString());
return result.added.length > 0 || result.updated.length > 0 || result.removed > 0;
}
Call it like this
if (dependenciesNeedUpdating()) {
console.error('dependencies need updating. Please run `npm install`');
process.exit(1);
}
If you want to install this as a dependency 🤣 its 5 lines are in an npm package here. It adds a ld-check-dependencies command (the 4 usage lines above) so you can use it directly in your npm scripts. Example:
"scripts": {
"build": "ld-check-dependencies && rollup ..."
},
Rationale:
I'm learning that dependencies are a huge liability and should be avoided any time there is a simpler solution.
For example here's is the ridiculous dependency tree for check-dependencies
└─┬ check-dependencies#1.1.0
├─┬ bower-config#1.4.3
│ ├── graceful-fs#4.2.4
│ ├── minimist#0.2.1 extraneous
│ ├── mout#1.2.2
│ ├─┬ osenv#0.1.5
│ │ ├── os-homedir#1.0.2
│ │ └── os-tmpdir#1.0.2
│ ├─┬ untildify#2.1.0
│ │ └── os-homedir#1.0.2 deduped
│ └── wordwrap#0.0.3
├─┬ chalk#2.4.2
│ ├─┬ ansi-styles#3.2.1
│ │ └─┬ color-convert#1.9.3
│ │ └── color-name#1.1.3
│ ├── escape-string-regexp#1.0.5
│ └─┬ supports-color#5.5.0
│ └── has-flag#3.0.0
├─┬ findup-sync#2.0.0
│ ├── detect-file#1.0.0
│ ├─┬ is-glob#3.1.0
│ │ └── is-extglob#2.1.1
│ ├─┬ micromatch#3.1.10
│ │ ├── arr-diff#4.0.0
│ │ ├── array-unique#0.3.2
│ │ ├─┬ braces#2.3.2
│ │ │ ├── arr-flatten#1.1.0
│ │ │ ├── array-unique#0.3.2 deduped
│ │ │ ├── extend-shallow#2.0.1 extraneous
│ │ │ ├─┬ fill-range#4.0.0
│ │ │ │ ├── extend-shallow#2.0.1 extraneous
│ │ │ │ ├─┬ is-number#3.0.0
│ │ │ │ │ └── kind-of#3.2.2 extraneous
│ │ │ │ ├── repeat-string#1.6.1
│ │ │ │ └─┬ to-regex-range#2.1.1
│ │ │ │ ├── is-number#3.0.0 deduped
│ │ │ │ └── repeat-string#1.6.1 deduped
│ │ │ ├── isobject#3.0.1
│ │ │ ├── repeat-element#1.1.3
│ │ │ ├── snapdragon#0.8.2 deduped
│ │ │ ├─┬ snapdragon-node#2.1.1
│ │ │ │ ├── define-property#1.0.0 extraneous
│ │ │ │ ├── isobject#3.0.1 deduped
│ │ │ │ └─┬ snapdragon-util#3.0.1
│ │ │ │ └── kind-of#3.2.2 extraneous
│ │ │ ├─┬ split-string#3.1.0
│ │ │ │ └── extend-shallow#3.0.2 deduped
│ │ │ └── to-regex#3.0.2 deduped
│ │ ├─┬ define-property#2.0.2
│ │ │ ├── is-descriptor#1.0.2 extraneous
│ │ │ └── isobject#3.0.1 deduped
│ │ ├─┬ extend-shallow#3.0.2
│ │ │ ├── assign-symbols#1.0.0
│ │ │ └── is-extendable#1.0.1 extraneous
│ │ ├─┬ extglob#2.0.4
│ │ │ ├── array-unique#0.3.2 deduped
│ │ │ ├── define-property#1.0.0 extraneous
│ │ │ ├─┬ expand-brackets#2.1.4
│ │ │ │ ├── debug#2.6.9 deduped
│ │ │ │ ├── define-property#0.2.5 extraneous
│ │ │ │ ├── extend-shallow#2.0.1 extraneous
│ │ │ │ ├── posix-character-classes#0.1.1
│ │ │ │ ├── regex-not#1.0.2 deduped
│ │ │ │ ├── snapdragon#0.8.2 deduped
│ │ │ │ └── to-regex#3.0.2 deduped
│ │ │ ├── extend-shallow#2.0.1 extraneous
│ │ │ ├── fragment-cache#0.2.1 deduped
│ │ │ ├── regex-not#1.0.2 deduped
│ │ │ ├── snapdragon#0.8.2 deduped
│ │ │ └── to-regex#3.0.2 deduped
│ │ ├─┬ fragment-cache#0.2.1
│ │ │ └── map-cache#0.2.2
│ │ ├── kind-of#6.0.3
│ │ ├─┬ nanomatch#1.2.13
│ │ │ ├── arr-diff#4.0.0 deduped
│ │ │ ├── array-unique#0.3.2 deduped
│ │ │ ├── define-property#2.0.2 deduped
│ │ │ ├── extend-shallow#3.0.2 deduped
│ │ │ ├── fragment-cache#0.2.1 deduped
│ │ │ ├── is-windows#1.0.2
│ │ │ ├── kind-of#6.0.3 deduped
│ │ │ ├── object.pick#1.3.0 deduped
│ │ │ ├── regex-not#1.0.2 deduped
│ │ │ ├── snapdragon#0.8.2 deduped
│ │ │ └── to-regex#3.0.2 deduped
│ │ ├─┬ object.pick#1.3.0
│ │ │ └── isobject#3.0.1 deduped
│ │ ├─┬ regex-not#1.0.2
│ │ │ ├── extend-shallow#3.0.2 deduped
│ │ │ └─┬ safe-regex#1.1.0
│ │ │ └── ret#0.1.15
│ │ ├─┬ snapdragon#0.8.2
│ │ │ ├─┬ base#0.11.2
│ │ │ │ ├─┬ cache-base#1.0.1
│ │ │ │ │ ├─┬ collection-visit#1.0.0
│ │ │ │ │ │ ├─┬ map-visit#1.0.0
│ │ │ │ │ │ │ └── object-visit#1.0.1 deduped
│ │ │ │ │ │ └─┬ object-visit#1.0.1
│ │ │ │ │ │ └── isobject#3.0.1 deduped
│ │ │ │ │ ├── component-emitter#1.3.0 deduped
│ │ │ │ │ ├── get-value#2.0.6
│ │ │ │ │ ├─┬ has-value#1.0.0
│ │ │ │ │ │ ├── get-value#2.0.6 deduped
│ │ │ │ │ │ ├─┬ has-values#1.0.0
│ │ │ │ │ │ │ ├── is-number#3.0.0 deduped
│ │ │ │ │ │ │ └── kind-of#4.0.0 extraneous
│ │ │ │ │ │ └── isobject#3.0.1 deduped
│ │ │ │ │ ├── isobject#3.0.1 deduped
│ │ │ │ │ ├─┬ set-value#2.0.1
│ │ │ │ │ │ ├── extend-shallow#2.0.1 extraneous
│ │ │ │ │ │ ├── is-extendable#0.1.1
│ │ │ │ │ │ ├─┬ is-plain-object#2.0.4
│ │ │ │ │ │ │ └── isobject#3.0.1 deduped
│ │ │ │ │ │ └── split-string#3.1.0 deduped
│ │ │ │ │ ├─┬ to-object-path#0.3.0
│ │ │ │ │ │ └── kind-of#3.2.2 extraneous
│ │ │ │ │ ├─┬ union-value#1.0.1
│ │ │ │ │ │ ├── arr-union#3.1.0 deduped
│ │ │ │ │ │ ├── get-value#2.0.6 deduped
│ │ │ │ │ │ ├── is-extendable#0.1.1 deduped
│ │ │ │ │ │ └── set-value#2.0.1 deduped
│ │ │ │ │ └─┬ unset-value#1.0.0
│ │ │ │ │ ├── has-value#0.3.1 extraneous
│ │ │ │ │ └── isobject#3.0.1 deduped
│ │ │ │ ├─┬ class-utils#0.3.6
│ │ │ │ │ ├── arr-union#3.1.0
│ │ │ │ │ ├── define-property#0.2.5 extraneous
│ │ │ │ │ ├── isobject#3.0.1 deduped
│ │ │ │ │ └─┬ static-extend#0.1.2
│ │ │ │ │ ├── define-property#0.2.5 extraneous
│ │ │ │ │ └─┬ object-copy#0.1.0
│ │ │ │ │ ├── copy-descriptor#0.1.1
│ │ │ │ │ ├── define-property#0.2.5 extraneous
│ │ │ │ │ └── kind-of#3.2.2 extraneous
│ │ │ │ ├── component-emitter#1.3.0
│ │ │ │ ├── define-property#1.0.0 extraneous
│ │ │ │ ├── isobject#3.0.1 deduped
│ │ │ │ ├─┬ mixin-deep#1.3.2
│ │ │ │ │ ├── for-in#1.0.2
│ │ │ │ │ └── is-extendable#1.0.1 extraneous
│ │ │ │ └── pascalcase#0.1.1
│ │ │ ├─┬ debug#2.6.9
│ │ │ │ └── ms#2.0.0
│ │ │ ├── define-property#0.2.5 extraneous
│ │ │ ├── extend-shallow#2.0.1 extraneous
│ │ │ ├── map-cache#0.2.2 deduped
│ │ │ ├── source-map#0.5.7
│ │ │ ├─┬ source-map-resolve#0.5.3
│ │ │ │ ├── atob#2.1.2
│ │ │ │ ├── decode-uri-component#0.2.0
│ │ │ │ ├── resolve-url#0.2.1
│ │ │ │ ├── source-map-url#0.4.0
│ │ │ │ └── urix#0.1.0
│ │ │ └── use#3.1.1
│ │ └─┬ to-regex#3.0.2
│ │ ├── define-property#2.0.2 deduped
│ │ ├── extend-shallow#3.0.2 deduped
│ │ ├── regex-not#1.0.2 deduped
│ │ └── safe-regex#1.1.0 deduped
│ └─┬ resolve-dir#1.0.1
│ ├─┬ expand-tilde#2.0.2
│ │ └─┬ homedir-polyfill#1.0.3
│ │ └── parse-passwd#1.0.0
│ └─┬ global-modules#1.0.0
│ ├─┬ global-prefix#1.0.2
│ │ ├── expand-tilde#2.0.2 deduped
│ │ ├── homedir-polyfill#1.0.3 deduped
│ │ ├── ini#1.3.5
│ │ ├── is-windows#1.0.2 deduped
│ │ └─┬ which#1.3.1
│ │ └── isexe#2.0.0
│ ├── is-windows#1.0.2 deduped
│ └── resolve-dir#1.0.1 deduped
├── lodash.camelcase#4.3.0
├── minimist#1.2.5
└── semver#5.7.1
788 js files and 48000 lines of code.
Everyone one of those dependencies is another chance for you to be told something is broke, deprecated, there's a new vulnerability, etc. Basically by using something with so many dependencies you're adding to your workload when you could instead be spending time shipping, dancing, playing with your kids, whatever. You thought you were saving time by using a dependency but if it's got so many dependencies than you're not saving time if you compare to a lower or simple no dependency option because you will be forever dealing with the issues of those dependencies.
Here's the dependency tree for deps-ok which is much more reasonable.
└─┬ deps-ok#1.4.1
├── check-more-types#2.24.0
├─┬ debug#3.1.0
│ └── ms#2.0.0
├── lazy-ass#1.6.0
├── lodash#4.17.10
├── minimist#1.2.0
├─┬ q#2.0.3
│ ├── asap#2.0.6
│ ├── pop-iterate#1.0.1
│ └── weak-map#1.0.5
├── quote#0.4.0
└── semver#5.5.0
But it still manages to demonstrate the problem with dependencies
❯ npm audit
=== npm audit security report ===
┌──────────────────────────────────────────────────────────────────────────────┐
│ Manual Review │
│ Some vulnerabilities require your attention to resolve │
│ │
│ Visit https://go.npm.me/audit-guide for additional guidance │
└──────────────────────────────────────────────────────────────────────────────┘
┌───────────────┬──────────────────────────────────────────────────────────────┐
│ High │ Prototype Pollution │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Package │ lodash │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Patched in │ >=4.17.11 │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Dependency of │ deps-ok │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Path │ deps-ok > lodash │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ More info │ https://npmjs.com/advisories/782 │
└───────────────┴──────────────────────────────────────────────────────────────┘
┌───────────────┬──────────────────────────────────────────────────────────────┐
│ High │ Prototype Pollution │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Package │ lodash │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Patched in │ >=4.17.12 │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Dependency of │ deps-ok │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Path │ deps-ok > lodash │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ More info │ https://npmjs.com/advisories/1065 │
└───────────────┴──────────────────────────────────────────────────────────────┘
┌───────────────┬──────────────────────────────────────────────────────────────┐
│ Low │ Prototype Pollution │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Package │ lodash │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Patched in │ >=4.17.19 │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Dependency of │ deps-ok │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Path │ deps-ok > lodash │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ More info │ https://npmjs.com/advisories/1523 │
└───────────────┴──────────────────────────────────────────────────────────────┘
┌───────────────┬──────────────────────────────────────────────────────────────┐
│ Low │ Prototype Pollution │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Package │ minimist │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Patched in │ >=0.2.1 <1.0.0 || >=1.2.3 │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Dependency of │ deps-ok │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Path │ deps-ok > minimist │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ More info │ https://npmjs.com/advisories/1179 │
└───────────────┴──────────────────────────────────────────────────────────────┘
found 4 vulnerabilities (2 low, 2 high) in 13 scanned packages
4 vulnerabilities require manual review. See the full report for details.
Now of course maybe you don't care about those vulnerabilities because this script is only used during building but now you have a new problem that any real vulnerabilities will be buried in these ones you don't care about.
I have no idea how robust or comprehensive the solution above is. The good thing is it relies on npm so whatever npm install is going to do it's doing that exact thing.
Not sure there is npm way to do it, but just found this seems helpful:
blog post: http://bahmutov.calepin.co/check-dependencies-in-grunt-by-default.html
project: https://github.com/bahmutov/deps-ok

MEAN stack installation gives 304 and 404s

I am getting these 304 and 404s when I go to http://myipaddress:3000 after I tried to install the MEAN stack
$ node server
Express app started on port 3000
GET / 304 973ms
GET /lib/bootstrap/js/bootstrap.js 404 371ms
GET /lib/bootstrap/css/bootstrap.css 404 489ms
GET /lib/angular/angular.js 404 371ms
GET /lib/jquery/jquery.js 404 447ms
GET /lib/bootstrap/css/bootstrap-responsive.css 404 453ms
GET /lib/angular-cookies/angular-cookies.js 404 75ms
GET /lib/angular-resource/angular-resource.js 404 217ms
GET /lib/angular-ui-utils/modules/route.js 404 217ms
GET /lib/angular-bootstrap/ui-bootstrap-tpls.js 404 221ms
All these lib/* files are found in public/lib/*.
I am on Ubuntu and did these commands:
1. wget https://codeload.github.com/linnovate/mean/legacy.tar.gz/master -O mean
2. tar -zxvf mean
3. npm install
4. sudo npm install -g bower
5. bower install
where steps 4 and 5 are from this comment. since I was getting the errors even after step 3.
Since people also mentioned a .bowerrc, which I did NOT find anywhere, I created one in the root of the mean directory.
{
"directory": "public/lib",
"json": "bower.json"
}
Here is the output of my npm list.
mean#1.0.0 /path/to/linnovate-mean-612b014
├── async#0.2.9
├── connect-flash#0.1.1
├─┬ connect-mongo#0.3.3
│ └─┬ mongodb#1.2.14
│ └── bson#0.1.8
├─┬ express#3.4.0
│ ├── buffer-crc32#0.2.1
│ ├─┬ commander#1.2.0
│ │ └── keypress#0.1.0
│ ├─┬ connect#2.9.0
│ │ ├── bytes#0.2.0
│ │ ├─┬ multiparty#2.1.8
│ │ │ ├── readable-stream#1.0.17
│ │ │ └── stream-counter#0.1.0
│ │ ├── pause#0.0.1
│ │ ├── qs#0.6.5
│ │ └── uid2#0.0.2
│ ├── cookie#0.1.0
│ ├── cookie-signature#1.0.1
│ ├── debug#0.7.2
│ ├── fresh#0.2.0
│ ├── methods#0.0.1
│ ├── mkdirp#0.3.5
│ ├── range-parser#0.0.4
│ └─┬ send#0.1.4
│ └── mime#1.2.11
├─┬ forever#0.10.8
│ ├─┬ cliff#0.1.8
│ │ ├── eyes#0.1.8
│ │ └─┬ winston#0.6.2
│ │ ├── async#0.1.22
│ │ ├── cycle#1.0.2
│ │ ├── pkginfo#0.2.3
│ │ ├── request#2.9.203
│ │ └── stack-trace#0.0.7
│ ├── colors#0.6.0-1
│ ├─┬ flatiron#0.3.5
│ │ ├─┬ broadway#0.2.7
│ │ │ ├── eventemitter2#0.4.11
│ │ │ └─┬ winston#0.6.2
│ │ │ ├── async#0.1.22
│ │ │ ├── cycle#1.0.2
│ │ │ ├── eyes#0.1.8
│ │ │ ├── pkginfo#0.2.3
│ │ │ ├── request#2.9.203
│ │ │ └── stack-trace#0.0.7
│ │ ├── director#1.1.10
│ │ ├─┬ optimist#0.3.5
│ │ │ └── wordwrap#0.0.2
│ │ └─┬ prompt#0.2.9
│ │ ├─┬ read#1.0.5
│ │ │ └── mute-stream#0.0.4
│ │ ├── revalidator#0.1.5
│ │ └─┬ winston#0.6.2
│ │ ├── async#0.1.22
│ │ ├── cycle#1.0.2
│ │ ├── eyes#0.1.8
│ │ ├── pkginfo#0.2.3
│ │ ├── request#2.9.203
│ │ └── stack-trace#0.0.7
│ ├─┬ forever-monitor#1.2.2
│ │ ├─┬ broadway#0.2.7
│ │ │ ├── eventemitter2#0.4.11
│ │ │ └─┬ winston#0.6.2
│ │ │ ├── async#0.1.22
│ │ │ ├── cycle#1.0.2
│ │ │ ├── eyes#0.1.8
│ │ │ ├── pkginfo#0.2.3
│ │ │ ├── request#2.9.203
│ │ │ └── stack-trace#0.0.7
│ │ ├─┬ minimatch#0.0.5
│ │ │ └── lru-cache#1.0.6
│ │ ├─┬ ps-tree#0.0.3
│ │ │ └─┬ event-stream#0.5.3
│ │ │ └─┬ optimist#0.2.8
│ │ │ └── wordwrap#0.0.2
│ │ └── watch#0.5.1
│ ├─┬ nconf#0.6.7
│ │ ├── async#0.1.22
│ │ ├── ini#1.1.0
│ │ ├─┬ optimist#0.3.7
│ │ │ └── wordwrap#0.0.2
│ │ └── pkginfo#0.2.3
│ ├─┬ nssocket#0.5.1
│ │ ├── eventemitter2#0.4.13
│ │ └── lazy#1.0.11
│ ├─┬ optimist#0.4.0
│ │ └── wordwrap#0.0.2
│ ├── pkginfo#0.3.0
│ ├── timespan#2.0.1
│ ├─┬ utile#0.1.7
│ │ ├── async#0.1.22
│ │ ├── deep-equal#0.0.0
│ │ ├── i#0.3.2
│ │ ├── mkdirp#0.3.5
│ │ ├── ncp#0.2.7
│ │ └── rimraf#1.0.9
│ ├── watch#0.7.0
│ └─┬ winston#0.7.1
│ ├── cycle#1.0.2
│ ├── eyes#0.1.8
│ ├─┬ request#2.16.6
│ │ ├── aws-sign#0.2.0
│ │ ├── cookie-jar#0.2.0
│ │ ├── forever-agent#0.2.0
│ │ ├─┬ form-data#0.0.10
│ │ │ └─┬ combined-stream#0.0.4
│ │ │ └── delayed-stream#0.0.5
│ │ ├─┬ hawk#0.10.2
│ │ │ ├── boom#0.3.8
│ │ │ ├── cryptiles#0.1.3
│ │ │ ├── hoek#0.7.6
│ │ │ └── sntp#0.1.4
│ │ ├── json-stringify-safe#3.0.0
│ │ ├── mime#1.2.11
│ │ ├── node-uuid#1.4.1
│ │ ├── oauth-sign#0.2.0
│ │ ├── qs#0.5.6
│ │ └── tunnel-agent#0.2.0
│ └── stack-trace#0.0.7
├─┬ grunt#0.4.1
│ ├── async#0.1.22
│ ├── coffee-script#1.3.3
│ ├── colors#0.6.2
│ ├── dateformat#1.0.2-1.2.3
│ ├── eventemitter2#0.4.13
│ ├─┬ findup-sync#0.1.2
│ │ └── lodash#1.0.1
│ ├─┬ glob#3.1.21
│ │ ├── graceful-fs#1.2.3
│ │ └── inherits#1.0.0
│ ├── hooker#0.2.3
│ ├── iconv-lite#0.2.11
│ ├─┬ js-yaml#2.0.5
│ │ ├─┬ argparse#0.1.15
│ │ │ ├── underscore#1.4.4
│ │ │ └── underscore.string#2.3.3
│ │ └── esprima#1.0.4
│ ├── lodash#0.9.2
│ ├─┬ minimatch#0.2.12
│ │ ├── lru-cache#2.3.1
│ │ └── sigmund#1.0.0
│ ├─┬ nopt#1.0.10
│ │ └── abbrev#1.0.4
│ ├─┬ rimraf#2.0.3
│ │ └── graceful-fs#1.1.14
│ ├── underscore.string#2.2.1
│ └── which#1.0.5
├─┬ grunt-bower-task#0.3.2
│ ├── async#0.1.22
│ ├─┬ bower#1.2.6
│ │ ├── abbrev#1.0.4
│ │ ├── archy#0.0.2
│ │ ├─┬ bower-config#0.5.0
│ │ │ └─┬ optimist#0.6.0
│ │ │ ├── minimist#0.0.5
│ │ │ └── wordwrap#0.0.2
│ │ ├── bower-endpoint-parser#0.2.1
│ │ ├─┬ bower-json#0.4.0
│ │ │ ├── deep-extend#0.2.6
│ │ │ └── intersect#0.0.3
│ │ ├── bower-logger#0.2.1
│ │ ├─┬ bower-registry-client#0.1.4
│ │ │ ├── async#0.2.9
│ │ │ ├─┬ bower-config#0.4.5
│ │ │ │ └─┬ optimist#0.6.0
│ │ │ │ ├── minimist#0.0.5
│ │ │ │ └── wordwrap#0.0.2
│ │ │ └── request-replay#0.2.0
│ │ ├─┬ cardinal#0.4.2
│ │ │ ├── ansicolors#0.2.1
│ │ │ └─┬ redeyed#0.4.2
│ │ │ └── esprima#1.0.4
│ │ ├─┬ chalk#0.2.1
│ │ │ ├── ansi-styles#0.2.0
│ │ │ └── has-color#0.1.1
│ │ ├── chmodr#0.1.0
│ │ ├─┬ fstream#0.1.24
│ │ │ └── inherits#2.0.1
│ │ ├─┬ fstream-ignore#0.0.7
│ │ │ ├── inherits#2.0.1
│ │ │ └─┬ minimatch#0.2.12
│ │ │ └── sigmund#1.0.0
│ │ ├─┬ glob#3.2.6
│ │ │ ├── inherits#2.0.1
│ │ │ └─┬ minimatch#0.2.12
│ │ │ └── sigmund#1.0.0
│ │ ├── graceful-fs#2.0.1
│ │ ├─┬ handlebars#1.0.12
│ │ │ ├─┬ optimist#0.3.7
│ │ │ │ └── wordwrap#0.0.2
│ │ │ └─┬ uglify-js#2.3.6
│ │ │ ├── async#0.2.9
│ │ │ └─┬ source-map#0.1.29
│ │ │ └── amdefine#0.0.8
│ │ ├─┬ inquirer#0.3.3
│ │ │ ├── async#0.2.9
│ │ │ ├─┬ cli-color#0.2.3
│ │ │ │ ├── es5-ext#0.9.2
│ │ │ │ └─┬ memoizee#0.2.5
│ │ │ │ ├── event-emitter#0.2.2
│ │ │ │ └── next-tick#0.1.0
│ │ │ ├── lodash#1.2.1
│ │ │ └── mute-stream#0.0.3
│ │ ├── junk#0.2.1
│ │ ├── lru-cache#2.3.1
│ │ ├── mkdirp#0.3.5
│ │ ├── mout#0.6.0
│ │ ├── nopt#2.1.2
│ │ ├── open#0.0.4
│ │ ├── osenv#0.0.3
│ │ ├─┬ promptly#0.2.0
│ │ │ └─┬ read#1.0.5
│ │ │ └── mute-stream#0.0.4
│ │ ├── q#0.9.7
│ │ ├─┬ request#2.27.0
│ │ │ ├── aws-sign#0.3.0
│ │ │ ├── cookie-jar#0.3.0
│ │ │ ├── forever-agent#0.5.0
│ │ │ ├─┬ form-data#0.1.1
│ │ │ │ ├── async#0.2.9
│ │ │ │ └─┬ combined-stream#0.0.4
│ │ │ │ └── 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.0
│ │ │ │ ├── asn1#0.1.11
│ │ │ │ ├── assert-plus#0.1.2
│ │ │ │ └── ctype#0.5.2
│ │ │ ├── json-stringify-safe#5.0.0
│ │ │ ├── mime#1.2.11
│ │ │ ├── node-uuid#1.4.1
│ │ │ ├── oauth-sign#0.3.0
│ │ │ ├── qs#0.6.5
│ │ │ └── tunnel-agent#0.3.0
│ │ ├─┬ request-progress#0.3.1
│ │ │ └── throttleit#0.0.2
│ │ ├── retry#0.6.0
│ │ ├── rimraf#2.2.2
│ │ ├── semver#2.1.0
│ │ ├── stringify-object#0.1.7
│ │ ├─┬ sudo-block#0.2.1
│ │ │ └─┬ chalk#0.1.1
│ │ │ ├── ansi-styles#0.1.2
│ │ │ └── has-color#0.1.1
│ │ ├─┬ tar#0.1.18
│ │ │ ├── block-stream#0.0.7
│ │ │ └── inherits#2.0.1
│ │ ├── tmp#0.0.21
│ │ ├─┬ unzip#0.1.9
│ │ │ ├─┬ binary#0.3.0
│ │ │ │ ├── buffers#0.1.1
│ │ │ │ └─┬ chainsaw#0.1.0
│ │ │ │ └── traverse#0.3.9
│ │ │ ├─┬ match-stream#0.0.2
│ │ │ │ └── buffers#0.1.1
│ │ │ ├─┬ pullstream#0.4.0
│ │ │ │ ├── over#0.0.5
│ │ │ │ └── slice-stream#0.0.0
│ │ │ ├── readable-stream#1.0.17
│ │ │ └── setimmediate#1.0.1
│ │ ├─┬ update-notifier#0.1.5
│ │ │ ├─┬ chalk#0.1.1
│ │ │ │ ├── ansi-styles#0.1.2
│ │ │ │ └── has-color#0.1.1
│ │ │ ├─┬ configstore#0.1.5
│ │ │ │ ├─┬ js-yaml#2.1.0
│ │ │ │ │ ├─┬ argparse#0.1.15
│ │ │ │ │ │ ├── underscore#1.4.4
│ │ │ │ │ │ └── underscore.string#2.3.3
│ │ │ │ │ └── esprima#1.0.4
│ │ │ │ └── lodash#1.3.1
│ │ │ ├─┬ request#2.22.0
│ │ │ │ ├── aws-sign#0.3.0
│ │ │ │ ├── cookie-jar#0.3.0
│ │ │ │ ├── forever-agent#0.5.0
│ │ │ │ ├─┬ form-data#0.0.8
│ │ │ │ │ ├── async#0.2.9
│ │ │ │ │ └─┬ combined-stream#0.0.4
│ │ │ │ │ └── delayed-stream#0.0.5
│ │ │ │ ├─┬ hawk#0.13.1
│ │ │ │ │ ├─┬ boom#0.4.2
│ │ │ │ │ │ └── hoek#0.9.1
│ │ │ │ │ ├── cryptiles#0.2.2
│ │ │ │ │ ├── hoek#0.8.5
│ │ │ │ │ └─┬ sntp#0.2.4
│ │ │ │ │ └── hoek#0.9.1
│ │ │ │ ├─┬ http-signature#0.10.0
│ │ │ │ │ ├── asn1#0.1.11
│ │ │ │ │ ├── assert-plus#0.1.2
│ │ │ │ │ └── ctype#0.5.2
│ │ │ │ ├── json-stringify-safe#4.0.0
│ │ │ │ ├── mime#1.2.11
│ │ │ │ ├── node-uuid#1.4.1
│ │ │ │ ├── oauth-sign#0.3.0
│ │ │ │ ├── qs#0.6.5
│ │ │ │ └── tunnel-agent#0.3.0
│ │ │ └── semver#2.0.11
│ │ └── which#1.0.5
│ ├── colors#0.6.2
│ ├── lodash#0.10.0
│ ├─┬ rimraf#2.0.3
│ │ └── graceful-fs#1.1.14
│ └── wrench#1.4.4
├─┬ grunt-cli#0.1.9
│ ├─┬ findup-sync#0.1.2
│ │ ├─┬ glob#3.1.21
│ │ │ ├── graceful-fs#1.2.3
│ │ │ ├── inherits#1.0.0
│ │ │ └─┬ minimatch#0.2.12
│ │ │ ├── lru-cache#2.3.1
│ │ │ └── sigmund#1.0.0
│ │ └── lodash#1.0.1
│ ├─┬ nopt#1.0.10
│ │ └── abbrev#1.0.4
│ └── resolve#0.3.1
├─┬ grunt-concurrent#0.3.1
│ └── lpad#0.1.0
├─┬ grunt-contrib-jshint#0.6.4
│ └─┬ jshint#2.1.11
│ ├─┬ cli#0.4.5
│ │ └─┬ glob#3.2.6
│ │ └── inherits#2.0.1
│ ├── console-browserify#0.1.6
│ ├─┬ minimatch#0.2.12
│ │ ├── lru-cache#2.3.1
│ │ └── sigmund#1.0.0
│ ├── shelljs#0.1.4
│ └── underscore#1.4.4
├─┬ grunt-contrib-watch#0.5.3
│ ├─┬ gaze#0.4.1
│ │ └─┬ globule#0.1.0
│ │ ├─┬ glob#3.1.21
│ │ │ ├── graceful-fs#1.2.3
│ │ │ └── inherits#1.0.0
│ │ ├── lodash#1.0.1
│ │ └─┬ minimatch#0.2.12
│ │ ├── lru-cache#2.3.1
│ │ └── sigmund#1.0.0
│ └─┬ tiny-lr#0.0.4
│ ├── debug#0.7.2
│ ├── faye-websocket#0.4.4
│ ├─┬ noptify#0.0.3
│ │ └─┬ nopt#2.0.0
│ │ └── abbrev#1.0.4
│ └── qs#0.5.6
├─┬ grunt-mocha-test#0.7.0
│ └─┬ mocha#1.13.0
│ ├── commander#0.6.1
│ ├── debug#0.7.2
│ ├── diff#1.0.7
│ ├─┬ glob#3.2.3
│ │ ├── graceful-fs#2.0.1
│ │ ├── inherits#2.0.1
│ │ └─┬ minimatch#0.2.12
│ │ ├── lru-cache#2.3.1
│ │ └── sigmund#1.0.0
│ ├── growl#1.7.0
│ ├─┬ jade#0.26.3
│ │ └── mkdirp#0.3.0
│ └── mkdirp#0.3.5
├─┬ grunt-nodemon#0.1.1
│ └── nodemon#0.7.10
├─┬ jade#0.35.0
│ ├── character-parser#1.2.0
│ ├── commander#2.0.0
│ ├─┬ constantinople#1.0.2
│ │ └─┬ uglify-js#2.4.0
│ │ ├─┬ optimist#0.3.7
│ │ │ └── wordwrap#0.0.2
│ │ ├─┬ source-map#0.1.29
│ │ │ └── amdefine#0.0.8
│ │ └── uglify-to-browserify#1.0.1
│ ├── mkdirp#0.3.5
│ ├─┬ monocle#1.1.50
│ │ └─┬ readdirp#0.2.5
│ │ └─┬ minimatch#0.2.12
│ │ ├── lru-cache#2.3.1
│ │ └── sigmund#1.0.0
│ ├─┬ transformers#2.1.0
│ │ ├─┬ css#1.0.8
│ │ │ ├── css-parse#1.0.4
│ │ │ └── css-stringify#1.0.5
│ │ ├─┬ promise#2.0.0
│ │ │ └── is-promise#1.0.0
│ │ └─┬ uglify-js#2.2.5
│ │ ├─┬ optimist#0.3.7
│ │ │ └── wordwrap#0.0.2
│ │ └─┬ source-map#0.1.29
│ │ └── amdefine#0.0.8
│ └─┬ with#1.1.1
│ └─┬ uglify-js#2.4.0
│ ├─┬ optimist#0.3.7
│ │ └── wordwrap#0.0.2
│ ├─┬ source-map#0.1.29
│ │ └── amdefine#0.0.8
│ └── uglify-to-browserify#1.0.1
├── mean-logger#0.0.1
├─┬ mongoose#3.6.20
│ ├── hooks#0.2.1
│ ├─┬ mongodb#1.3.19
│ │ ├── bson#0.2.2
│ │ └── kerberos#0.0.3
│ ├── mpath#0.1.1
│ ├─┬ mpromise#0.2.1
│ │ └── sliced#0.0.4
│ ├── ms#0.1.0
│ ├── muri#0.3.1
│ ├── regexp-clone#0.0.1
│ └── sliced#0.0.5
├─┬ passport#0.1.17
│ ├── pause#0.0.1
│ └── pkginfo#0.2.3
├─┬ passport-facebook#1.0.1
│ └─┬ passport-oauth2#1.1.1
│ ├── oauth#0.9.10
│ ├── passport-strategy#1.0.0
│ └── uid2#0.0.3
├─┬ passport-github#0.1.5
│ ├─┬ passport-oauth#0.1.15
│ │ └── oauth#0.9.10
│ └── pkginfo#0.2.3
├─┬ passport-google-oauth#0.1.5
│ ├─┬ passport-oauth#0.1.15
│ │ └── oauth#0.9.10
│ └── pkginfo#0.2.3
├─┬ passport-local#0.1.6
│ └── pkginfo#0.2.3
├─┬ passport-twitter#1.0.2
│ ├─┬ passport-oauth1#1.0.1
│ │ ├── oauth#0.9.10
│ │ ├── passport-strategy#1.0.0
│ │ └── utils-merge#1.0.0
│ └─┬ xtraverse#0.1.0
│ └── xmldom#0.1.16
├── should#1.3.0
├─┬ supertest#0.8.0
│ ├── methods#0.0.1
│ └─┬ superagent#0.15.1
│ ├── cookiejar#1.3.0
│ ├── debug#0.7.2
│ ├── emitter-component#1.0.0
│ ├── formidable#1.0.9
│ ├── mime#1.2.5
│ └── qs#0.6.5
├── underscore#1.5.2
└── view-helpers#0.1.2
Thanks for helping out.
I had this same problem installing on bitnami. It turns out there is a permissions related issue in creating the directory where the actual content is located which MEAN serves up to you.
The following command worked for me from the directory in which I checked out MEAN:
sudo bower install --allow-root

Resources