【问题标题】:node http-server not serving updated html files节点 http-server 不提供更新的 html 文件
【发布时间】:2016-11-12 17:21:09
【问题描述】:

我正在使用 Angular(主要是 ui-router)构建一个前端 Web 应用程序,并通过节点 http-server 提供 html 文件来进行本地开发。我注意到当我进行更新时,http-server 没有为我的静态 html 文件提供服务,这对我的本地开发来说是一个挑战。

我使用npm install http-server -g 全局安装了http-server,并通过转到根项目文件夹并运行http-server 来启动它。它默认为 localhost:8080 - 似乎可行的两种方法是在每次更新后更改端口号或通过 chrome 隐身模式。

有没有办法正常使用http-server而无需更改端口或使用隐身模式?

如果相关,我正在使用 MBP v. 10.11.3

谢谢!

【问题讨论】:

    标签: angularjs node.js httpserver


    【解决方案1】:

    似乎可行的两种方法是在每次更新后更改端口号或通过 chrome 隐身模式。

    您的问题是客户端缓存。隐身模式有自己的数据目录,独立于您的正常浏览。

    幸运的是,http-server 为您提供了一种设置缓存控制标头的方法。

    -c 设置缓存控制 max-age 标头的缓存时间(以秒为单位),例如-c10 10 秒(默认为“3600”)。要禁用缓存,请使用-c-1(也可能使用-p 8080 强制服务器清除该端口的缓存;可以在后续运行时删除)。

    这里的文档中列出了它:https://github.com/indexzero/http-server

    您可以在此处阅读 HTTP 缓存指令:https://developers.google.com/web/fundamentals/performance/optimizing-content-efficiency/http-caching?hl=en

    【讨论】:

    • 不是客户端问题。禁用缓存或“工厂重启”无济于事。只有服务器重启。此外,HTML 标记指定取消缓存,它也不做任何事情。
    • @Slav HTML 标签当然不会取消缓存...错误的层。如果使用隐身模式解决了问题,那么问题绝对是客户端的,正如我的回答所解释的那样。您可能遇到与原始问题不同的问题。另请注意,响应标头中的缓存控制指令也会影响服务器端缓存(对于表现良好的代理)。如果您使用的是 HTTP 代理,您还可以考虑在 HTTP 代理上禁用 sendfile。例如 Nginx 使用 sendfile,它会在虚拟机上引起很多问题。
    • 可能是不同的问题,是的。似乎我也面临这里描述的错误:github.com/indexzero/http-server/issues/149 隐身模式没有帮助。
    • 很好找到@Slav。为了解决这个问题,http-server 应该以-c-1 -p X 开头,其中 X 是端口。这将确保服务器擦除关联端口的缓存。 -p 参数可以在服务器后续启动时删除。
    • -c-1 可以工作,但是如果您之前在没有 -c-1 的情况下启动了服务器,那么更改将不会生效,直到之前的缓存过期(默认为 3600 秒 AKA 1 小时).. . 所以你必须等待1小时才能更改生效!!!如果您打开浏览器开发者工具然后执行 HARD RELOAD 更改应该立即生效
    【解决方案2】:

    尝试打开开发者工具并在 Chrome 的“网络”选项卡中选中“禁用缓存”复选框。

    【讨论】:

    • 对我有用,但是在重新启动浏览器时该选项会被重置 :( 。如果他们能记住每个 URL 就好了。
    猜你喜欢
    • 1970-01-01
    • 2015-09-12
    • 2018-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多