Angularjs 使用Grunt缩小简单角度应用程序时未捕获的对象

Angularjs 使用Grunt缩小简单角度应用程序时未捕获的对象,angularjs,gruntjs,minify,uglifyjs,Angularjs,Gruntjs,Minify,Uglifyjs,我有一个简单的Angular应用程序,定义如下: index.html IndexController.js 正如您所看到的,我已经在定义控制器依赖项时使用Angular的数组语法为缩小过程中的变量损坏做好了准备 然而,当我连接所有这些文件并使用Grunt缩小它们时,就像这样: Grunfile.js head.js只是一个单独的javascript文件,我在其中存储angular.min.js(来自官方源代码)。当我不缩小连接的javascript时,我不会得到这个错误 为完整起见,以下是我的

我有一个简单的Angular应用程序,定义如下:

index.html

IndexController.js

正如您所看到的,我已经在定义控制器依赖项时使用Angular的数组语法为缩小过程中的变量损坏做好了准备

然而,当我连接所有这些文件并使用Grunt缩小它们时,就像这样:

Grunfile.js

head.js
只是一个单独的javascript文件,我在其中存储
angular.min.js
(来自官方源代码)。当我不缩小连接的javascript时,我不会得到这个错误

为完整起见,以下是我的连接和缩小的连接javascript文件:

app.js(作品)

app.min.js(导致错误)


尽管我在缩小之前使用Angular的数组语法定义控制器依赖项,但为什么会发生这种情况?

我在app.js文件中发现的一个错误是,您似乎没有防止
$interpolateProvider
的变量损坏。在app.min.js中,它被简化为一个AngularJS一无所知的
a

这可能就是问题所在

有一个插件,它会自动为您修改变量。非常方便


我是通过电脑知道的。该生成器还提供了一个非常有用的Gruntfile.js,其中显示了grunt ngmin的用法。

有趣的是,我可以将grunt ngmin用于单个连接文件,而不是指定多个控制器和指令(PS.示例中的服务在哪里?)?另外,我想知道它是否考虑了配置依赖关系。我必须承认,在使用angular generator的项目设置中,它只适用于所有情况。它将在已经连接的js文件上运行ngmin步骤。这篇评论很难解释。您应该从角度生成器中检出GrunFile。
<body ng-app="waApp">
    <div ng-controller="IndexController">
        <h3>{[ test ]}</h3>
    </div>
</body>
(function() {

  var waApp = angular.module('waApp', [], function($interpolateProvider) {
    $interpolateProvider.startSymbol('{[');
    $interpolateProvider.endSymbol(']}');
  });

})();
(function() {

  var waApp = angular.module('waApp');

  waApp.controller('IndexController', ['$scope', function($scope) {
    $scope.test = 'Angular Works, and Grunt too.';
  }]);

})();
module.exports = function(grunt) {
  grunt.initConfig({
    pkg: grunt.file.readJSON('package.json'),

    concat: {
      options: {
        banner: '/*! <%= pkg.name %> - v<%= pkg.version %> - ' +
                '<%= grunt.template.today("yyyy-mm-dd") %> */\n'
      },
      dist: {
        src: ['src/browser/js/*.js', 'src/browser/js/**/*.js'],
        dest: 'src/browser/public/js/app.js'
      }
    },

    uglify: {
      options: {
        banner: '/*! <%= pkg.name %> <%= grunt.template.today("dd-mm-yyyy") %> */\n',
        sourceMap: true,
        preserveComments: false,
        mangle: {
          except: ['angular']
        }
      },
      dist: {
        files: {
          'src/browser/public/js/app.min.js': ['<%= concat.dist.dest %>']
        }
      }
    }

  });

  grunt.loadNpmTasks('grunt-contrib-concat');
  grunt.loadNpmTasks('grunt-contrib-uglify');

  grunt.registerTask('default', ['concat', 'uglify']);
};
Uncaught object head.js:18
(anonymous function) head.js:18
(anonymous function) head.js:46
q head.js:19
e head.js:45
ec head.js:48
c head.js:30
dc head.js:30
Wc head.js:29
(anonymous function) head.js:223
a head.js:156
(anonymous function) head.js:43
q head.js:19
c
/*! whataddress - v0.0.1-1 - 2014-06-26 */
(function() {

  var waApp = angular.module('waApp', [], function($interpolateProvider) {
    $interpolateProvider.startSymbol('{[');
    $interpolateProvider.endSymbol(']}');
  });

})();
(function() {

  var waApp = angular.module('waApp');

  waApp.controller('IndexController', ['$scope', function($scope) {
    $scope.test = 'Angular Works, and Grunt too.';
  }]);

})();
/*! whataddress 26-06-2014 */

!function(){angular.module("waApp",[],function(a){a.startSymbol("{["),a.endSymbol("]}")})}(),function(){var a=angular.module("waApp");a.controller("IndexController",["$scope",function(a){a.test="Angular Works, and Grunt too."}])}();
//# sourceMappingURL=app.min.js.map