Grunt如何缩小或丑化IIFE?

时间:2015-02-26 18:41:47

标签: javascript angularjs gruntjs iife

在标准grunt serve中,我在我的一个指令中使用IIFE,如下所示:

    (function() {
  "use strict";

  angular.module('napiRest')
    .directive('componentStaffReport', ['$modal', 'ComponentStaffFactory', function ($modal, ComponentStaffFactory) {
      return {
        restrict: 'E',
        transclude: true,
        scope: {
          componentId: '=componentId',
          linkableContent: '=linkableContent'
        },
        templateUrl: 'app/pages/report/component-staff/component-staff-popup.html',
        link: function (scope, element, attr) {
          ComponentStaffFactory.componentId = scope.componentId;
          var modalInstance = null;
          scope.open = function () {
            modalInstance = $modal.open({
              templateUrl: 'ComponentStaffModal.html',
              controller: 'ComponentStaffingCtrl',
              size: 'lg',
              backdrop: true,
              windowClass: 'x-x-large-modal'
            });
            ComponentStaffFactory.modalInstance = modalInstance;
          };
        } //link
      }; //return
    }])
})();

当我使用grunt serve:dist进行部署时,这不起作用。我收到错误:Uncaught TypeError: object is not a function

但是,当我移除周围的IIFE时,它可以正常工作。这是以某种方式引起的,因为uglify或minifying发生在对于dist的咕噜声中吗?

1 个答案:

答案 0 :(得分:1)

似乎问题是由另一个文件中缺少分号引起的。另一个文件是一个角度控制器,最后没有分号。当grunt uglifys代码时,它会将此文件和上面的文件一起创建自己的匿名函数,这当然是编译器所不喜欢的。