代码之家  ›  专栏  ›  技术社区  ›  JackTheKnife

AngularJS+Grunt ngAnnotate和单引号

  •  1
  • JackTheKnife  · 技术社区  · 7 年前

    我正在尝试缩小我的应用程序,但无法查看Grunt ngAnnotate,因为它会抛出错误

    错误:由于分析错误,无法处理源 分析正则表达式时出错:正则表达式无效:/[A-Za-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);
            };
          }
        }
      };
    });
    

    Grunfile文件。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 回复  |  直到 7 年前
        1
  •  1
  •   Nikolaj Dam Larsen    7 年前

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

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

    这应该允许 ngAnnotate 编译。