1

我有一个现有的网站,它使用 requirejs 来完成从加载 jQuery 和 Backbone 等库到定义 Backbone 视图、模型等的所有内容。我正在尝试使用 node.js 在服务器端呈现它,因此需要一个完全独立的每个请求的上下文堆栈。

Requirejs 的多版本支持几乎满足了我的需求。它允许为未来的加载声明一个特殊的上下文。var context1 = require.config({context: "abc123"}); 然后允许: context1(['item'], function(item){}); 'item' 将被单独加载,即使它已经被加载。不幸的是,我需要所需的项目也能够要求和定义隔离到该上下文堆栈中的项目。

Requirejs 几乎有这个特性集与内部的 takeGlobalQueue 函数。不幸的是,这个函数期望获取自最近一次调用以来定义的所有项目,因此可以获取在不同上下文堆栈上定义的项目。

我需要的是一种让requirejs给我一个真正独立的define/require实例的方法,它通过未来的调用来保持这种分离。

我不想重写我的整个站点以不使用 requirejs 和/或需要一些插件来处理我所有的 requirejs 调用。我应该为此破解 r.js 源代码吗?这是否违反 AMD 规范?

更新 1:在 nodejs 上说我使用 domino/jsdom 创建了一个窗口上下文。然后,我将 jQuery/zepto 和 Backbone 的副本附加到该窗口,以便 Backbone.View.make 在该窗口中创建一个元素。然后我可以加载我的实际应用程序堆栈,然后该堆栈继承 backone 的那个副本,这样一切都“正常工作”,就好像它在浏览器中一样。无需破解 jquery/backbone 源代码。但是我需要一个单独的 Backbone 副本,指向一个单独的窗口来处理不同的同时请求,这意味着我的视图/模型等的单独上下文堆栈。

4

1 回答 1

1

我没有足够的上下文来回答这个问题,如何分段加载,但听起来与这个问题相似,所以那里可能有一些提示:

如何在 node express 网络服务器中使用 requirejs、jquery 和 d3

不确定,但在新的 vm 上下文中运行代码也可能是解决方案的一部分:

http://nodejs.org/api/vm.html#vm_vm_runinnewcontext_code_sandbox_filename

于 2012-12-17T03:23:00.097 回答