我的静态网页由大量模板构建而成,这些模板使用模板工具包的“导入”和“包含”相互包含,因此 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/