我有一个现有的站点,它使用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副本,指向一个单独的窗口,用于不同的同时请求,这意味着我的视图/模型的单独上下文堆栈等。
答案 0 :(得分:1)
我没有足够的上下文来解决这个问题,如何进行分段加载,但听起来与此问题相似,所以可能会有一些提示:
How to use requirejs, jquery and d3 in a node express webserver
不确定,但在新的vm上下文中运行代码也可能是解决方案的一部分:
http://nodejs.org/api/vm.html#vm_vm_runinnewcontext_code_sandbox_filename