我有一个 Gulp 任务,它使用 gulp-inline-css 从 CSS 文件中获取 HTML 文件和内联样式。我的任务的原始版本对每个 HTML 文件使用相同的 CSS 文件。现在我想让任务根据它正在处理的 HTML 文件的文件名选择一个 CSS 文件。
我gulp-tap
用来获取文件名。该inliner()
函数获取 CSS 文件的路径并运行所有内联内容。
以下 Gulp 任务为每个文件运行 inliner() ,但似乎无法将结果注入流中。我尝试了几种不同的方法,但似乎无法将 inliner() 的结果返回到原始流中。
gulp.task('inline', inline);
function inline() {
return gulp.src('dist/**/*.html')
.pipe(tap( (file, t) => {
let fileName = path.basename(file.path);
let cssPath = getStylesheetPathFromHtmlPath(fileName);
return inliner(cssPath);
}))
.pipe(gulp.dest('dist'));
}
function inliner(cssPath) {
var css = fs.readFileSync(cssPath).toString();
var mqCss = siphon(css);
var pipe = lazypipe()
.pipe(inlineCss, {
applyStyleTags: false,
removeStyleTags: true,
preserveMediaQueries: true,
removeLinkTags: false
})
.pipe(replace, '<!-- <style> -->', `<style>${mqCss}</style>`)
.pipe(replace, `<link rel="stylesheet" type="text/css" href="css/${getStylesheetNamespace(cssPath)}.css">`, '')
.pipe($.htmlmin, {
collapseWhitespace: true,
minifyCSS: true
});
console.log(cssPath)
return pipe();
}
我是否错误地使用 gulp-tap?这似乎是一个非常简单的用例。