Cannot find module 'findup-sync' when trying to run grunt

I am having trouble running grunt-cli after installing it. I run

npm install -g grunt-cli

then running grunt errors with

    node.js:63
    throw e;
    ^
Error: Cannot find module 'findup-sync'
    at loadModule (node.js:275:15)
    at require (node.js:411:14)
    at Object.<anonymous> (/home/tmartin/bin/grunt:9:14)
    at Module._compile (node.js:462:23)
    at Module._loadScriptSync (node.js:469:10)
    at Module.loadSync (node.js:338:12)
    at Object.runMain (node.js:522:24)
    at Array.<anonymous> (node.js:756:12)
    at EventEmitter._tickCallback (node.js:55:22)
    at node.js:773:9

This is what I have installed:

tmartin@timcomp:~$ npm list -g
/home/tmartin/lib
└─┬ grunt-cli@0.1.6
  ├─┬ findup-sync@0.1.2
  │ ├─┬ glob@3.1.21
  │ │ ├── graceful-fs@1.2.0
  │ │ ├── inherits@1.0.0
  │ │ └─┬ minimatch@0.2.11
  │ │   ├── lru-cache@2.2.2
  │ │   └── sigmund@1.0.0
  │ └── lodash@1.0.1
  └─┬ nopt@1.0.10
    └── abbrev@1.0.4

I had to install and link findup-sync and a few other npm packages to get these dependency issues to go away. I though npm was supposed to handle them for us, but installing the dependencies manually made the issues go away.

npm install findup-sync -g

npm link findup-sync

I got mine running again reinstalling grunt-cli globally and in my repo.

npm install -g grunt-cli

cd myrepo

npm install grunt-cli

I think Yosemite installation broke some things in my files ...

This is because npm doesn't set the right permission to sub-directory node_modules in /usr/lib/node_modules/grunt-cli. In my case, I had:

drwxr-x--- 6 nobody root 4096 16 févr. 17:08 node_modules

When running grunt as non-root user, I had the same error (Cannot find module 'findup-sync') because of a permission denied to read this directory.

The solution is to fix permission with chmod: chmod a+rx node_modules.

But in fact, all directories was involved. The best way was to todo:

find /usr/lib/node_modules/grunt-cli -type d -exec chmod a+rx {} \;

This is maybe a distribution bug (I use Archlinux).

This may seem simple, but if anyone else is unsure if there's a permissions problem, try running sudo grunt then go from there.