{{.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
-
当我们执行
templatizer,网络浏览器就会自动打开。如前所述,我们可以访问Web应用程序的端口,可以是机器上任何可用的端口。 -
我们必须输入模板库的值。我们可以配置私人资源库。数据填写完毕后,点击按钮
Next。
- SSH连接将在下一个版本中得到支持。
- 在这一部分,我们只需要输入变量的值。一旦我们输入了数据,我们就可以点击按钮
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
文件规格
version 和mode 的属性可以省略,因为它们在最新版本的 Templatizer 中被忽略了。
除此以外,我们需要定义一个块variables ,其中包含我们模板中使用的变量列表。为了定义每个变量,我们可以使用以下属性:
name:这是强制性的,是变量的名称。description:这对使用这个模板的人来说很有用。default:这是一个可选的属性,我们可以定义一个默认值,当用户想使用这个模板时,Templatizer会加载这个值。secret:如果我们设置true,该字段将在Templatizer网络应用中被呈现为一个password输入字段。