3

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

当使用 nodejs 在服务器上使用 requirejs 时,像下面这样将bust参数附加到 urlArgs 的技巧不起作用,即服务器不会从磁盘重新加载/重新获取任何模块

urlArgs: "bust=v2" 

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

4

2 回答 2

2

我从来没有这样做过,但是快速搜索会显示一些选项,包括自动重启服务器:

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

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

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

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

于 2013-04-04T09:49:36.907 回答
1

与 OP 一样,我一直在寻找一种方法,使使用 RequireJS 的节点开发更容易、更快。就我而言,我watch在节点中使用 RequireJS 和一个 grunt 任务,并且希望能够强制 RequireJS 始终从文件系统获取最新版本的模块。很高兴,我找到了一个非常简单的解决方案

我不得不通过添加超时稍微修改 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);
};
于 2014-07-03T03:02:47.330 回答