grunt Fatal error: Unable to find local grunt in Yeoman

I installed yeoman and started the examples which are provided in the official documentation. I went through the suggested operations

    yo webapp 
    bower install underscore  
    grunt

After running grunt I have the message

    grunt-cli: The grunt command line interface. (v0.1.9)

    Fatal error: Unable to find local grunt.

    If you're seeing this message, either a Gruntfile wasn't found or grunt
    hasn't been installed locally to your project. For more information about
    installing and configuring grunt, please see the Getting Started guide:

    http://gruntjs.com/getting-started

Note that grunt have been installed with

    npm install -g grunt-cli

and

    npm install -g grunt

yo has generated the Gruntfile.js in the project root, where I am running the command.
The package.json has been generated as well:

    "name": "testyo",
    "version": "0.0.0",
    "dependencies": {},
    "devDependencies": {
      "grunt": "~0.4.1",
      "grunt-contrib-copy": "~0.4.1",
      "grunt-contrib-concat": "~0.1.3",
      "grunt-contrib-coffee": "~0.6.5",
      "grunt-contrib-uglify": "~0.2.0",
      "grunt-contrib-compass": "~0.2.0",
      "grunt-contrib-jshint": "~0.4.1",
      "grunt-contrib-cssmin": "~0.6.0",
      "grunt-contrib-connect": "~0.2.0",
      "grunt-contrib-clean": "~0.4.0",
      "grunt-contrib-htmlmin": "~0.1.3",
      "grunt-contrib-imagemin": "~0.1.3",
      "grunt-contrib-watch": "~0.4.0",
      "grunt-rev": "~0.1.0",
      "grunt-autoprefixer": "~0.1.20130516",
      "grunt-usemin": "~0.1.10",
      "grunt-mocha": "~0.3.0",
      "grunt-open": "~0.2.0",
      "grunt-svgmin": "~0.1.0",
      "grunt-concurrent": "~0.1.0",
      "matchdep": "~0.1.1",
      "connect-livereload": "~0.2.0"
    },
    "engines": {
      "node": ">=0.8.0"
    }

Additionally. From the root directory

    grunt --version
    grunt-cli v0.1.9

This confirm that grunt is available to be run in every directory.
Any idea?


Solution 1:

After some quick research I realized, from the grunt documentation, that grunt has to be installed in the project. I did that by running:

    sudo npm install grunt --save-dev

Now grunt works.

I also needed to run:

    npm install

so that all the dependencies are loaded.

This solved my problem. To be honest I thought yeoman would have taken care of the last two steps automatically.

In case you have comments or think there is a better solution, please leave a comment.

Solution 2:

npm cache clean
sudo npm install grunt --save-dev

really did the trick for me