12

我认为这是因为缓存,但我不完全确定。

我遇到的问题是,当我更改文件并保存它时,它有一段时间没有在我的浏览器中更新。我认为这是因为该文件已缓存在我的浏览器中并且正在加载以前的版本。由于我正在测试,我需要弄清楚如何禁用它,因为我会经常更改文件。

尝试在网上搜索此内容,但无法真正找到我要查找的内容。

我目前在 localhost 上运行它,但更改的文件只是 HTML

编辑:

我知道我的文件没有问题,因为如果我在新浏览器中打开它,它会加载新版本的页面。

我正在尝试使用 chrome 进行测试。

编辑2:

另外,被更改的文件是通过require.js加载的,所以不是URL中输入的直接文件

4

7 回答 7

7

如果您打开 chrome 开发人员工具并点击设置按钮(开发人员工具面板右下角的齿轮图标),弹出窗口中应该有一个“禁用缓存”选项

于 2013-01-01T22:14:37.843 回答
7

我注意到您在 EDIT2 中的问题中提到您正在使用 require.js。如果不想禁用浏览器缓存,可以设置 RequireJS config urlArgs 选项。Require.js 有一个配置选项,您可以使用它来禁用正在缓存的文件。

这是 Require.js 文档的摘录:Require.js urlArgs

urlArgs:附加到 RequireJS 用于获取资源的 URL 的额外查询字符串参数。当浏览器或服务器未正确配置时,最有用的是缓存 bust。示例缓存破坏设置

urlArgs: urlArgs: "bust=" + (new Date()).getTime()

在开发过程中,使用它可能很有用,但是请务必在部署代码之前将其删除。

以下是它的外观示例:

requirejs.config({
    urlArgs: "bust=" + (new Date()).getTime(),  
    paths: {
        "jquery": "libs/jquery-1.8.3",
        "underscore": "libs/underscore",
        "backbone": "libs/backbone"
    },
});

require(["jquery", "underscore", "backbone"],
    function ($, _, Backbone) {
        console.log("Test output");
        console.log("$: " + typeof $);
        console.log("_: " + typeof _);
        console.log("Backbone: " + typeof Backbone);
    }
);
于 2013-01-06T01:45:00.773 回答
1

如果我们要检查文件系统上的脚本而不是本地 Web 服务器,我会选择这个,而不是检查 location.host(在这种情况下是一个空字符串):

var require.urlArgs = (window.location.protocol == 'file:') ? 'bust='+new Date().getTime() : ''
于 2013-05-28T16:50:23.790 回答
1

当我有这种疑问时,我所做的就是在 url 的末尾添加一个随机参数。

例子:

http://localhost/foo/bar.html?randomParam=873738424

这会禁用浏览器缓存响应的可能性。这可以手动或以编程方式完成,因为这是一个非常简单的解决方案。

如果存在无法识别的参数,通常应用程序不会出错。

于 2013-01-01T22:02:55.173 回答
0

尝试在重新加载页面之前清除浏览器的缓存(ctrl+shift+delete)。

您也可以按 Shift 并单击重新加载,以便刷新文件并且不使用缓存。

于 2013-01-01T22:13:28.107 回答
0

包含在头部

<meta http-equiv="Expires" CONTENT="0">
<meta http-equiv="Cache-Control" CONTENT="no-cache">
<meta http-equiv="Pragma" CONTENT="no-cache">
于 2013-01-01T22:02:56.763 回答
0

忽略:使用 r.js 编译时似乎不允许使用函数。:(

支持 BarDev,这样的事情怎么样:

requirejs.config({
    urlArgs: (function(){
        return (location.host=='localhost') ? 'bust='+(new Date().getTime()) : '';
    }())
});

现在您可以将代码留在其中,而不必担心在生产中无意中破坏缓存。

于 2013-02-26T18:51:56.310 回答