Node HTTP服务器未提供更新的HTML文件。

22

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

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

是否有一种可以正常使用http-server而不必更改端口或使用无痕浏览模式的方法?

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

谢谢!

2个回答

36
似乎有效的两种方法是在每次更新后更改端口号或使用Chrome的隐身模式。你所遇到的问题是客户端缓存。隐身模式拥有独立于正常浏览的自己的数据目录。幸运的是,http-server提供了一种设置缓存控制头的方法。
-c 设置缓存控制中的最大年龄标头的缓存时间(以秒为单位),例如,-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

1
这不是客户端的问题。禁用缓存或“工厂重启”都没有帮助。只有服务器重启。此外,HTML标签指定取消缓存,但也没有效果。 - Slaus
1
@Slav 当然 HTML 标签并不会取消缓存... 错误的层面。如果使用隐身模式解决了问题,那么问题绝对是客户端问题,就像我的答案所解释的那样。你可能遇到的问题与原始问题不同。另外,请注意,响应头中的缓存控制指令也会影响服务器端缓存(对于表现良好的代理)。如果使用了 HTTP 代理,请考虑禁用 sendfile。例如,Nginx 使用 sendfile,它可能会在 VM 上引起许多问题。 - Brad
1
可能存在不同的问题,是的。看起来我也遇到了在这里描述的错误:https://github.com/indexzero/http-server/issues/149 隐身模式也没有帮助。 - Slaus
很好的发现@Slav。为了解决这个问题,应该使用-c-1-p X启动http-server,其中X是端口号。这将确保服务器清除相关端口的缓存。在服务器的后续启动中可以删除-p参数。 - Axonn
2
-c-1 可以正常工作,但如果之前没有使用 -c-1 启动服务器,则更改直到先前的缓存过期(默认为 3600 秒,即 1 小时)后才会生效... 因此您必须等待 1 小时才能看到更改生效!如果您打开浏览器开发人员工具,然后进行强制刷新,则更改应立即生效。 - danday74
似乎@danday74的评论,这个答案本身以及清除Chrome缓存的组合对我有用! - sinewave440hz

18
尝试打开Chrome浏览器的开发者工具,进入Network选项卡并勾选“禁用缓存”复选框。请保留原文中的HTML标签。

对我来说可以用,但是当重新启动浏览器时选项会被重置 :(。如果他们能够按URL记住它就更好了。 - Axonn

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接