0

在 gulp-useref 之后使用 gulp-rev 有一个奇怪的问题。我正在使用 gulp-useref 将我所有的 angular、jquery 等连接到一个名为 lib.js 的文件中。

这工作正常,但如果我使用 gulp-rev 将哈希附加到 lib.js 文件名,Visual Studio 和浏览器会抱怨文件中的语法错误。

(FWIW,它抱怨的语句是来自 jquery.js 的 'e.querySelectorAll("*,:x")')。但是,如果我在我的 gulp 任务中注释掉 .pipe($.rev()) 行,一切正常。

但是,当我使用 MD5 或任何散列算法比较 lib.js 和 lib-3654837183.js 时,它们完全相同。那么,为什么浏览器和 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 -->

有任何想法吗?

马库斯

4

1 回答 1

0

看来我在追赶红鲱鱼。名为plain lib.js 的连接文件仍然抛出异常;我只是没有看到它,因为我没有在 VS 中“在项目中包含 lib.js”。当我在 Visual Studio 的异常设置中为“Javascript 抛出的异常”抛出异常时禁用中断时,一切正常。

似乎例外是 Internet Explorer 的一个众所周知的例外: https ://bugs.jquery.com/ticket/13881

对噪音感到抱歉。

于 2016-01-25T16:03:07.240 回答