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

use*_*558 7 javascript node.js angularjs

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

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

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

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

那我该如何分享代码呢?

Rya*_*n Q 8

您将在许多支持多个环境的不同位置看到的内容是将整个返回值从"服务"包装到从闭包传递到初始化函数的参数中.使用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
  }
}()))
Run Code Online (Sandbox Code Playgroud)

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