【问题标题】:Pattern for sharing a library between angularjs and node.js在 angularjs 和 node.js 之间共享库的模式
【发布时间】:2013-11-30 03:19:47
【问题描述】:
如何在 angularjs 和 node.js 之间共享一个库?
例如,一个 angularjs 服务通常是一段可重用的代码。我们以一个 URL 库为例(挑选并构造 URL)。
同样的库应该可以在 node.js 中使用。
我的限制是我想共享库代码,但我不想将自己限制在浏览器端的任何加载器库中。因此,如果我需要在浏览器中使用 RequireJS,我需要禁用任何加载部分,以便可以在其他地方进行控制。
那么我该如何分享代码呢?
【问题讨论】:
标签:
javascript
node.js
angularjs
【解决方案1】:
您将在许多支持多种环境的不同地方看到将“服务”的整个返回值包装到从闭包传递给初始化函数的参数中。使用 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
}
}()))
如果需要,您仍然可以通过节点需要语法或 Angular 的依赖注入来拥有依赖项,但服务可能需要在从一个项目移动到另一个项目时进行修改。