如何处理Template Toolkit中的模板依赖项?

5 perl makefile template-toolkit

我的静态网页是由一大堆模板构建的,这些模板是使用Template Toolkit的"import"和"include"包含在内的,所以page.html看起来像这样:

[% INCLUDE top %]
[% IMPORT middle %]
Run Code Online (Sandbox Code Playgroud)

然后top可能包含更多文件.

我有很多这些文件,他们必须运行以创建各种语言的网页(英语,法语等,而不是计算机语言).这是一个非常复杂的过程,当一个文件被更新时,我希望能够使用makefile或类似的东西自动重新制作必要的文件.

有没有像makedependC文件这样的工具可以解析模板工具包模板并创建一个依赖列表以供在makefile中使用?

或者有更好的方法来自动化这个过程吗?

dra*_*tun 3

Template Toolkit确实带有自己的命令行脚本,用于ttree构建 TT 网站 ala make。

以下是ttree.cfg我在 Mac 上的 TT 网站项目中经常使用的文件:

# directories
src = ./src
lib = ./lib
lib = ./content
dest = ./html

# pre process these site file
pre_process = site.tt

# copy these files
copy = \.(png|gif|jpg)$

# ignore following
ignore = \b(CVS|RCS)\b
ignore = ^#
ignore = ^\.DS_Store$
ignore = ^._

# other options
verbose
recurse
Run Code Online (Sandbox Code Playgroud)

只需运行ttree -f ttree.cfg即可重建站点,仅更新源(在)或我的库(在 )中dest更改的内容。srclib

对于更细粒度的依赖关系,请查看Template Dependencies.

更新- 这是我通过子类化获取依赖项列表的尝试Template::Provider

{
    package MyProvider;
    use base 'Template::Provider';

    # see _dump_cache in Template::Provider
    sub _dump_deps {
        my $self = shift;

        if (my $node = $self->{ HEAD }) {
            while ($node) {
                my ($prev, $name, $data, $load, $next) = @$node;
        
                say {*STDERR} "$name called from " . $data->{caller}
                    if exists $data->{caller};
        
                $node = $node->[ 4 ];
            }
        }
    }
}


use Template;

my $provider = MyProvider->new;

my $tt = Template->new({
    LOAD_TEMPLATES => $provider,
});

$tt->process( 'root.tt', {} ) or die $tt->error;

$provider->_dump_deps;
Run Code Online (Sandbox Code Playgroud)

上面的代码显示了所有调用的依赖项(通过 INCLUDE、INSERT、PROCESS 和 WRAPPER)以及从整个root.tt树中调用的位置。因此,您可以从此构建一个ttree依赖文件。

/I3az/