Difference between `npm start` & `node app.js`, when starting app?
The documentation has been updated. My answer has substantial changes vs the accepted answer: I wanted to reflect documentation is up-to-date, and accepted answer has a few broken links.
Also, I didn't understand when the accepted answer said "it defaults to node server.js
". I think the documentation clarifies the default behavior:
npm-start
Start a package
Synopsis
npm start [-- <args>]
Description
This runs an arbitrary command specified in the package's "
start
" property of its "scripts
" object. If no "start
" property is specified on the "scripts
" object, it will runnode server.js
.
In summary, running npm start
could do one of two things:
npm start {command_name}
: Run an arbitrary command (i.e. if such command is specified in thestart
property of package.json'sscripts
object)npm start
: Else if nostart
property exists (or nocommand_name
is passed): Runnode server.js
, (which may not be appropriate, for example the OP doesn't haveserver.js
; the OP runsnode
app.js
)- I said I would list only 2 items, but are other possibilities (i.e. error cases). For example, if there is no
package.json
in the directory where you runnpm start
, you may see an error:npm ERR! enoent ENOENT: no such file or directory, open '.\package.json'
From the man page, npm start:
runs a package's "start" script, if one was provided. If no version is specified, then it starts the "active" version.
Admittedly, that description is completely unhelpful, and that's all it says. At least it's more documented than socket.io.
Anyhow, what really happens is that npm looks in your package.json file, and if you have something like
"scripts": { "start": "coffee server.coffee" }
then it will do that. If npm can't find your start script, it defaults to:
node server.js