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

标签 perl makefile template-toolkit

我的静态网页由大量模板构建而成,这些模板使用模板工具包的“导入”和“包含”相互包含,因此 page.html 如下所示:

[% INCLUDE top %]
[% IMPORT middle %]

那么 top 可能包含更多文件。

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

有没有像 makedepend 这样的工具对于可以解析模板工具包模板并创建用于生成文件的依赖项列表的 C 文件?

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

最佳答案

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
刚跑ttree -f ttree.cfg将在 dest 重建站点只更新源代码(在 src 中)或在我的库中(在 lib 中)更改的内容。
有关更细粒度的依赖项,请查看 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;
上面的代码显示了所有调用的依赖项(通过 INCLUDE、INSERT、PROCESS 和 WRAPPER)以及从整个 root.tt 中调用的位置。树。所以从这里你可以构建一个 ttree依赖文件。
/I3az/

关于perl - 如何处理 Template Toolkit 中的模板依赖项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2497413/

相关文章:

javascript - 提供可下载的 perl-template 文件

perl - 如何为 Perl 的 localtime() 设置时区?

perl - 如何通过 Excel::Writer::XLSX 添加硬返回?

c - Makefile 文件名约定

regex - 模板工具包在字符串中保留前 20 个字符

Perl Dancer 模板页眉、页脚

perl - 奇怪的$行为: ${\string}

计算下一个 ASCII 字符的 Linux 命令或 Bash 语法

c++ - Linux C++ 对 main 进行 undefined reference

c++ - Makefile 在同一目录中找不到文件