silverstripe / recipe-plugin
安装 SilverStripe recipes 的辅助插件
Requires
- php: ^8.1
- composer-plugin-api: ^2
Requires (Dev)
README
介绍
此插件增强 composer 功能,允许安装 "silverstripe-recipe" 包。这些 recipes 允许以下功能
- 提供项目资源文件的能力。这些文件在安装时复制到相应的项目根位置,并且可以安全地由开发者修改。在随后的 recipe 更新中,composer 会通知用户项目文件是否已更新,并确保新文件在 recipe 中引入时被复制。
- Recipes 是可组合的,因此需要多个 recipes 的资源或依赖项可以相互包含,而不是重复内容。
- Recipes 也可以用作基础 composer 项目。
- 一个
require-recipe
命令,可以将 recipe 内联到根 composer.json 中,允许开发者自定义 recipe 依赖项,而不必强制包含所有要求。 - 一个
update-recipe
命令,用于升级 recipe 到新版本。
安装
composer require silverstripe/recipe-plugin
示例输出
创建新项目
Recipes 可以引入任何现有项目(即使不是基于 silverstripe 的基础项目创建的)
composer init composer require silverstripe/recipe-cms
或者,您可以根据现有的 recipe 创建一个新项目
composer create-project silverstripe/recipe-cms ./myssproject
内联 recipes
您可以内联之前安装的 recipe,或者您希望在主项目中包含依赖项的新 recipe。通过内联 recipe,您将促进其要求,以及其项目文件,提升到主项目中,并从依赖项中删除 recipe 本身。
这可以通过 update-recipe
完成,该命令将更新 recipe,或者通过 require-recipe
安装新 recipe。
注意,如果您要运行此命令,您必须首先通过正常的 composer 命令安装 recipe,或者安装 recipe 插件
composer init composer require silverstripe/recipe-plugin composer require-recipe silverstripe/recipe-cms
或者
composer init composer require silverstripe/recipe-cms composer update-recipe silverstripe/recipe-cms
删除 recipe 依赖项或文件
任何通过 recipe 安装的项目文件,或者通过内联 recipe 安装的任何模块都可以轻松删除。随后的 recipe 更新不会重新安装任何这些文件或依赖项。
为了确保这一点,所有内联模块和所有已安装文件的记录都存储在 composer.json 中,如下所示。
{ "extra": { "project-files-installed": [ "mysite/code/Page.php", "mysite/code/PageController.php" ], "project-dependencies-installed": { "silverstripe/admin": "2.0.x-dev", "silverstripe/asset-admin": "2.0.x-dev", "silverstripe/campaign-admin": "2.0.x-dev" } } }
要删除文件,只需从您的项目安装文件夹中删除它,但不要修改 project-files-installed
(因为这是 composer 知道不重新安装的方式)。
同样,要删除模块,使用 composer remove <module>
,它将被删除。如上所述,不要修改 project-dependencies-instaleld
,否则该模块将在随后的 composer update-recipe
中重新安装。
撤销删除的项目文件/依赖项
如果您已删除模块或文件并希望重新安装它,您应从 'project-files-installed' 或 'project-dependencies-installed' 中删除相应的条目,然后再次运行 composer update-recipe <recipe>
。
文件或模块将被重新安装。
删除 recipes
由于 recipe 的安装将所有依赖项内联并传递给根项目,因此没有自动删除过程。要删除 recipe,您应手动删除通过 composer remove <module>
不再需要的任何模块。
recipe 的 provide
引用也可以安全删除,尽管它除了禁用对 update-recipe
的未来调用外,没有实际效果。
不内联安装或升级 recipes
如果需要,可以省略菜谱的可选内联行为。只需使用composer命令require
和update
分别替代require-recipe
和update-recipe
。这将不会禁用项目文件功能,但不会直接内联菜谱,从而保持根composer.json文件不会过于杂乱。
如果您已经内联了一个菜谱,则必须手动移除任何不想要的内联需求,随后需要使用require
包含该菜谱。
请注意,使用此方法时,无需在根项目中包含silverstripe/recipe-plugin
即可使其生效。
菜谱composer.json模式
菜谱类型应遵循以下规则
- 除了项目文件外,没有强制资源。
- 菜谱不应依赖于
autoload
,因为这些在内联时会被丢弃。同样,不应使用任何*-dev
或其他仅限根项目的选项,因为这些在根项目外会被忽略。唯一例外是当这些值仅对基础项目有用时。 type
必须是silverstripe-recipe
require
必须将silverstripe/recipe-plugin
作为依赖项。extra.project-files
必须声明为通配符模式列表,匹配菜谱根目录中的文件,这些文件应复制到根项目中。这些资源的相对路径是等效的。- 必须声明
extra.public-files
,对于任何应复制到public
网络文件夹的文件。如果项目没有公共文件夹,这些文件将复制到根目录。请注意,所有公共文件都必须提交到菜谱的public
文件夹。
一个示例菜谱
{ "name": "silverstripe/example-recipe", "description": "Example silverstripe recipe", "type": "silverstripe-recipe", "require": { "silverstripe/recipe-plugin": "^1.0", "silverstripe/recipe-cms": "^5.0", "silverstripe/blog": "^4.0", "silverstripe/lumberjack": "^3.0", }, "extra": { "project-files": [ "mysite/_config/*.yml", "mysite/code/MyBlogPage.php" "client/src/*" ], "public-files": [ "client/dist/*" ] }, "prefer-stable": true, "minimum-stability": "dev" }
这个菜谱中的文件将按照以下结构组织
client/
src/
blog.scss
mysite/
_config/
settings.yml
code/
MyBlogPage.php
public/
client/
dist/
blog.css
composer.json