如何在不重新启动 Web 应用程序的情况下以编程方式使 JavaScript 和 CSS 包无效或刷新?

Posted

技术标签:

【中文标题】如何在不重新启动 Web 应用程序的情况下以编程方式使 JavaScript 和 CSS 包无效或刷新?【英文标题】:How to programmatically invalidate or refresh JavaScript and CSS bundles without restarting the web application? 【发布时间】:2015-02-27 22:58:01 【问题描述】:

我了解,当为 javascript 和 CSS 使用包时,Web 应用程序正在缓存包并为其使用缓存键,如下所示:

<script src="/bundles/sampleJs?v=h-HGvCLcx-0T1kG3DBKIVBtGxEhtfpONQl5b_7BQuSo1"></script>

如何以编程方式刷新缓存的包(或仅一个包)?

例如,如果我必须上传新的 CSS 更新 - 我想更新捆绑包而无需重新启动整个 Web 应用程序...

【问题讨论】:

这在很大程度上取决于您使用的 Web 框架;请添加标签(因为这不是 JavaScript 或 CSS 的问题,也不是 Bundler 的责任)。 【参考方案1】:

您可以通过以下两种方式解决此问题:

ASP.NET:

如果 html 页面是在服务器端生成的,比如说 ASP.NET,我会简单地在 Global.asax 中定义一个静态全局,它将附加到所有资源。

<script src="/bundles/sampleJs?cacheBustVersion=" + <%= @cacheBustVersion %> ></script>

RequireJS:

在 Javascript 中,如果您使用的是 RequireJS,您可以在您的 requirejs 配置部分创建一个名为 urlArgs 的变量。

urlArgs: "cacheBustVersion=v1"

这会将“&cacheBustVersion=v1”附加到通过 require 调用加载的每个文件。

开发过程中需要JS:

urlArgs: "cacheBustVersion=" Date.now()

这将确保所有通过 requireJS 加载的文件都不会被缓存。

RequireJS Documentation for urlArgs

【讨论】:

嗨。我实际上想利用缓存的捆绑包,只是我在寻找一种方法,以某种方式导致内置捆绑包机制在更新 CSS 文件时重新执行捆绑和缩小捆绑文件......

以上是关于如何在不重新启动 Web 应用程序的情况下以编程方式使 JavaScript 和 CSS 包无效或刷新?的主要内容,如果未能解决你的问题,请参考以下文章

如何在不重新加载页面的情况下从 FF Web 扩展内容脚本更改 3rd 方网站上的 Angular 应用程序路由/URL

如何在不使用命令的情况下以编程方式关闭/重启 linux 机器(运行时)

在不打开联系人应用程序的情况下以编程方式将 vcf 保存到 Android 中的联系人

如何在不使用 UINavigationController 的情况下以编程方式进入 rootViewController

如何在不重新加载页面的情况下以角度 2 设置或删除当前路线中的 queryParams

如何在不使用 Facebook 登录/注销按钮的情况下以编程方式从 Facebook SDK 3.0 注销?