npm test currently doesn't work without globally installing grunt-cli
See original GitHub issuenpm 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)
Issue Analytics
- State:
- Created 10 years ago
- Comments:23 (12 by maintainers)
Top GitHub 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 ranbundle install && grunt init
from the npm install hook). Thennpm 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 asgrunt init
as that will be ran automatically when the user doesnpm install
.The message:
>> Local Npm module "grunt-cli" not found. Is it installed?
comes from trying to loadgrunt-cli
as a grunt task. Simply change the matchdep line in the Gruntfile.js torequire('matchdep').filterDev(['grunt-*', '!grunt-cli']).forEach(grunt.loadNpmTasks);
to avoid loadinggrunt-cli
as a grunt task.Happy to send a PR for any of the above if that is easier. Thanks!
As you noted @ErisDS there is no need to run any npm script in this scenario as the built scripts will be included in the npm package.
Adding
"prepublish": "grunt && grunt prod"
to thepackage.json
file will rightly ensure the built files are always present.Small nit, but I’d argue we should move development specific commands back to the
Gruntfile.js
as that is where all development tasks currently reside. Adding them to thepackage.json
file adds another location that will require maintenance, which isn’t necessary.