codenamephp / installer
使用模板文件夹设置项目的安装程序,例如从 GitHub 模板仓库
Requires
- php: ^8.2
- symfony/filesystem: ^6.0
- twig/twig: ^3.0
Requires (Dev)
- mikey179/vfsstream: ^1.6.8
This package is auto-updated.
Last update: 2024-09-14 12:34:25 UTC
README
使用模板文件夹设置项目的安装程序,例如从 GitHub 模板仓库
安装
最简单的方法是通过 composer。只需在您的命令行中运行 composer require codenamephp/installer
,它将为您安装最新版本。
用法
想法是在子文件夹中有一个启动脚本。脚本本身仅设置安装程序和依赖项,从而也设置了安装程序实际上执行的内容。将其放入自己的文件夹的原因是使文件与其它文件明确分离,以便安装程序可以轻松删除自己。
首先使用 composer 引入安装程序包,这样我们就可以开始使用其类。
最佳实践是创建一个 .installer
文件夹和一个 install.php
文件。以下示例将渲染 .installer/templates
文件夹中的文件到父文件夹中,替换所有现有文件,并用数组中的变量替换模板中的所有变量。一旦完成,将删除 .installer
文件夹。
路径中也有变量替换。在这个例子中,使用了一个框架替换器,所以常见的文件夹名称也可能作为变量出现,不会意外替换(如这个例子中的“vendor”)。前缀和后缀的默认值是 '__',因此如果存在文件 .installer/templates/files/__vendor__/__componentName__.json
,它将变成 files/codenamephp/some.component.json
,这样您就可以动态地更改最终结构(例如,有一个与您的命名空间匹配的文件夹结构)。
.installer/install.php
:
use de\codenamephp\installer\StepExecutor; use de\codenamephp\installer\steps\CopyTemplateFolder; use de\codenamephp\installer\steps\CreateFolders; use de\codenamephp\installer\steps\DeleteFilesAndFolders; use de\codenamephp\installer\steps\SequentialCollection; use de\codenamephp\installer\templateCopy\directoryHandler\CreateDirectoryWithSymfonyFilesystem; use de\codenamephp\installer\templateCopy\fileHandler\RenderWithTwigAndDumpWithSymfonyFilesystem; use de\codenamephp\installer\templateCopy\variableReplacer\FramedStringReplace; use Symfony\Component\Filesystem\Filesystem; use Twig\Environment; use Twig\Loader\FilesystemLoader; return call_user_func(static function() { require_once __DIR__ . '/../vendor/autoload.php'; $filesystem = new Filesystem(); $variableReplacer = new FramedStringReplace(); $componentName = basename(trim(shell_exec("git config --get remote.origin.url")), '.git'); $variables = [ 'vendor' => 'codenamephp', 'componentName' => $componentName, 'namespace' => implode('\\', array_merge(['de', 'codenamephp'], explode('.', $componentName))) ]; (new StepExecutor( new SequentialCollection( new CopyTemplateFolder( new \de\codenamephp\installer\templateCopy\RecursiveIterator( new CreateDirectoryWithSymfonyFilesystem($filesystem,$variableReplacer), new RenderWithTwigAndDumpWithSymfonyFilesystem($filesystem, $variableReplacer, new Environment(new FilesystemLoader('/', '/'))) ), __DIR__ . '/templates', dirname(__DIR__), $variables ), new CreateFolders($variableReplacer, $filesystem, [dirname(__DIR__) . '/src'], $variables), new DeleteFilesAndFolders($variableReplacer, $filesystem, [__DIR__], $variables), ) ))->run(); });
.installer/templates/composer.json
:
{ "name": "{{vendor}}/{{componentName}}", "description": "", "type": "library", "license": "Apache-2.0", "require": { "php": "^8.0" }, "require-dev": { "dealerdirect/phpcodesniffer-composer-installer": "^0.7", "phpcompatibility/php-compatibility": "^9.0", "squizlabs/php_codesniffer": "^3.5", "mikey179/vfsstream": "^1.6.8" }, "autoload": { "psr-4": { "{{namespace|replace({'\\':'\\\\'})}}\\": [ "src" ] } }, "autoload-dev": { "psr-4": { "{{namespace|replace({'\\':'\\\\'})}}\\test\\": [ "test" ] } } }
.installer/templates/README.md
:
# {{componentName}}        ## Installation Easiest way is via composer. Just run `composer require {{vendor}}/{{componentName}}` in your cli which should install the latest version for you. ## Usage
此示例可以是 GitHub 模板仓库的一部分。在 GitHub 上创建存储库后,可以将存储库克隆到本地,然后运行 composer install && php .installer/install.php && composer update
,存储库即可用于开发。
此示例可以根据存储库需求进行修改。由于安装程序本身只执行自定义步骤,因此可以在存储库中通过实现 \de\codenamephp\installer\steps\iStep
接口并添加到安装程序中添加自定义步骤。