用于在angularjs和node.js之间共享库的模式

时间:2013-11-30 03:19:47

标签: javascript node.js angularjs

如何在angularjs和node.js之间共享库?

例如,angularjs服务通常是可重复使用的代码段。我们以URL库为例(挑选并构建URL)。

同一个库应该可以在node.js中使用。

我的约束是我想共享库代码,但我不想将自己限制在浏览器端的任何加载程序库。因此,如果我需要在浏览器中使用RequireJS,我需要禁用任何加载部分,以便可以在其他地方进行控制。

那我该如何分享代码?

1 个答案:

答案 0 :(得分:8)

在许多支持多个环境的不同地方你会看到的是将“service”中的整个返回值包装到从闭包传递给初始化函数的参数中。使用angular来记住的一个问题是,服务可能不应该有其他依赖关系来保持环境不可知(例如,如果这是一个简单的实用程序文件,则不会发生冲突)。

作为一个例子考虑:

(function( myService){

  if (typeof module !== 'undefined' && module.exports ) {
    module.exports = myService;
  } else if( angular ){
    angular.module('yourModule', [])
    .factory('serviceNameHere', function(){ return myService; });
  } else {
    window.myService = myService;
  }

}(function(){
  function foo(){/* Do something */}
  function bar(){/* Do something else */}

  return {
    foo: foo,
    bar: bar
  }
}()))

如果需要,你可以通过节点需要语法或角度的依赖注入来获得依赖关系,但是当服务从一个项目移动到另一个项目时,服务可能需要修改。