【发布时间】:2022-02-09 18:08:19
【问题描述】:
我将使用一个有代表性的例子来解释我的问题。
假设我有这两个配置文件:
# product-conf.file
seo_title: general_title
seo_description: seo_description
seo_canonical: seo_canonical
product_id: general_id
title: general_title
intro: general_intro
.
# service-conf.file
seo_title: general_title
seo_description: seo_description
seo_canonical: seo_canonical
service_id: general_id
title: general_title
products: list_products
如您所见,前 3 行(配置字段)完全相同。我实际上对这些文件使用 YAML。我想在可维护的文件中包含一些代码,并将它们包含在调用中。我需要一个预处理器来处理这些。比如:
# snippet-seo.file
seo_title: general_title
seo_description: seo_description
seo_canonical: seo_canonical
.
# product-conf-master.file
@include snippet-seo
product_id: general_id
title: general_title
intro: general_intro
.
# service-conf-master.file
@include snippet-seo
service_id: general_id
title: general_title
products: list_products
预处理器将读取/masters/*中的所有主文件,处理所有调用并将它们替换为来自/snippets/的适当sn-p并将结果保存在/中
我正在使用@ 进行通话,但我可以选择适合所选预处理器的任何其他格式。我使用这种方式是因为它非常类似于 SASS 指令 @extend 或 @include。
我可以实现这一目标的最佳和最简单的方法是什么? node 的包是我的首选。
【问题讨论】:
-
您是否考虑过使用合并密钥工具将文件组合成一个组合 YAML 文件来定义公共部分并直接使用它(区分在顶级名称上使用什么)或写出不同的 YAML来自这个组合的文件?
-
是的,这可能会有所帮助。有了您的输入,我现在已经能够找到有关此的更多信息(yaml.org/type/merge.html)但是,我仍然不知道使用什么来预处理(合并)这些文件。这些文件的使用者需要处理的文件。就像浏览器需要 CSS 而不是 SASS 来透视一样。
-
对于预处理,您需要使用一些通用模板。但是,如果您使用合并键和单个源 YAML,则可以使用几行 Python 代码轻松拆分该源。
标签: node.js npm yaml preprocessor populate