在 angular 中使用全局对象的良好做法

Good practice to use global objects in angular

我正在使用 nw.js 框架和 angular 创建桌面应用程序。在我的控制器、服务等中,我经常使用这样的 Node.js 模块:

module.exports = function(ngModule) {
    ngModule.service('User', ['$q', function ($q) {
        var self = this;
        var fs = require('fs');
        var path = require('path');
        var gui = require('nw.gui');
    }]);
};

这是一个好习惯吗?或者也许更好地创建一些服务或将模块放入 $rootScope ?

通常 requires 不应保留在服务构造函数中(除非它们是有条件的):

var fs = require('fs');
var path = require('path');
var gui = require('nw.gui');

ngModule.service('User', ['$q', function ($q) {
  ...
}]);

上面的代码需要使用像 proxyquire 这样的包来模拟 Node 模块并单独测试服务。

DI 应该为应用程序引入额外的灵活性和可测试性。在单独的模块中拥有可以轻松存根的依赖项通常是处理此问题的首选方法:

angular.module('node', [])
.constant('gui', require('nw.gui'))
...

...

angular.module('app', ['node'])
.service('User', function ($q, gui, ...) {
  ...
});