Javascript Grunt构建导致Angular应用程序在距离上崩溃

Javascript Grunt构建导致Angular应用程序在距离上崩溃,javascript,angularjs,node.js,bundling-and-minification,Javascript,Angularjs,Node.js,Bundling And Minification,我正在使用Grunt并执行cmd“Grunt build”来创建一个包含AngularJS应用程序的分发文件夹 作为一个独立的应用程序,我的应用程序运行良好。一旦我为应用程序创建了一个发行版,应用程序就会很快崩溃 我在F12工具控制台中看到的是: 10$digest()已达到迭代次数。流产 我怀疑我的.tmp目录中有一个名为vendor.js的文件,并且由于控制器依赖项注入变量将注入的控制器参数(例如“$scope”到“a”)弄乱,因此无法正确缩小、丑化和/或压缩该文件,即使我使用的是ngAnn

我正在使用Grunt并执行cmd“Grunt build”来创建一个包含AngularJS应用程序的分发文件夹

作为一个独立的应用程序,我的应用程序运行良好。一旦我为应用程序创建了一个发行版,应用程序就会很快崩溃

我在F12工具控制台中看到的是:

10$digest()已达到迭代次数。流产

我怀疑我的.tmp目录中有一个名为vendor.js的文件,并且由于控制器依赖项注入变量将注入的控制器参数(例如“$scope”到“a”)弄乱,因此无法正确缩小、丑化和/或压缩该文件,即使我使用的是ngAnnotate

请参阅,我正在使用UglifyJs并在Uglify和Concat之前调用ngAnnotate,但我无法从useMinPrepare中删除UglifyJs,或者我有其他错误,例如我的dist目录中甚至没有创建脚本目录:

useminPrepare: {
  html: '<%= yeoman.app %>/index.html',
  options: {
    dest: '<%= yeoman.dist %>',
    flow: {
      html: {
        steps: {
          js: ['concat', 'uglifyjs'],
          css: ['cssmin']
        },
        post: {}
      }
    }
  }
},

所以我走错了路,认为平滑与丑陋、浓缩或缩小是错误的

该错误在
grunt-service
中未发生,但仅在使用
grunt-build:dist创建dist包后发生

所以,在我创建dist软件包之前,我的Angular应用程序工作得很好,这在某种意义上是一种欺骗

问题是,我最初在Index.html文件中有一个
元素

在某个时候,我创建了一个自定义元素指令
,它使用了相同的
templateUrl=scripts/navigation/navigationMobile.html
,但我忘记了从我的Index.html中删除
元素,而
正是要替换它的

无论出于何种原因,10$digest()迭代已达到。流产仅在运行
grunt build
并创建缩小的、丑陋的vendor.js文件后发生,在使用
grunt service
进行开发和测试时未发生,但我不知道错误仅在
grunt build
后出现的确切原因


也许有人能回答这个问题。

我注意到我们需要在两种情况下提示ng annotate:

  • 子类化(ES6类),当超类在构造函数上有可注入项而子类没有构造函数时
  • $get提供程序的方法
摘要检查中的错误来自仅在
grunt build
中运行的任务,或者与您从ng include创建指令相关的任务

当您从ng include更改为将其作为指令的模板时,angular将暂停编译,直到下一个摘要最终加载模板时,即使它已经在$templateCache中

参考:$compile(参见templateUrl)

最后,我要看一看ngtemplates,因为它避免了在线请求,angular编译来自外部资源的模板时会出现顺序错误,这可能是该指令或其任何父级的实现上的错误,它没有正确调用$compile

要修复此错误,只需打开Gruntfile.js文件,并在task cssmin和task uglify中添加行extDot:“last”

Ex:

cssmin: {
    all: {
        files: [{
            expand: true,
            cwd: srcDir,
            src: '**/*.css',
            dest: buildDir,
            ext: '.min.css',
            extDot: 'last'
        }]
    }
},
...
uglify: {
    all: {
        files: [{
            expand: true,
            cwd: srcDir,
            src: ['**/*.js', '!**/*-spec.js'],
            dest: buildDir,
            ext: '.min.js',
            extDot: 'last'
        }]
    }
},

运行
grunt发球:dist
,这将从dist文件夹启动测试服务器,以便您可以查看错误是否发生在您要将其移动到的应用程序之外。是的,我在grunt Service中遇到了相同的错误:dist您应该在
标记上添加
ng strict di
属性,以便在未正确注释依赖项时强制Angle崩溃。这样,您至少可以看到这是否是导致您的问题的原因,并更容易地解决问题。
cssmin: {
    all: {
        files: [{
            expand: true,
            cwd: srcDir,
            src: '**/*.css',
            dest: buildDir,
            ext: '.min.css',
            extDot: 'last'
        }]
    }
},
...
uglify: {
    all: {
        files: [{
            expand: true,
            cwd: srcDir,
            src: ['**/*.js', '!**/*-spec.js'],
            dest: buildDir,
            ext: '.min.js',
            extDot: 'last'
        }]
    }
},