nystudio107 / twig-bundle-installer
通过Composer安装、更新和管理Twig模板包
Requires
- php: >=5.4
- composer-plugin-api: ^1.0 || ^2.0
Requires (Dev)
- composer/composer: ^1.0 || ^2.0
- craftcms/ecs: dev-main
- phpstan/phpstan: ^1.4.6
README
Composer的Twig Bundle Installer插件
一个Composer插件,用于在您的templates/vendor/目录中安装和管理Twig Bundles
概述
Twig Bundle Installer是一个Composer安装程序,它会在您的templates/目录中安装和管理Twig Bundles。它引入了Twig 包的概念,并将它们安装到templates/vendor/中,类似于您通常在vendor中安装PHP包的方式。(而且它不会改变任何东西;您的PHP包仍然会保留在vendor中。)
它实现了一个新的Composer包类型twig-bundle,当发布Twig包时应使用该类型。Composer负责一切,Twig Bundle Installer与任何特定的CMS或系统无关。任何使用Twig的东西都可能觉得它很有用。
这允许您以管理的方式在多个项目中安装和更新Twig模板。
为什么这么做呢?
- 停止在项目之间复制有用的Twig片段;轻松包含它们,并保持它们全部更新。
- 与您想要的任何项目的其他开发人员和团队共享有用的Twig组件。
- 在您使用Twig的任何地方重用这些相同的片段;Craft CMS、Drupal、Grav、Symfony...甚至Laravel、Statamic,等等。
- 当您的基组件都集中在一个地方时,提高您的文档。
- 以更方便、灵活和可版本化的方式分发Craft插件的示例模板。
- 像使用PHP包一样轻松地利用模板依赖项。
为什么选择Twig Bundle Installer?
我在开发可重用的Twig组件时,最初想到了Twig Bundle Installer中实现的想法。
后来,当我在一个有效的基Twig模板设置文章中讨论基础Twig模板层时,这个想法又出现了。
然后,当与一位同事讨论他们如何通过单独的插件管理大型Craft CMS安装中的多个品牌属性时,这个想法又一次出现了。每个品牌网站都有自己的自定义插件,这主要是该网站所需模板的包装器。
所以如果同样的事情发生3次或更多次,我认为尝试它可能是值得的…
使用Twig Bundle Installer
消费Twig Bundles
将Twig Bundles添加到您的项目中
要在自己的项目中使用Twig Bundles,首先需要将Twig Bundle Installer添加到项目的composer.json
{
"require": {
"nystudio107/twig-bundle-installer": "^1.0.0"
}
}
因为Twig Bundle Installer是一个Composer插件,您还需要在composer.json文件中通过config:allow-plugins告诉Composer可以使用此插件
{
"config": {
"allow-plugins": {
"nystudio107/twig-bundle-installer": true
}
}
}
然后,您可以像添加任何Composer包一样添加您想要使用的Twig Bundle的供应商/包名称
{
"require": {
"nystudio107/twig-bundle-installer": "^1.0.0",
"nystudio107/test-twig-bundle": "^1.0.0"
}
}
然后只需执行
composer install
Twig Bundle Installer所做的就是对于类型为twig-bundle的Composer包,它不会将它们放入vendor/目录,而是将它们放入templates/vendor/目录。
在上面的例子中,您最终会得到类似以下的内容
❯ tree -L 4 templates/vendor
templates/vendor
└── nystudio107
└── test-twig-bundle
├── CHANGELOG.md
├── composer.json
├── LICENSE.md
├── README.md
└── templates
├── fizz-buzz.twig
├── elementary-my-dear-watson.twig
└── five-minute-read.twig
3 directories, 8 files
这意味着您可以在多个项目中安装和更新这些Twig Bundles。它们可以是您创建的,也可以是其他人创建的。
它的工作方式与任何Composer包一样,因为Twig Bundle Installer只是Composer的一个层面,它将类型为twig-bundle的包路由到不同的目录。
您熟悉的命令,如composer require、composer update等,都会按预期工作。
包含来自Twig Bundle的模板的示例
{% include 'vendor/nystudio107/test-twig-bundle/templates/fizz-buzz.twig' %}
Twig Bundle注意事项
由于Twig Bundle Installer正在查找项目根目录中名为templates/的目录,该目录指向您的Twig模板目录
- 您应该将
templates/vendor/目录视为只读,就像您对vendor/目录所做的那样。 - 如果您在其他地方存储模板,您可以从
templates/创建一个符号链接或别名到您存储模板的位置,或者您可以通过设置环境变量TEMPLATES_VENDOR_DIR(在环境本身中,或者在您使用Dotenv时在项目根目录的.env文件中)。 - 如果您将
vendor/目录排除在Git仓库之外,您可能还想将templates/vendor/添加到您的.gitignore中。Twig Bundle Installer会自动为您在templates/vendor/目录中放置.gitignore文件。
.gitignore文件示例
/vendor
/templates/vendor
本地仓库
如果您想在修改它们的同时使用本地Twig Bundles,您可以通过Composer Repositories设置来实现。
{
"require": {
"nystudio107/bundle-twig-installer": "^1.0.0",
"nystudio107/twig-test-bundle": "^1.0.0"
},
"repositories": [
{
"type": "path",
"url": "../../twig/*",
"options": {
"symlink": true
}
}
]
}
其中url设置是指向您的源Twig Bundles所在路径的位置。
创建Twig Bundles
要创建一个Twig Bundle,创建一个包含Composer.json文件的目录,其外观如下
{
"name": "nystudio107/test-twig-bundle",
"description": "Test bundle of Twig templates for Bundle Installer",
"version": "1.0.0",
"keywords": [
"twig",
"twig-bundle",
"composer",
"installer",
"bundle"
],
"type": "twig-bundle",
"license": "MIT",
"minimum-stability": "stable"
}
...但是显然将name更改为您的vendor/bundle名称,并填写您自己的描述等。关键是您必须将type设置为twig-bundle。
"type": "twig-bundle",
然后,您希望将其发布到GitHub或其他Git仓库,并在Packagist.org上发布,以便其他人可以通过Composer安装它。
如果您以前从未在Packagist上发布过包,只需遵循Packagist.org上的说明,或阅读Packagist和PHP生态系统文章。
您可以使用Test Twig Bundle作为参考的示例。
Twig Bundle Installer路线图
该项目目前可以正常使用,但它也处于萌芽阶段。我很想看看人们会找到什么用途,或者可能完全用不上。
一些想法
- 捆绑包可以包含CSS和JavaScript,安装器为其他要消费的内容构建
manifest.json。 - 特定框架的工具可以通过在前端自动发布捆绑包来补充Twig Bundle Installer。
- 技术上,这里描述的技术也可以很好地用于Antlers或Blade以及其他模板系统。
由nystudio107提供
