从npm脚本在后台运行http-server

时间:2017-12-19 06:32:51

标签: javascript node.js npm background-process httpserver

如何从npm脚本的后台启动http-server,以便另一个npm脚本(例如Mocha test using jsdom)可以向http-server发出HTTP请求?

http-server软件包已安装:

npm install http-server --save-dev

package.json文件包含:

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

正在运行npm test启动http-server,但当然命令在显示后挂起:

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

是否有一种简单的方法来启动Web服务器,因此它不会阻止Mocha测试?

奖励:在Mocha测试运行后如何关闭http-server

2 个答案:

答案 0 :(得分:12)

您可以通过在最后添加&来在后台运行流程。 然后使用npm为我们提供的postscript挂钩,以便终止后台进程。

"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"
}

但如果我有多个http-server正在运行

,该怎么办?

您可以通过在posttest脚本中指定其端口来终止进程:

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

现在对于Windows,语法是不同的,据我所知,npm不支持多个OS脚本。为了支持多个我最好的选择将是一个gulp任务,将处理每个操作系统不同。

答案 1 :(得分:0)

可能npm-run-all可以解决跨平台问题