【问题标题】:How to create composer library package that auto generates code when included如何创建包含时自动生成代码的作曲家库包
【发布时间】:2014-08-03 19:06:07
【问题描述】:

每次我创建一个新的 PHP 项目时,我基本上都使用我采用和喜欢的相同 MVC 文件夹结构,我使用相同的基类、接口和相同的 PDO DAL 实现。 当我创建一个新项目时,我将所有需要的文件复制并粘贴到新项目中,除了一些更改之外,例如更改命名空间(以匹配新项目名称)等。

我想,为什么不创建一个简单的脚本来复制这些文件和文件夹,并进行额外的更改。 所以现在,当我创建一个新项目时,我只需运行脚本并自动生成代码,这样就更好了。

然后我想,我希望它更简单。我不想把代码保存在我的电脑里,我想把它保存在 Github 上,而且由于我使用和喜欢 composer,我想我会把 Github 项目做成一个 composer 包。 但是当尝试实现它时,我意识到我不能让新的作曲家包自动生成我想要的代码,或者至少我不知道如何让它做到这一点。 我尝试用谷歌搜索它没有成功。

有谁知道如何做到这一点?

【问题讨论】:

    标签: php github package composer-php auto-generate


    【解决方案1】:

    我认为这里不需要生成代码。只需将您的骨架文件添加到您的 Git 存储库并使用 Composer 的create-project 功能。见第三点:

    您可以使用 Composer 从现有包创建新项目。这相当于执行 git clone/svn checkout,然后执行供应商的 composer 安装。

    有几个应用程序:

    1. 您可以部署应用程序包。
    2. 例如,您可以查看任何软件包并开始开发补丁。
    3. 具有多个开发人员的项目可以使用此功能引导初始应用程序进行开发。

    支持这种方法的主要 PHP 项目的一个示例是 Laravel。来自其installation instructions

    通过作曲家

    Laravel 框架使用Composer 进行安装和依赖管理。如果您还没有,请从 installing Composer 开始。

    现在你可以通过终端发出以下命令来安装 Laravel:

    composer create-project laravel/laravel your-project-name --prefer-dist
    

    此命令将下载 Laravel 的新副本并将其安装到您当前目录中的新 your-project-name 文件夹中。

    如果您愿意,也可以手动下载Laravel repository from Github 的副本。接下来在您手动创建的项目目录的根目录中运行composer install 命令。此命令将下载并安装框架的依赖项。

    编辑:

    要在composer create-project 完成后运行脚本,您应该能够使用Composer script

    在 Composer 的术语中,脚本可以是 PHP 回调(定义为静态方法)或任何命令行可执行命令。脚本对于在 Composer 执行过程中执行包的自定义代码或包特定的命令很有用。

    您可能正在寻找post-create-project-cmd 事件:

    create-project 命令执行后发生

    根据您的脚本是静态 PHP 方法还是 shell 可执行文件,您应该将其定义如下(根据 Composer 文档修改):

    {
        "scripts": {
            "post-create-project-cmd": "MyVendor\\MyClass::postUpdate"
        }
    }
    

    {
        "scripts": {
            "post-create-project-cmd": "my-shell-script arg1 arg2"
        }
    }
    

    【讨论】:

    • 我尝试按照建议使用创建项目功能。它确实将所有需要的文件复制到了一个新项目中。但我的问题是我需要执行的更改,我仍然需要手动执行。是否可以选择运行我编写的某种预脚本?还是我错过了什么?
    • @user3736997,我仍然不确定您所说的手动更改是什么意思。您提到了“更改命名空间(以匹配新项目名称)等。”在原始问题中。是这样吗?
    • 是的。我需要更改名称空间和一些变量。我已经编写了一个脚本,可以进行所有所需的更改,效果很好。我的问题是如何将脚本包含到项目中并在使用 create-project 功能时自动运行它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-12-06
    • 1970-01-01
    • 2020-02-27
    • 2017-10-25
    • 1970-01-01
    • 2015-10-22
    • 2015-08-20
    相关资源
    最近更新 更多