npm package.json scripts not being called
Solution 1
From the documentation:
npm supports the "scripts" member of the package.json script, for the following scripts:
prepublish: Run BEFORE the package is published. (Also run on local
npm install
without any arguments.)prepare: Run both BEFORE the package is packed and published, on local
npm install
without any arguments, and when installing git dependencies (See below). This is run AFTERprepublish
, but BEFOREprepublishOnly
.prepublishOnly: Run BEFORE the package is prepared and packed, ONLY on
npm publish
.prepack: run BEFORE a tarball is packed (on
npm pack
,npm publish
, and when installing git dependencies).postpack: Run AFTER the tarball has been generated and moved to its final destination.
publish, postpublish: Run AFTER the package is published.
preinstall: Run BEFORE the package is installed
install, postinstall: Run AFTER the package is installed.
preuninstall, uninstall: Run BEFORE the package is uninstalled.
postuninstall: Run AFTER the package is uninstalled.
preupdate: Run BEFORE the package is updated with the update command.
update, postupdate: Run AFTER the package is updated with the update command.
pretest, test, posttest: Run by the
npm test
command.prestop, stop, poststop: Run by the
npm stop
command.prestart, start, poststart: Run by the
npm start
command.prerestart, restart, postrestart: Run by the
npm restart
command. Note:npm restart
will run the stop and start scripts if norestart
script is provided.Additionally, arbitrary scripts can be run by doing
npm run-script <stage> <pkg>
.
You can see the reason why your npm test
script works is because npm test
is a built-in command. You must use npm run-script
if you want to execute a script that is not executed by a built-in npm command.
Solution 2
Custom scripts declared in the package.json can be ran with the npm run <your-script>
form in your shell.
Try npm run seed
or npm run test
Solution 3
To execute the custom scripts in package.json using below
npm run-script seed
or
npm run-script < custom script >
or you can use
npm run < custom script >
Comments
-
Catfish almost 4 years
I have the following scripts section in my projects package.json:
"scripts": { "seed": "node bin/seed", "test": "echo \"Error: no test specified\" && exit 1" },
If i run
$ npm test
I get this:>npm test > [email protected] test C:\Users\m089269\WebstormProjects\node-mongo-seeds > echo "Error: no test specified" && exit 1 "Error: no test specified" npm ERR! Test failed. See above for more details. npm ERR! not ok code 0
If i run
$ npm seed
, I get this:npm seed Usage: npm <command> where <command> is one of: add-user, adduser, apihelp, author, bin, bugs, c, cache, completion, config, ddp, dedupe, deprecate, docs, edit, explore, faq, find, find-dupes, get, help, help-search, home, i, info, init, install, isntall, issues, la, link, list, ll, ln, login, ls, outdated, owner, pack, prefix, prune, publish, r, rb, rebuild, remove, repo, restart, rm, root, run-script, s, se, search, set, show, shrinkwrap, star, stars, start, stop, submodule, tag, test, tst, un, uninstall, unlink, unpublish, unstar, up, update, v, version, view, whoami npm <cmd> -h quick help on <cmd> npm -l display full usage info npm faq commonly asked questions npm help <term> search for help on <term> npm help npm involved overview Specify configs in the ini-formatted file: C:\Users\m089269\.npmrc or on the command line via: npm <command> --key value Config info can be viewed via: npm help config [email protected] C:\Program Files\nodejs\node_modules\npm
Why does it recognize my
test
script but not myseed
script?EDIT
When I try
npm run-script seed
I get this error which is expected because I don't pass in a-d
param:$ npm run-script seed > [email protected] seed C:\Users\m089269\WebstormProjects\node-mongo-seeds > node bin/seed Populate mongo from a set of .json files. Usage: $ node seed Options: -d The path to your mongo db [required] Missing required arguments: d npm ERR! [email protected] seed: `node bin/seed` npm ERR! Exit status 1 ...
When I try
npm run-script seed -d "localhost/ease"
I get this error.npm run-script seed -d localhost/ease-dev npm info it worked if it ends with ok npm info using [email protected] npm info using [email protected] npm ERR! Error: ENOENT, open 'C:\Users\m089269\WebstormProjects\node-mongo-seeds\node_modules\seed\package.json' ...
Why is it looking for a package.json in node_modules\seed? Seed is not even a dependency.
-
Catfish about 10 yearsThat's very helpful info. Please see my edit to my question though as something is still not right.
-
Catfish about 10 yearsIt seems that npm run-script does not currently support passing in arguments. So for now I've just hard coded the -d value into the scripts section
"scripts": {"seed": "node bin/seed -d localhost/ease"...
-
mscdex about 10 yearsAssuming npm passes the local environment to scripts, you could have the node script read in environment variables for setting parameters.
-
Jlappano about 7 yearsNote an alias of
npm run-script
isnpm run
-
thewaywewere about 7 yearsWelcome to SO! Your reply looks like a comment rather than an answer. Once you have sufficient reputation you will be able to comment on any post. Also check this what can I do instead. If you intended to Answer, read this how-to-answer to follow the SO guidelines.
-
jgawrych over 4 yearsNote that they have made some changes in the latest version. Notably, they removed the update/shrinkwrap script and added a version script