web-dev-qa-db-fra.com

Exécution du serveur http en arrière-plan à partir d'un script npm

Comment commencez-vous http-server en arrière-plan à partir d'un script npm afin qu'un autre script npm, tel qu'un test Mocha utilisant jsdom , puisse faire une requête HTTP à http-server?

Le http-server le package a été installé avec:

npm install http-server --save-dev

Le package.json le fichier contient:

"scripts": {
   "pretest": "gulp build-httpdocs",
   "test": "http-server -p 7777 httpdocs/ && mocha spec.js"
},

Fonctionnement npm test démarre avec succès le http-server, mais bien sûr la commande se bloque après avoir montré:

Starting up http-server, serving httpdocs/
Available on:
  http://127.0.0.1:7777
  http://192.168.1.64:7777
Hit CTRL-C to stop the server

Existe-t-il un moyen simple de démarrer le serveur Web pour qu'il ne bloque pas les tests Mocha?

Bonus: Comment fermez-vous http-server après l'exécution des tests Mocha?

15
Dem Pilafian

Vous pouvez exécuter un processus en arrière-plan en ajoutant & à la fin. Et puis utilisez le crochet postscript que npm nous offre, afin de tuer le processus d'arrière-plan.

"scripts": {
    "web-server": "http-server -p 7777 httpdocs &",
    "pretest": "gulp build-httpdocs && npm run web-server",
    "test": "mocha spec.js",
    "posttest": "pkill -f http-server"
}

Mais que faire si j'ai plusieurs http-server en cours d'exécution?

Vous pouvez tuer un processus en spécifiant son port dans le script posttest:

    "posttest": "kill $(lsof -t -i:7777)"

Maintenant, pour Windows, la syntaxe est différente et pour autant que je sache, npm ne prend pas en charge plusieurs scripts de système d'exploitation. Pour prendre en charge plusieurs, mon meilleur pari serait une tâche complexe qui traitera chaque système d'exploitation différemment.

15
Alex Michailidis