2016-01-22 88 views
0

我有一个奇怪的问题,使用gulp-rev之后gulp-useref。我使用gulp-useref将所有的angular,jquery等连接到一个名为lib.js的文件中。奇怪的语法错误与gulp-rev

这工作正常,但如果我使用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 --> 

任何想法?

马库斯

回答

0

看来我追一个红色的鲱鱼。名为plain lib.js的连接文件仍然抛出异常;我只是没有看到它,因为我没有在VS中“在项目中包含lib.js”。 当我在Visual Studio中的异常设置中禁用了抛出“JavaScript中抛出的异常”的情况时,事情工作得很好。

看来异常是一个众所周知的一个针对Internet Explorer: https://bugs.jquery.com/ticket/13881

很抱歉的噪音。