Différence entre `npm start` et` node app.js`, lors du démarrage de l'application?

188

J'ai installé une application à l'aide de la commande express new 'filename'. Je viens d'apprendre que vous pouvez démarrer une application en utilisant:

npm start

Jusqu'à présent, j'ai utilisé:

node app.js

pour démarrer mon serveur. Quelqu'un sait quelle est la différence entre les deux? Merci.

ReneGAED
la source

Réponses:

267

Depuis la page de manuel , npm start:

exécute le script "start" d'un package, s'il en a été fourni un. Si aucune version n'est spécifiée, alors il démarre la version "active".

Certes, cette description est complètement inutile, et c'est tout ce qu'elle dit. Au moins, c'est plus documenté que socket.io.

Quoi qu'il en soit, ce qui se passe vraiment est que npm regarde dans votre fichier package.json , et si vous avez quelque chose comme

"scripts": {"start": "coffee server.coffee"}

alors il le fera. Si npm ne trouve pas votre script de démarrage, la valeur par défaut est:

nœud server.js

 

Yusuf X
la source
4
Ah, je vois. C'est donc essentiellement la même chose à moins que vous ne choisissiez d'exécuter plus de scripts au moment de la compilation.
ReneGAED
1
Si vous tapez normalement "node server.js", alors oui.
Yusuf X
1
J'ai créé une nouvelle application, npm start ne fonctionne pas. pour l'ancienne application, il fonctionne bien. Aucune suggestion?
apprenant le
1
Par exemple, "node app.js" ne prendra pas en compte les changements de routeur, tandis que "npm start" le fera, car il exécute le script de démarrage package.json (comme "node ./bin/www")
Igor Vaschuk
1
si vous commencez par «npm», il peut redémarrer l'application en tapant simplement «rs» sur la console.
Elf
10

La documentation a été mise à jour . Ma réponse a des changements substantiels par rapport à la réponse acceptée: je voulais refléter que la documentation est à jour et que la réponse acceptée contient quelques liens rompus.

De plus, je n'ai pas compris quand la réponse acceptée disait "par défaut node server.js". Je pense que la documentation clarifie le comportement par défaut:

npm-start

Commencer un package

Synopsis

npm start [-- <args>]

La description

Ceci exécute une commande arbitraire spécifiée dans la startpropriété " " du package de son " scripts" objet . Si aucune startpropriété " " n'est spécifiée sur l' scriptsobjet " ", il s'exécutera node server.js.

En résumé, courir npm startpourrait faire l'une des deux choses suivantes:

  1. npm start {command_name}: Exécuter une commande arbitraire (c'est-à-dire si une telle commande est spécifiée dans la startpropriété de l' scriptsobjet package.json )
  2. npm start: Sinon si aucune startpropriété n'existe (ou non command_name): Exécuter node server.js, (ce qui peut ne pas être approprié , par exemple, l'OP n'a pas server.js; l'OP s'exécute nodeapp.js)
  3. J'ai dit que je ne listerais que 2 éléments, mais il y a d'autres possibilités (c'est-à-dire des cas d'erreur). Par exemple, s'il n'y a aucun package.jsondans le répertoire où vous exécutez npm start, vous pouvez voir une erreur:npm ERR! enoent ENOENT: no such file or directory, open '.\package.json'
Le pois rouge
la source