AngularJS + Grunt ngAnnotate和单引号

时间:2017-12-08 19:55:51

标签: angularjs gruntjs grunt-contrib-concat

我试图缩小我的应用但是不能通过Grunt ngAnnotate,因为它会抛出错误

  
    

错误:由于解析错误,无法处理源     解析正则表达式时出错:正则表达式无效:/ [A-Z-z0-9!#_;?:& .-'] /:字符类中的范围乱序(3:22)

  

在一个看起来像

的指令上
myApp.directive('allowedChars', function() {

  var EMAIL_REGEXP = /[A-Za-z0-9!#_\?:&\.- ']/;


  return {
    require: 'ngModel',
    restrict: '',
    link: function(scope, elm, attrs, ctrl) {
      // only apply the validator if ngModel is present and Angular has added the allowed characters validator
      if (ctrl && ctrl.$validators.chars) {

        // this will overwrite the default Angular email validator
        ctrl.$validators.email = function(modelValue) {
          return ctrl.$isEmpty(modelValue) || EMAIL_REGEXP.test(modelValue);
        };
      }
    }
  };
});

Gruntfile.js看起来像

module.exports = function(grunt) {
    //grunt wrapper function 
    grunt.initConfig({
        pkg: grunt.file.readJSON('package.json'),
        ngAnnotate: {
            options: {
                singleQuotes: true
            },
            app: {
          files: [
            {
              expand: true,     // Enable dynamic expansion.
              cwd: './app/js/controllers/',      // Src matches are relative to this path.
              src: ['**/*.js'], // Actual pattern(s) to match.
              dest: './app/js/build/controllers',   // Destination path prefix.
              ext: '.min.js',   // Dest filepaths will have this extension.
              extDot: 'first'   // Extensions in filenames begin after the first dot
            },
            {
              expand: true,     // Enable dynamic expansion.
              cwd: './app/js/services/',      // Src matches are relative to this path.
              src: ['**/*.js'], // Actual pattern(s) to match.
              dest: './app/js/build/services',   // Destination path prefix.
              ext: '.min.js',   // Dest filepaths will have this extension.
              extDot: 'first'   // Extensions in filenames begin after the first dot
            },  
            {
              expand: true,     // Enable dynamic expansion.
              cwd: './app/js/directives/',      // Src matches are relative to this path.
              src: ['**/*.js'], // Actual pattern(s) to match.
              dest: './app/js/build/directives',   // Destination path prefix.
              ext: '.min.js',   // Dest filepaths will have this extension.
              extDot: 'first'   // Extensions in filenames begin after the first dot
            },                              
          ],
            }
        },
    });

    //load grunt tasks
    grunt.loadNpmTasks('grunt-contrib-concat');
    grunt.loadNpmTasks('grunt-contrib-uglify');
    grunt.loadNpmTasks('grunt-ng-annotate'); 

    //register grunt default task
    grunt.registerTask('default', ['ngAnnotate', 'concat', 'uglify']);    
}

1 个答案:

答案 0 :(得分:1)

如错误所示,您的正则表达式无效。尝试转义一些特殊字符。像这样:

var EMAIL_REGEXP = /[A-Za-z0-9\!\#\_\?\:\&\.\- \']/;

这应该允许ngAnnotate编译。