How do you start http-server in the background from an npm script so that another npm script, such as a Mocha test using jsdom, can make an HTTP request to http-server?
The http-server package was installed with:
npm install http-server --save-dev The package.json file contains:
"scripts": { "pretest": "gulp build-httpdocs", "test": "http-server -p 7777 httpdocs/ && mocha spec.js" }, Running npm test successfully starts the http-server, but of course the command hangs after showing:
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 Is there an easy way to start the web server so it does not block the Mocha tests?
Bonus: How do you shut down http-server after the Mocha tests have run?
You can run a process in background by appending & in the end. And then use the postscript hook that npm offers us, in order to kill the background process.
"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" } But what if I have multiple http-server running?
You can kill a process by specifying its port in the posttest script:
"posttest": "kill $(lsof -t -i:7777)" Now for Windows, syntax is different and as far as I know npm doesn't support multiple OS scripts. For supporting multiple my best bet would be a gulp task that will handle each OS different.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With