javascript - Gulp:访问添加的乙烯基属性
问题描述
当我通过流管道传输时,如何访问添加到 Gulp 乙烯基文件对象的属性?
如果我问错了问题,这是我的推理。
我正在使用 Gulp 4,并希望使用gulp-front-matter从文件顶部提取 yaml 数据,然后在流的下游将其发送到像pug这样的 html 模板包中。根据 gfm 文档...
“从文件中提取
YAML Front-Matter
标题,将其从文件对象中删除contents
并将新frontMatter
属性添加到文件对象中。”
我了解到 Gulp 使用具有属性的Vinyl 文件对象options.contents
,并且可以具有任何附加options.{custom}
属性。我如何至少访问乙烯基文件对象以最终将添加的frontMatter
属性通过管道传输到哈巴狗?
我最好的尝试是这个......
return src('file.md')
.pipe(frontMatter())
.pipe(gulpPug({ /* vinyl.options.frontMatter */ }));
编辑:现在,我正在尝试编写自己的转换流,该转换流将访问乙烯基对象自定义属性并将其通过管道传输到gulp-pug。
解决方案
我已经做了。
鉴于原始流以 gulp-front-matter 推送修改后的乙烯基文件对象结束,我能够通过添加我自己的读取传入乙烯基对象的转换流来访问新的 yaml 属性。我包含的示例没有任何 Gulp 4 任务实现,它只需运行node index.js
.
const { Transform } = require('stream');
const { src, dest } = require('gulp');
const Vinyl = require('vinyl');
const frontMatter = require('gulp-front-matter');
const streamToArray = require('stream-to-array');
function fmData() {
return (
new Transform({
readableObjectMode: true,
writableObjectMode: true,
transform(chunk, encoding, callback) {
if (Vinyl.isVinyl(chunk)) {
this.push(chunk.frontMatter);
}
callback();
}
})
)
}
streamToArray(
src('file.md')
.pipe(frontMatter())
.pipe(fmData())
).then(array => {
console.log(array);
});
包括 npmpackage.json
样式依赖项。
"dependencies": {
"gulp": "^4.0.0",
"gulp-front-matter": "^1.3.0",
"stream-to-array": "^2.3.0",
"vinyl": "^2.2.0"
}
说实话,乙烯基文件对象正在等待读取,尽管这样做需要在流管道中完成。我在 MNUG 观看了 2013 年的演讲,阅读了免费的代码营教程,并查看了节点流文档以完成此操作。
推荐阅读
- string - sed 复杂字符串(单引号和双引号 & / 空格...)
- go - 在 Golang 中将可变大小的 []byte 转换为 int64
- sql - SQL 搜索:包含单个字符 (§) + 数字
- javascript - 如何计算表单中的所有值?
- git - 如何在不使用 Git 的情况下运行 docker-compose.yml?
- python - 如何在文本文件中查找字符串并在上方和下方输出特定行
- java - 为什么不能创建 ObservableField 数组?
- php - 使用元键获取具有自定义字段值的所有帖子,并从另一个字段值循环查询结果
- python - Pip 无法安装枕头
- java - Swing Worker 无法更新模态 jdialog 中的 GUI 组件