It’s very common in font-end applications to have Bower dependencies and use Grunt (or Gulp) for their build system. Usually in README document it’s stated that you need to install Bower and Grunt globally before you can start the project.

npm install -g bower grunt-cli
git clone git://myapp.git
cd my app
npm install
bower install
grunt serve

In Swagger Editor project, I made this process as simple as git clone and then npm start.

git clone git@github.com:swagger-api/swagger-editor.git
cd swagger-editor
npm start

No need for installing Bower or Grunt. It also works in Windows.

npm scripts to rescue!

With npm scripts we can remove dependencies to global installation of Bower and Grunt and also install npm and Bower packages automatically. First of all we need to install Bower and Grunt as developer dependencies of our app.

npm install --save-dev bower grunt-cli

Now, using npm scripts fields we can define start script to trigger npm install, bower install and then grunt serve.

"scripts": {
  "start": "npm install; bower install; grunt; grunt serve"
}

Now, git clone and then npm start will do everything you need. This will work perfectly in Linux, OS X and Windows because "start" is simply a Bash script that uses ./node_moduels/.bin as $PATH. So even if user don’t have Gulp installed globally, gulp command in your npm script will execute gulp binary in ./node_modules/.bin.

Pro tip: If you name your script, server.js you don’t even have to have a start field in scritps of your package.json, npm will automatically run node server.js for npm start command