【问题标题】:Prevent RequireJS from Caching Required Scripts on Nodejs防止 RequireJS 在 Nodejs 上缓存所需的脚本
【发布时间】:2013-03-25 04:55:49
【问题描述】:

我正在使用airbnb's rendr 之类的东西,即my own implementation of sharing backbone code between client and server,使用我在客户端上使用的相同主干模型、视图、集合和模板在服务器上构建完整的 HTML。我的文件/模块被定义为 requirejs 模块,这样我就可以在客户端轻松共享它们。 在开发模式下,我希望 requirejs 在刷新浏览器时从磁盘重新获取/重新加载任何模块(无需重新启动服务器),因此我的服务器渲染使用最新的模板和 javascript 最终为我提供最新的 HTML。

当使用 nodejs 在服务器上使用 requirejs 时,the trick of appending bust parameters to the urlArgs 如下所示不起作用,即服务器不会从光盘重新加载/重新获取任何模块

urlArgs: "bust=v2" 

我想知道,是否可以在节点中从磁盘空间重新加载/重新获取 requirejs 模块而不重新启动服务器?具体来说,这对于模板的the require-text plugin 非常有用。此外,最好只对一组受限的模块应用重新加载。

【问题讨论】:

  • 你又来了! :P 它究竟如何不起作用?另外,我发现urlArgs: "bust=" + (new Date()).getTime() 在您开发时会更好。还有,你为什么不用node的require系统呢?
  • 嗨 c24w :-) 我更新了我的答案。我希望现在更清楚了

标签: node.js caching requirejs


【解决方案1】:

我从来没有这样做过,但快速搜索显示a few options,包括自动重启服务器:

你也可以做一些与此类似的创意:

  • delete require.cache['/home/shimin/test2.js']

您几乎可以肯定地清除 RequireJS 在缓存中的版本,强制它重新加载它,尽管我怀疑节点会再次提供旧文件。

最后,也许看看 hot-reloading,它似乎可以绕过缓存而无需重新启动服务器 (example)。

【讨论】:

  • 感谢提示 delete require.cache[] 在 webpack 监视或 webpack 开发服务器期间,我需要始终从一些 postcss 所需文件中获取最新内容。
【解决方案2】:

和 OP 一样,我一直在寻找一种方法,让使用 RequireJS 的 node 开发更容易、更快捷。在我的例子中,我在 node 中使用带有 grunt watch 任务的 RequireJS,并且希望能够强制 RequireJS 始终从文件系统中获取最新版本的模块。很高兴,我找到了一个非常simple solution

我不得不通过添加超时稍微修改 Henning Kvinnesland 的建议,但现在它就像一个魅力:

var requirejs = require('requirejs');
// Set up requirejs.config here...
// Disable caching of modules
requirejs.onResourceLoad = function(context, map) {
    setTimeout(function() {
        requirejs.undef(map.name);
    }, 1);
};

【讨论】:

    猜你喜欢
    • 2012-01-09
    • 1970-01-01
    • 1970-01-01
    • 2011-07-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-20
    • 2014-03-01
    • 1970-01-01
    相关资源
    最近更新 更多