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提供