Ghost: npm test currently doesn't work without globally installing grunt-cli

npm test currently doesn’t work in a freshly cloned + npm installed repo because grunt-cli isn’t in devDependencies

commands in the scripts field of package.json e.g. {"scripts": {"start": "ghost"}} will resolve to the local module scope instead of requiring global installation. This means that working versions of modules can get bundled with applications.

for example, in the above example when npm start runs it will look for a module in the local available require scope that provides a ghost bin, and will use that. if it can’t find a local module it will try the $PATH.

if I had two applications on my computer that both depend on ghost, but one depends on ghost v1 and another on ghost v2 (for example), it would suck if I had to npm install -g ghost@1.0.0 every time I went into the first project and then npm install -g ghost@2.0.0 in the other one. using npm scripts solves this problem. (I hope my explanation makes sense)

About this issue

  • Original URL
  • State: closed
  • Created 11 years ago
  • Comments: 23 (12 by maintainers)

Commits related to this issue

Most upvoted comments

It works for me on OSX 10.9.1 and node.js v0.10.22, ruby-2.0.0-p247.

I did a fresh rm -rf Ghost && git clone git://github.com/TryGhost/Ghost && cd Ghost, npm i (which ran bundle install && grunt init from the npm install hook). Then npm start

I then removed my globally installed grunt-cli with npm uninstall -g grunt-cli and repeated the above.

- npm install -g grunt-cli in the before_install of the .travis.yml is no longer needed. Also in the contributing guidelines, 1. Run npm install -g grunt-cli is no longer needed. As well as grunt init as that will be ran automatically when the user does npm install.

The message: >> Local Npm module "grunt-cli" not found. Is it installed? comes from trying to load grunt-cli as a grunt task. Simply change the matchdep line in the Gruntfile.js to require('matchdep').filterDev(['grunt-*', '!grunt-cli']).forEach(grunt.loadNpmTasks); to avoid loading grunt-cli as a grunt task.

Happy to send a PR for any of the above if that is easier. Thanks!