【问题标题】:The command does not work until the http server is turned off在关闭 http 服务器之前,该命令不起作用
【发布时间】:2016-12-20 10:00:27
【问题描述】:

我有一个 "server" 文件夹,我在其中安装了一个 npm package.json 文件和 http 服务器,还有一个 "webdir" 文件夹 与 web页面(在“服务器”文件夹内)。

我在 npm package.json 文件中写了一个命令 npm start,它做了 3 件事:

  1. 进入网页所在文件夹:cd webdir
  2. 启动http服务器:node ../node_modules/http-server/bin/http-server
  3. 打开网页:open http:localhost:8080

最终代码:
"start": "cd webdir && node ../node_modules/http-server/bin/http-server && open http:localhost:8080"

我遇到一个问题:如果我在package.json文件中使用&&分号依次编写这三个命令,第三个命令在我手动停止服务器之前不会执行。显然,在服务器关闭之前,启动服务器的命令仍然不完整。

如何避免?

我在 Imac (Mac OS EL Capitan) 上工作

【问题讨论】:

  • 它一直在运行,因为服务器一直在运行。您可以尝试交换第二个和第三个命令(也许启动服务器比您的浏览器打开页面快一点)。
  • @robertklep 我试过了,它不起作用。我得到一个未加载的页面(标准页面加载错误),我需要手动刷新它。如果我在它之后再做一次 - 我会得到类似页面的缓存版本(如果我在启动服务器之前对其进行了更改,它们不会出现,直到我手动刷新页面)
  • 这种情况下,你需要在后台启动服务器,所以剩下的命令会继续运行。但是,这并不理想,因为它会让服务器在 npm 已经停止之后继续运行。
  • 你可以使用 child_process.请参阅nodejs.org/api/…,更具体地了解您的情况krasimirtsonev.com/blog/article/…
  • @robertklep 我该怎么做?我需要启动服务器并在“npm start”命令上打开页面...

标签: json node.js http npm server


【解决方案1】:
"start": "(start /d webdir node ../node_modules/http-server/bin/http-server) & (open http:localhost:8080)"

【讨论】:

  • 谢谢,我试了下,执行命令后,打开了标准的空白网页,有错误信息,在控制台出现这条信息:prnt.sc/c5a4qv
  • 噢,你有 iMac/iOS。这是 Windows 的决定。
  • 是的,对不起,我会在问题中提到它。
【解决方案2】:

问题是http-server 将无限期运行,直到您(手动)停止它。只有在它停止之后才会执行以下命令(open ...),这已经太晚了。

解决方案是在后台启动 HTTP 服务器。因为这可能会导致问题(即使在npm 退出后HTTP 服务器仍会继续运行),您还必须使用shell 的wait 命令等待其退出:

"start": "cd webdir && node ../node_modules/http-server/bin/http-server & open http://localhost:8080 ; wait"

请注意,http-serveropen 之间是一个单个与符号。这使http-server 进程成为背景。

根据服务器启动的速度,您可能仍会在浏览器中收到错误页面(当浏览器在服务器完全启动之前请求该页面时)。要解决此问题,您需要在单个 & 符号和 open 之间添加一个 sleep 3;(意思是 “睡眠 3 秒”):

cd webdir && node ../node_modules/http-server/bin/http-server & sleep 3; open http:localhost:8080 ; wait

【讨论】:

  • 非常感谢,这几乎正是我所需要的!如果我使用命令“start”启动服务器,它就可以工作。但是,如果我随后停止服务器并关闭页面,更改 CSS 并再次使用“npm start”命令 - 我将看到页面在 CSS 更改之前的状态,我必须手动刷新页面才能看到它们。
  • @MaximVelichkin 老实说,我认为您无法阻止:浏览器最初可能会使用 CSS 的缓存版本。但是,也许您应该查看watch-http-server,这将允许保持服务器运行并在进行任何文件更改时自动重新加载页面。
  • 谢谢你的链接,我会研究这个方法。但是,除了这个问题之外,这个命令完全符合我的需要,再次感谢您!
猜你喜欢
  • 2019-01-10
  • 2019-01-27
  • 2016-11-13
  • 2020-04-17
  • 1970-01-01
  • 1970-01-01
  • 2020-11-25
  • 2018-08-19
  • 1970-01-01
相关资源
最近更新 更多