我有一个现有的网站,它使用 requirejs 来处理所有事情,从加载 jQuery 和 Backbone 等库到定义 Backbone View 、模型等。我试图让它在服务器端使用 node.js 进行渲染,因此每个请求都需要一个完全独立的上下文堆栈。
Requirejs 的多版本支持几乎满足了我的需要。它允许为 future 的加载声明特殊的上下文。 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 副本,指向一个单独的窗口来处理不同的同时请求,这意味着我的 View /模型等有一个单独的上下文堆栈。
最佳答案
我没有足够的上下文来回答这个问题,分段加载是如何进行的,但听起来与这个问题类似,所以那里可能有一些提示:
How to use requirejs, jquery and d3 in a node express webserver
不确定,但在新的虚拟机上下文中运行代码也可能是解决方案的一部分:
http://nodejs.org/api/vm.html#vm_vm_runinnewcontext_code_sandbox_filename
关于javascript - 使用 requirejs 创建完全独立的上下文堆栈,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13869343/