为什么gulp-useref似乎不适用于替换部分中的注释?

时间:2015-04-29 13:28:01

标签: javascript gulp gulp-useref

我正在尝试构建一个gulp管道 - 我想在我的index.html中注入一些CSS(这很好)然后从源index.html获取所有其他链接并在输出中替换它们版本

我注意到useref调用正在修改输出,如果要替换的模板化部分包含 HTML注释(请参阅下面的示例,了解行{{ 1}})。用代码演示最简单:

COMMENT(源文件)

index.html

<!-- build:css styles/app.css--> <!--COMMENT--> <link rel="stylesheet" href="/.tmp/styles.css"> <!-- endbuild --> 任务

gulpfile.js

输出(gulp.task('optimizeReplace', function () { var assets = $.useref.assets({ searchPath: './' }); return gulp .src('./src/client/index.html') .pipe(assets) .pipe(assets.restore()) .pipe($.useref()) //THIS IS THE PROBLEM LINE; IF INJECT IS NOT RUN FIRST IT IS MANGLED .pipe(gulp.dest('./wwwroot/')); });

index.html

问题在HTML中更容易看到,但</style> <link rel="stylesheet" href="styles/lib.css"> <link rel="stylesheet" href="styles/app.css-->" <!--COMMENT> </head> <body> <div> HTML注释会丢失其标记的结尾部分,因此其后的所有内容都认为它是注释。

我想在替换部分中添加注释的原因是注释实际上是gulp-inject语句,在我执行COMMENT之前注入了一些其他引用。我将其简化为导致问题的简单HTML注释。

这是导致问题的一行:useref

仅供参考我跟随John Papa’s course on Pluralsight,他使用这个确切的机制来注入一些CSS然后替换它们 - (.pipe($.useref()) HTML注释分隔符在inject:css之后被破坏了):

useref

如何让<!-- build:css styles/app.css--> <!-- inject:css --> <link rel="stylesheet" href="/.tmp/styles.css"> <!-- endinject --> <!-- endbuild --> 使用正确的链接替换模板,但保持HTML注释不变?

感谢。

3 个答案:

答案 0 :(得分:1)

原因是版本更改检查文档https://www.npmjs.com/package/gulp-useref 这里有一个例子:

gulp.task('optimize', ['templateCache', 'images'], function(){

    var templateCache = config.temp + config.templateCache.files;

    return gulp
    .src(config.index)
    .pipe($.plumber())
    .pipe($.inject(gulp.src(templateCache, {read: false}, {starttag: ''})))
    .pipe($.useref({ searchPath: './' }))
    .pipe(gulp.dest(config.build));
});

希望有所帮助

答案 1 :(得分:0)

评论被删除但有例外。保留IE条件注释,以便您可以在那里发出请求或写一个拉取请求,看看它是否被接受。这是回购:

https://github.com/digisfera/useref

答案 2 :(得分:0)

您可以尝试使用node-useref而不是gulp-useref来保存IE条件注释

<!-- build:js scripts/combined.js   -->
<!--[if lt IE 9]>
<script type="text/javascript" src="scripts/this.js"></script>
<script type="text/javascript" src="scripts/that.js"></script>
<![endif]-->
<!-- endbuild -->

结果将是

<!--[if lt IE 9]>
<script src="scripts/combined.js"></script>
<![endif]-->

或者尝试将您的评论从您的建筑代码中删除:

<!--COMMENT-->
<!-- build:css styles/app.css-->
<link rel="stylesheet" href="/.tmp/styles.css">
<!-- endbuild -->