Странная синтаксическая ошибка с gulp-rev

У меня странная проблема с использованием gulp-rev после gulp-useref. Я использую gulp-useref для объединения всех моих угловых, jquery и т. Д. В файл с именем lib.js.

Это работает нормально, но если я использую gulp-rev для добавления хэша к имени файла lib.js, Visual Studio и браузеры жалуются на синтаксическую ошибку в файле.

(FWIW, заявление, на которое он жалуется, это 'e.querySelectorAll("*,:x") ", которое пришло из jquery.js). Но если я закомментирую строку.pipe($. Rev()) в моей задаче gulp, все будет работать.

Однако, когда я сравниваю lib.js и lib-3654837183.js, используя MD5 или любой алгоритм хэширования, они абсолютно одинаковы. Так почему браузеры и VS будут жаловаться на синтаксические ошибки для файла с одним именем и будут полностью в порядке с тем же файлом, но с другим именем?

gulp.task("build-prod", ["inject"], function() {
    log("building production environment");
    var cssFilter = $.filter("**/*.css", { restore: true });
    var htmlFilter = $.filter("**/*.cshtml", { restore: true });
    var jsLibFilter = $.filter("**/" + config.optimized.lib, { restore: true });
    var jsAppFilter = $.filter("**/" + config.optimized.app, { restore: true });

    return gulp
        .src(config.layout.devFile)
        .pipe($.plumber())
        .pipe($.print())
        .pipe($.useref({ searchPath: "./" }))
        .pipe(cssFilter)
        .pipe($.minifyCss({ processImport: false }))
        .pipe($.rev())
        .pipe(gulp.dest(config.root))
        .pipe(cssFilter.restore)
        .pipe($.print())
        .pipe(jsLibFilter)
        .pipe($.uglify())
        .pipe($.rev()) //if I comment this out, it works
        .pipe(gulp.dest(config.root))
        .pipe(jsLibFilter.restore)
        .pipe(jsAppFilter)
        .pipe($.ngAnnotate())
        .pipe($.uglify())
        .pipe($.rev())
        .pipe(gulp.dest(config.root))
        .pipe(jsAppFilter.restore)
        .pipe($.revReplace({ replaceInExtensions: [".cshtml"] }))
        .pipe(htmlFilter)
        .pipe($.rename(config.layout.productionFileName))
        .pipe(gulp.dest(config.sharedViews));
});

И мой блок сборки в.cshtml:

<!-- build:js js/lib.js -->
<!-- bower:js -->
<script src="bower_components/jquery/dist/jquery.js"></script>
<script src="bower_components/angular/angular.js"></script>
<script src="bower_components/angular-bootstrap/ui-bootstrap-tpls.js"></script>
<script src="bower_components/angular-route/angular-route.js"></script>
<script src="bower_components/bootstrap/dist/js/bootstrap.js"></script>
<!-- endbower -->
<!-- endbuild -->

Есть идеи?

Маркус

1 ответ

Кажется, я преследовал красную сельдь. Объединенный файл с именем plain lib.js по-прежнему выдавал исключение; Я просто не видел этого, так как не включил lib.js в проект в VS. Когда я отключил прерывание при вызове "Исключение, выброшенное из Javascript" в настройках исключений в Visual Studio, все работало просто отлично.

Похоже, что исключение является известным для Internet Explorer: https://bugs.jquery.com/ticket/13881

Извините за шум.

Другие вопросы по тегам