角度指令的UMD模式

时间:2016-12-08 22:05:09

标签: javascript angularjs angularjs-directive directive umd

我希望在npm上开源一个角度指令,我试图想出最常用的模式。怎么样?我有3个问题:

!function(name, make) {
  make = make()

  // 1. Is this line needed?
  var angular = require('angular')

  // 2. Is this line needed?
  angular.module(name, []).directive(name, make)

  if (typeof module != 'undefined') module.exports = make
  else this[name] = make

  // 3. Is this line needed?
  if (typeof define == 'function') define(function() { return make })
}('exampleDirective', function() {
  return function() {
    return {
      link: function (scope, label, atts) {}
    }
  }
});
  1. 是否需要require('angular')或假设角度变量存在是否安全?
  2. 是否有必要在我的定义中调用angular.moduleangular.directive,或者只有消费应用才能这样做?
  3. AMD环境是需要这个还是module.exports或全球足够?

1 个答案:

答案 0 :(得分:1)

<强> 1

  // 1. Is this line needed?
  var angular = require('angular')

没有。使用您的库的应用程序必须始终导入自己的AngularJS版本。

<强> 2

  // 2. Is this line needed?
  angular.module(name, []).directive(name, make)

是。应用程序需要在其依赖项列表中列出您的模块name,如下所示:

var myApp = angular.module('myApp',[name]);

第3

  // 3. Is this line needed?
  if (typeof define == 'function') define(function() { return make })
}('exampleDirective', function() {
  return function() {
    return {
      link: function (scope, label, atts) {}
    }
  }
});

没有。您可以将指令放在模块上,其他开发人员也可以使用它。