0

我在浏览器和服务器上都加载了一个 requireJS 模块,以实现一些共享功能。

然而,该模块在每个环境中具有不同的依赖关系:

  • 在节点中,它需要 fs 模块才能加载文件
  • 在浏览器中,它需要 JQuery AJAX 或其他一些 AJAX 库来获取这些文件作为 HTTP 资源。

能够处理在浏览器和服务器之间共享但每个模块具有不同依赖关系的模块的最佳方法是什么?

4

1 回答 1

1

依赖项不需要不同。相反,让您的模块没有任何模块作为依赖项。相反,您需要针对两种不同情况对模块进行参数化,并从服务器和浏览器特定代码传递正确的参数来处理这些情况。一种方法是在调用任何方法之前要求在模块上设置特定属性,并且该属性用于提供必要文件加载功能的对象:

mymodule.fileLoader = fswrapper;

或者

mymodule.fileLoader = ajaxWrapper;

(显然,以上两个片段会分别出现在服务器和浏览器的特定代码中)。另一种选择是将相关对象传递给从模块导出的类的构造函数(如果这是您的模块公开的方式)或将其分配为创建对象的属性。例如

var v = new MyClass(fswrapper);
//or
var v = new MyClass();
v.fileLoader = ajaxWrapper;

这些想法有很多变化,但重点是您应该将文件系统差异从共享模块中抽象出来,而是将其传递给处理相关环境访问的对象。

于 2012-05-27T14:14:34.953 回答