我正在开发一个 Web 组件构建过程,该过程获取 HTML 文件的内容并将它们放入我的 javascript 文件中的字符串中。
我想获取内容/src/foo/bar.html
并将它们添加到/dist/foo/bar.js
目前,我正在使用gulp-tap
和fs
读取有效的html,并且我正在使用gulp-string-replace
将字符串添加到我的js文件中,如下所示:
const gulp = require('gulp');
const fs = require('fs');
const replace = require('gulp-string-replace');
const tap = require('gulp-tap');
gulp.task('add-html', function () {
// Use these variables for Gulp-string-replace
const startHTML = "<!-- Start html -->";
const endHTML = "<!-- End html -->";
const regEx = new RegExp(
startHTML + "[\\s\\S]*" + endHTML,
"i"
);
let htmlInjection;
return gulp.src(['dist/**/*.js'])
.pipe(tap(function (file, t) {
// get to html file
const htmlFile =
file.path
.replace(/\.js$/i, ".html")
.replace(/dist/, "src");
// read html, clean it up and add it to htmlInjection
fs.readFile(htmlFile, function (err, data) {
if (!err && data) {
const cleanHTMLString =
data.toString()
.split('\n')
.join('')
.replace(/\s+/g, ' ')
.trim();
htmlInjection =
startHTML +
cleanHTMLString +
endHTML;
}
});
}))
.pipe(replace(regEx, htmlInjection)) // Replace <!-- Start html --> foo <!-- End html --> with <!-- Start html --> <bar></bar> <!-- End html -->
.pipe(gulp.dest('dist'));
});
这还不起作用,因为发生时htmlInjection
未定义replace
。我相信这是由于管道是异步的。
我在引用这个问题在 Gulp 3.9.1 中的管道之间传递一个变量,并且想知道这种方法是否是最好的方法?
有没有更简单的方法来实现我在这里尝试的目标?
谢谢!