如何在一个节点上使用requirejs,jquery和d3 express webserver

有一段时间我一直在挣扎,但我没有取得任何进展。 我总是遇到意想不到的事情。

我想支持node.js(express)中的浏览器代码,它使用require.js,jquery和d3.js基于http请求input参数构build图(svg)

我遇到的问题是,一旦requirejs被初始化,它将始终返回相同的jquery和d3.v2模块,并且这些都将(针对每个客户端http请求)开始在同一个DOM(jsdom)实例上执行它们的操作。 最终的结果是graphics混合在一起。

一旦require.js就足够简单了,但是这将使我更新所有现有的浏览器代码,大量使用require.js模块和依赖项pipe理

所有关于如何解决这个问题的技巧,或者指示代码的指针,都会受到热烈的赞赏!

谢谢

彼得

最终解决这个问题的方法是将build立“浏览器”环境的node.js代码与也在浏览器中运行的实际模块分开。

所以当一个http请求进入时,stream程就是现在

  • 加载jsdom node.js模块并创build一个html文档和窗口

  • 在那个文档中确保添加一个加载require.js的脚本元素(浏览器版本,不是node.js r.js脚本)

  • 在窗口的“load”事件监听器中,通过jsdom获取加载的requirejs模块。 这我可以做var requirejs = window.require

  • configurationrequirejs模块(requirejs.config调用)

  • 使用node.js require方法显式加载所有本地节点模块(而不是requirejs)

  • 最终调用“浏览器”代码

我认为有更好的方法(这肯定是有点绕路),但至less现在是成功的。

也许有人来这里,并find这个有用的

彼得