namelesscoder / typo3-cms-fluid-precompiler
Requires
- typo3/cms-backend: ^8.7 || ^9
- typo3/cms-core: ^8.7 || ^9
- typo3/cms-extbase: ^8.7 || ^9
- typo3/cms-fluid: ^8.7 || ^9
- typo3fluid/fluid: ^2.3
This package is auto-updated.
Last update: 2024-09-12 04:23:19 UTC
README
命令行工具,它扫描您的TYPO3站点并编译(不渲染)Fluid模板文件。简单来说,通过解析和编译所有模板而不渲染它们来预热Fluid模板缓存。
同时作为基本代码检查工具 - 任何错误都会导致模板无法编译,并将特定于解析的扩展消息(如“传递给ViewHelper的未声明参数”)作为失败消息呈现。
安装
仅通过composer提供
composer require namelesscoder/typo3-cms-fluid-precompiler
目的
此工具的目的是允许Fluid模板在编译(缓存)之前无需渲染每个模板,正如通常在Fluid模板被编译之前所必需的。
意图是启用
- 开发/持续集成(可选的失败退出代码)和不可编译模板的报告。
- 当模板不可编译时,输出包含缓解建议的相当详细的输出。
- 能够作为部署脚本的一部分“预热”所有Fluid模板的编译状态。
此工具仅支持符合TYPO3模板文件夹命名约定的模板的预编译 - 这意味着只有存在于每个扩展的默认路径的模板才会被编译。这意味着模板应该位于EXT:$extkey/Resources/Private/Templates
,布局应该位于EXT:$extkey/Resources/Private/Layouts
,部分应该位于EXT:$extkey/Resources/Private/Partials
。任何不在这些路径中的模板文件都将被忽略。
用法
所有参数可以根据需要组合,所有参数都有一个短名称(如-h
)和一个长名称(如--help
)。只有一个参数 - -e
或 --extension
- 需要参数值。
打印此帮助文本
./vendor/bin/fluid-precompile -h
./vendor/bin/fluid-precompile --help
预编译每个已安装扩展中的每个模板。
./vendor/bin/fluid-precompile
预编译特定已安装扩展中的每个模板。
./vendor/bin/fluid-precompile -e my_extension
./vendor/bin/fluid-precompile --extension my_extension
静默输出
./vendor/bin/fluid-precompile -s
./vendor/bin/fluid-precompile --silent
详细输出
./vendor/bin/fluid-precompile -v
./vendor/bin/fluid-precompile --verbose
在任意不可编译模板上失败(退出代码1)
./vendor/bin/fluid-precompile -f
./vendor/bin/fluid-precompile --fail
CI用法
此工具还可以与Composer的--require-dev
一起使用,并在持续集成框架中调用,以防您想防止任何不可编译或容易出错的模板被提交到您的项目。
我建议以下命令进行检查
./vendor/bin/fluid-precompile -e $EXTKEY -v -f
这将尝试编译扩展$EXTKEY
(您必须定义/替换)中的所有模板,并详细输出(包括任何失败消息和打印所有模板的状态),最后如果检测到任何不可编译的模板,则失败(但如果有多个失败,仍会报告所有失败)。
额外效果:此操作会对您的Fluid模板文件执行基本的代码检查,以确保它们可以被正确解析。请注意,这并不意味着您的模板也渲染正确;代码检查不考虑诸如TypoScript变量或可能缺失的部分等问题,它仅验证您使用的语法。
关于自定义实现的说明
完全有可能实现自己的模板预编译逻辑 - 而且速度非常快。如果您查看此工具附带的FluidPrecompiler
类的源代码,您会发现要求过于简单
- 您需要TYPO3上下文,以包括缓存定义(使用自定义引导应用程序类来完成此操作 - 如果您在现有的TYPO3上下文中进行此操作,则不需要此类操作)。
- 您需要构建一个针对特定扩展的RenderingContext实例 - 一旦您拥有实例,就可以覆盖设置以提供不同的模板路径。
- 预编译(在Fluid术语中,预热)结果包含有关所有检测到的文件及其各自状态和任何失败原因的信息,如果模板无法编译。
这使得在例如TYPO3后端模块中实现自定义预热功能变得相当容易,作为在缓存刷新后触发的钩子,作为您扩展安装过程的一部分,等等。
当您遇到似乎需要自定义实现的情况时,请考虑以下问题
- 您是否在模板文件命名中破坏了MVC - 遵守MVC是否更好?
- 将您的Fluid模板文件放置在默认位置是否更好,按照惯例?
- 您的渲染设置可能过于复杂吗 - 例如,它是否需要大量的自定义视图初始化?
- 您是否将模板文件放置在
fileadmin
中?那么请紧急考虑将它们放在扩展中。