【发布时间】:2015-04-29 13:28:01
【问题描述】:
我正在尝试构建一个 gulp 管道 - 我想将一些 CSS 注入我的 index.html(这工作正常),然后从源代码 index.html 获取所有其他链接并在输出版本中替换它们。
我注意到useref 调用正在破坏输出如果要替换的模板化部分包含HTML 注释(请参阅下面的示例以获取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)
</style>
<link rel="stylesheet" href="styles/lib.css">
<link rel="stylesheet" href="styles/app.css-->" <!--COMMENT>
</head>
<body>
<div>
这个问题在 HTML 中更容易看到,但是COMMENT HTML 注释丢失了它的标签的最后一半,所以后面的所有东西都认为它是一个注释。
我想在替换部分添加评论的原因是评论实际上是一个gulp-inject 语句,它在我执行useref 之前注入了一些其他引用。我将其简化为导致问题的简单 HTML 注释。
这是导致问题的行:.pipe($.useref())
仅供参考,我正在关注John Papa’s course on Pluralsight,他使用这种确切的机制来注入一些CSS,然后替换它们——(inject:css HTML 注释分隔符在useref 之后被破坏):
<!-- build:css styles/app.css-->
<!-- inject:css -->
<link rel="stylesheet" href="/.tmp/styles.css">
<!-- endinject -->
<!-- endbuild -->
我怎样才能让useref() 用正确的链接替换模板但 保持 HTML 注释不变?
谢谢。
【问题讨论】:
-
gulp-useref的版本不同!
标签: javascript gulp gulp-useref