Templatizer - 一个真正的模板引擎用于创建动态资源库

98 阅读4分钟

{{.Templatizer}}

Templatizer的意图是提供一个方便而强大的机制,从现有的模板库中创建一个自定义的项目模板。

Github或Gitlab等Git仓库引擎声称它们支持模板仓库。然而,他们只为我们提供了一种将仓库标记为模板的方法;但我们需要在复制/克隆模板后替换价值"。 老实说,从我的角度来看,这远远不是一个模板机制。

开始使用

Templatizer利用了现有的模板引擎的优势。到目前为止,Templatizer支持Go Template,但它在路线图上提供了其他类型的模板,如Jinja。

Templatizer是作为一个可执行文件从你的本地机器上执行的。因此,与存储库的通信将在你自己的机器上建立,证书不会通过互联网发送。

Templatizer由两部分组成:一个服务器和一个网络应用程序,但作为一个单一的应用程序分布。服务器在16917端口监听来自网络应用程序的请求(这在即将发布的版本中应该被参数化)。网络应用程序使用的端口可以是你本地机器上的任何可用端口。Templatizer会找到一个可用的端口并在你的浏览器上打开Web应用程序。网络应用程序使用的端口目前还不能被指定,但它很快就会被指定(问题)。

安装

正如上节提到的,Templatizer是作为一个单独的应用程序分发的。让我们看看在你的本地机器上安装Templatizer的不同选项。

自制软件

brew tap wesovilabs/tools
brew install templatizer
snap install templatizer

从代码中构建Templatizer

Templatizer的可执行文件可以在文件夹dist ,在运行以下命令后可以找到:

git clone git@github.com:wesovilabs/templatizer.git
cd templatizer
make buildFrontend build

从代码中运行

Templatizer可以从代码中启动,如下:

git clone git@github.com:wesovilabs/templatizer.git
cd templatizer
make buildFrontend run

运行中的Templatizer

  1. 当我们执行templatizer ,网络浏览器就会自动打开。如前所述,我们可以访问Web应用程序的端口,可以是机器上任何可用的端口。

  2. 我们必须输入模板库的值。我们可以配置私人资源库。数据填写完毕后,点击按钮Next

  1. 在这一部分,我们只需要输入变量的值。一旦我们输入了数据,我们就可以点击按钮Process template 。一个名为templatizer.tar.gz 的压缩包将被下载。让我们来解压缩这个压缩包,以获得我们自己的项目模板。

定义你自己的模板

模板是Templatizer的关键所在。模板是一个托管在任何网络仓库的Git仓库。模板将包含要被动态替换的值(变量)。变量可以用于文件的内容,也可以用于文件夹和文件的名称。

为了在模板中定义变量,我们将使用Go Template的指定格式。变量被定义为{{.变量}}。请看下面这个取自Go文件的例子。

package main

import (
	"embed"
	"io/fs"
	"net/http"
	log "{{.logger}}"
)

//go:embed {{.sitePath}}
var content embed.FS

func clientHandler() http.Handler {
	fsys := fs.FS(content)
	contentStatic, _ := fs.Sub(fsys, "{{.sitePath}}")
	return http.FileServer(http.FS(contentStatic))
}

func main() {
	mux := http.NewServeMux()
	mux.Handle("/", clientHandler())
	if err := http.ListenAndServe(":{{.serverPort}}", mux); err != nil {
		log.Fatal(err)
	}
}

为了创建一个可以被Templatozer理解的模板,我们需要在我们的资源库中添加一个YAML文件。按照惯例,这个文件必须命名为.templatizer.yml ,并托管在版本库的根目录下,但我们也可以按自己的方式来做。

#version: v1
#mode: goTemplate
variables:
  - name: logger
    default: github.com/sirupsen/logrus
  - name: serverPort
    default: 3000
  - name: sitePath
    description: Path to the static embedded foler
  - name: DBPassword
	description: DB Password for integration tests
	secret: true
  - name: organization
    description: Name of the GH organization

文件规格

versionmode 的属性可以省略,因为它们在最新版本的 Templatizer 中被忽略了。

除此以外,我们需要定义一个块variables ,其中包含我们模板中使用的变量列表。为了定义每个变量,我们可以使用以下属性:

  • name:这是强制性的,是变量的名称。
  • description:这对使用这个模板的人来说很有用。
  • default:这是一个可选的属性,我们可以定义一个默认值,当用户想使用这个模板时,Templatizer会加载这个值。
  • secret:如果我们设置true ,该字段将在Templatizer网络应用中被呈现为一个password 输入字段。