【问题标题】:What exactly is the difference between project and library types in composer?作曲家中项目和库类型之间到底有什么区别?
【发布时间】:2021-10-01 14:26:14
【问题描述】:

我很难弄清楚这一点;我也对create-project 命令的连接(如果有的话)感到困惑。

据我所知,installcreate-project 之间的唯一区别是 post-root-package-installpost-create-project-cmd 钩子的执行...

有人能解释一下吗?

我的目标是建立一个运行 create-project 的作曲家基础设施,这将建立一个项目框架(创建和设置目录权限、创建默认配置文件、创建空白数据存储)

【问题讨论】:

    标签: php composer-php


    【解决方案1】:

    composer 中的项目类型和库类型到底有什么区别?

    实际上,没有。它不会影响作曲家的执行方式。您可以将installcreate-project 与这两种包类型一起使用。

    此元数据用于在解析 composer.json 时通知插件、IDE 甚至 packagist.org,但在普通安装中,使用其中一个没有实际区别。

    (Docs on package types)

    据我所知,installcreate-project 之间的唯一区别是 post-root-package-installpost-create-project-cmd 钩子的执行。

    docs 是你的朋友:

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

    任何时候你执行create-projectinstall 也会被执行。这意味着install 钩子也会被执行。

    首先它通过适当的 CVS(通常是 git)克隆整个包,然后立即执行 composer install。默认情况下,它会删除 CVS 信息(例如 .git 目录),除非使用 --keep-vcs 选项。

    create-project 对引导应用程序很有用,因此应用程序的目录设置超出了下载作曲家的依赖项的作用。可以创建骨架目录结构等。

    通常会有一个适当的包(可以是required 到应用程序中)和一个“应用程序骨架”包,其中包括目录结构并依赖于原始包。

    【讨论】:

    • 在深入研究之后,我发现正确的问题可能是“requirecreate-project 之间有什么区别”,答案很简单,有一些细微差别:requirepackage 添加为已初始化的根包的要求,而create-projectpackage 的“副本”作为未初始化目录中的根包。细微差别是,如果我们谈论的是本地包,create-project 实际上会为引用的包创建一个符号链接,这可能既不直观又危险。到目前为止我是对的吗?
    • create-project 克隆包,然后使用包的composer.jsoncomopser.lock 文件执行installrequire 将包添加到composer.json,然后到composer.lock,然后执行install。这两个命令并不是特别相关。
    【解决方案2】:

    我根据实验发布了对我的问题的更简洁的答案:

    1. projectlibrary 类型有什么区别?

    composer 而言,绝对没有。不过,有些插件可能会实现逻辑以区别对待这两种包类型。

    1. 这与requireinstallcreate-project 命令有何关系?

    无论如何。包类型中的projectcreate-project 中的project 无关。

    1. create-project 是如何工作的?

    假设我们正在谈论一个<package>。我们有 2 个工作流程:

    • composer init <project_path> && composer require <package>
    • composer create-project <package> <project_path>

    第一个工作流将创建一个空白根包并添加<package> 作为要求。

    第二个工作流会将<package>“克隆”到<project_path>作为根包。

    注意:如果您使用本地 path 类型的存储库进行开发,create-project 实际上会创建 <project_path> 作为指向 <package> 源目录的符号链接。这是path repos 的默认行为,可能是composer 错过了需要以不同方式对待create-project。这可能会造成一堆混乱(因为您可能无意中更改并添加到<package>s 源,同时认为您只是在编辑project_path)。因此,对于本地开发和测试,您最好使用cp -A 而不是composer create-project

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-01-08
      • 2016-08-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-14
      • 2020-06-28
      • 1970-01-01
      相关资源
      最近更新 更多