使用 PHP Composer 开发本地包,然后在部署时复制它

2023-11-30

我有一个本地 PHP 项目(一个网站),我想使用我制作的另一个项目(一个小型​​ Web 框架)作为该网站项目的 Composer 包。我正在同时开发它们,但希望将它们保留为单独的项目;当我部署网站时,我想使用 Composer 将框架项目作为包安装,就像我使用 Guzzle 或任何其他常见 Composer 包一样。

网站项目有以下内容composer.json:

{
    "repositories": [
        {
            "type": "path",
            "url": "/local/path/to/framework/package"
            "options": {
                "symlink": true
            }
        }
    ],
    "require": {
        "my/framework": "dev-master",
        "guzzlehttp/guzzle": "6.3.3"
    }
}

In /local/path/to/framework/package/composer.json I have:

{
    "name": "my/framework",
    "description": "A tiny framework.",
    "autoload": {
        "psr-4": {
            "MyFramework\\": "src"
        }
    }
}

I run php composer.phar update它在我的网站项目中设置了一个指向框架包的符号链接。如果我更新框架中的代码,它会立即可供网站代码使用。这很棒。

但是,稍后我想将网站项目部署到我的网络服务器。对于干净的部署,我有一个部署脚本,它导出网站 git repo 的相应分支的存档副本,然后运行php composer.phar install以确保安装了所有正确的软件包。通过上述配置,部署脚本创建了一个指向框架包的符号链接,当部署工件被压缩并 scp 到 Web 服务器时,这显然是不好的。

如果我删除symlink上面的选项,然后我必须运行php composer.phar update每次我对框架包进行任何更改时,这都很烦人,因为我正在串联开发这些包。但是在部署时,包被复制进来,而不是被符号链接进来;这对于部署很有好处,但它总是复制到master分支(因为我指定dev-master in composer.json).

有没有一种方法可以设置Composer,以便我可以方便地使用本地符号链接包进行开发,但又可以让部署脚本获得框架包的干净副本,而无需进行更改composer.json每次我想部署时?

我还尝试将存储库类型更改为vcs代替path,但是作曲家clones框架包存储库,我真的不需要在本地克隆该存储库vendor/树,无论是在开发还是部署期间。我只是希望能够在开发过程中拥有一个符号链接树(它可以让我即时更新),并安装一个干净的包以进行部署。

我可能不得不“正确”地开发框架项目,即作为一个 Composer 包,用实际的发布版本号进行标记,然后更新我的网站项目以在部署时使用特定版本。不过,我仍然没有找到最简单的方法。


您可以使用作曲工作室 plugin.

它使用单独的文件进行配置,并允许您在开发中使用符号链接并为产品部署进行常规 Composer 安装,而无需接触composer.json.

有了它,您的网站composer.json看起来像一个普通文件:

{
    "require": {
        "my/framework": "dev-master",
        "guzzlehttp/guzzle": "6.3.3"
    }
}

studio.json在项目的根目录中,包含以下内容:

{
    "version": 2,
    "paths": [
        "/local/path/to/framework/package"
    ]
}

你可以告诉插件在哪里定位my/framework。然后,Studio 将从提供的路径对包进行符号链接。

要进行常规安装,只需删除或重命名studio.json, 去除vendor文件夹和composer.lock文件并在部署时再次运行安装。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 PHP Composer 开发本地包,然后在部署时复制它 的相关文章

  • Laravel Eloquent 预加载:加入同一个表两次

    我有一个users表和一个约会桌子 在约会表中 我有两个用户 ID customer id staff id 我想检索所有带有客户姓名和员工姓名的约会 users table id name appointments table id st
  • 如何在 json 中输出 javascript 日期

    我正在尝试时间线图表 http code google com apis visualization documentation gallery annotatedtimeline html Data Format http code go
  • AWS S3从本地主机批量上传php错误

    我在尝试着批次 散装从本地主机 xampp 上传到我的S3 bucket 它似乎适用于大约 6 个项目 然后我收到一条错误消息 cURL 错误说Failed sending network data from http curl haxx
  • SetInterval 函数不适用于 PHP 文件

    我有这样的index html
  • 是否可以在 UML 中可视化一堆函数

    我正在改进一个使用类和函数文件 只是包含各种函数的 php 文件 的内容管理系统 例如 我有一堂课叫Admin以及一个功能文件 其功能包括显示管理员概述 创建新管理员 编辑现有管理员 删除管理员 函数文件使用类并执行 mvc 概念的可视化部
  • PHP 异常处理与 C#

    这是一个非常基本的问题 我希望如此 我所做的大部分异常处理都是使用 C 进行的 在 C 中 任何在 try catch 块中出错的代码都会由 catch 代码处理 例如 try int divByZero 45 0 catch Except
  • 使用 PHP 更新 XML 节点

    我有一个 XML 文件 test xml
  • 在php中获取大于2GB的文件大小的最佳方法?

    我想检查本地驱动器上的文件大小windows OS 但是PHP原生函数filesize 仅当文件大小小于时才有效2GB 大于的文件2GB将返回错误的数字 那么 是否有其他方法来获取大于的文件大小2GB 非常感谢 您始终可以使用系统的文件大小
  • DataTables 第 2 页的分页未调用放大弹出窗口

    所以我有这个启用分页的数据表 我编码了一种方式 以便用户可以编辑表的行 当用户调用它在放大弹出窗口中打开的编辑页面时 它在第 1 页 从第 2 页起都运行良好 DataTable 及其前面停止调用 Magnific Popup 我只是不明白
  • CryptoJS 使用密码加密 AES,但 PHP 解密需要密钥

    我在用CryptoJS https code google com p crypto js AES加密字符串 function doHash msg msg String msg var passphrase aggourakia var
  • 在 mysqli 准备好的语句程序风格中获取最后插入的 id 的正确方法是什么?

    我正在使用 mysqli 准备好的语句在表中插入记录 如下所示 link mysqli connect localhost my user my password world check connection if link printf
  • 通过 post 使用 php 发送 XML

    我知道有很多类似的问题 但我尝试过摆弄所有的解决方案 但似乎无法使其发挥作用 我正在尝试将 xml 直接发布到 Web 服务并获得响应 从技术上讲 我正在尝试连接到freightquote com 您可以在右上角找到该文档this http
  • 如何绕过Access-Control-Allow-Origin?

    我正在一个平台上对我自己的服务器进行ajax调用 他们设置了阻止这些ajax调用的平台 但我需要它从我的服务器获取数据以显示从我的服务器数据库检索到的数据 我的 ajax 脚本正在运行 它可以将数据发送到我的服务器的 php 脚本以允许其处
  • 细胞的 fpdf 对齐

    我正在尝试使用生成 PDFfpdf我有一个小问题 我需要有 2 个单元格 如下所示 Address Line 1 Version Address Line 2 1 0 City 06 05 2011 我尝试过使用MultiCell 但没有运
  • 如何从另一个数组值中过滤数组值并返回新数组? [复制]

    这个问题在这里已经有答案了 我有两个数组 all languages and taken languages 第一个包含所有语言 例如 200 种或其他语言 第二个包含之前选择的语言 从 0 到 200 种 我需要删除所有已采用的语言 ta
  • 自定义 WordPress 画廊 html 布局

    当使用默认媒体上传器在 WordPress 中创建图像库时 WordPress 将图像包装在一堆 HTML 标记中 如何在生成之前覆盖它 以便我可以输出所需的标记并更改创建图库布局的方式 目前 WordPress 生成的代码如下 div d
  • 创建单个随机 Magento 优惠券

    我遇到了一些麻烦 我想要做的是每次有人订阅我们的时事通讯时 在 Magento 中自动生成一个随机优惠券代码 这张优惠券可减 10 美元 并且有exp 订阅后两周的日期 因此 我正在尝试编写一个简单的脚本 当提交 订阅我们的时事通讯 表单时
  • 使用 Xpath 进行部分匹配

    我正在尝试创建一个搜索功能 允许使用 Xpath 按歌曲标题或流派进行部分匹配 这是我的 XML 文件
  • WordPress - 类别和子类别的嵌套列表

    我正在尝试显示带有嵌套子类别的 WordPress 类别列表 到目前为止 我只能获取父类别列表或不包括父类别的子类别列表 但我无法将两者连接在一起 这是我想要创建的结果 Parent Category 子类别 子类别 Parent Cate
  • PHP Json_encode 将空格更改为加号 +

    我有一个网络应用程序 我首先将 JSON 数据存储在 cookie 中 然后每 x 秒保存到数据库 它只是打开与服务器的连接 服务器读取 cookie 它实际上并不通过 POST 或 GET 发送任何内容 当我保存到 cookie 时 我的

随机推荐

  • 获取自定义适配器中的项目列表

    那么 我有一个扩展 ArrayAdapter 的自定义适配器 我想从适配器内获取整个列表 可以这样做吗 我知道在 ArrayAdapter 构造函数中 您传入对象列表并将其存储为 mObjects 但该列表是私有的 我想在构造函数中的自定义
  • Python 2.7 中具有多个函数参数的多重处理

    我正在尝试实现多处理来加速复制循环 但无法让它在 Python27 中工作 这是我的程序的一个非常简化的版本 基于 SO 的文档和其他答案 例如用于多个参数的 Python multiprocessing pool map 我意识到关于多处
  • 使用 JQuery 获取图像的真实尺寸

    给定图像路径列表 如何迭代它们并找到实际的图像尺寸 我假设我必须将它们插入没有宽度或高度属性的 DOM 中 并对它们执行 width 和 height var paths path image png somewhere page jpg
  • 内存映射文件 java NIO

    我了解如何创建内存映射文件 但我的问题是在下面一行中说 FileChannel roChannel new RandomAccessFile file r getChannel ByteBuffer roBuf roChannel map
  • include_next 预处理器指令导致 MSVC 中出现问题

    我知道 inlcude next 恰好是 C 预处理器的 GNU 扩展 我在使用 MSVC 编译 Gnu 库代码时遇到问题 例如 有一个 stdio h 头文件或者更确切地说GNU like
  • Java / NetBeans - 如何进入 jar 文件?

    我在 Netbeans 中有一个 Java 项目 其属性的库部分列出了几个 jar 文件 我在其中一个 jar 文件中发现了一个错误 我想在调试时介入它 这是我到目前为止所做的 我已经找到了源代码 jar 文件 我将该源代码作为一个项目打开
  • 本地运行SAM时如何连接RDS实例?

    我正在使用 SAM 无服务器应用程序模型 在本地测试连接到云中的 Aurora RDS 实例的 Lambda 函数 使用以下命令 sam local invoke lambda function name event event json
  • 如何使用webp图片并支持safari

    由于压缩效果更好 我尝试在整个网站中使用 webp 图像 不过我知道 safari 不支持 webp 图像是使用加载的background image url img img webp 然后我应用其他background特性 我明白了
  • 在c中使用逗号运算符

    我读过逗号运算符用于分配表达式 并将正确的表达式提供给左值 但是为什么这个程序在不使用括号的情况下将左表达式分配给左值呢 我正在使用 Turbo C 编译器 int b 2 int a a b 2 b 5 prints 10 as expe
  • lua代码反混淆

    我最近下载了一些 lua 代码 我发现里面有一些混淆的字符串 这让我想知道那里使用了什么样的混淆技术 有人有想法吗 local code 27 76 117 97 81 0 1 4 4 4 8 0 64 0 0 0 64 67 58 92
  • Swift macOS 弹出窗口检测更改暗模式

    从图像中可以看出 我有一个弹出窗口 我必须确保当屏幕模式发生变化 深色模式或浅色模式 时 弹出窗口的颜色会发生变化 颜色取自资源 如下所示 NSColor named backgroundTheme withAlphaComponent 1
  • 在 Project Reactor 中处理数据的最佳方法

    在项目反应器中处理数据的最佳方法是什么 使用平面地图 public Mono
  • 旋转 MKMapView 的内容

    我需要根据罗盘值旋转mapView的内容 float myHeadingValue newHeading trueHeading 为了旋转地图 我使用这个 mapView setTransform CGAffineTransformMake
  • 删除任务栏上的 Google Chrome 固定图标

    我想删除任务栏上的 Google Chrome 固定图标 卸载不会删除图标 我修改了代码以仅删除 Google Chrome lnk 我想要做的 了解 VBS 是循环遍历所有用户文件夹 而不仅仅是当前用户 我认为当前用户定义为strCurr
  • 使用其他类的类字段

    我对 C 和 OOP 还很陌生 所以请耐心等待 我有两个具有不同命名空间的类 namespace Class1 public class class1 public double x public double y namespace Cl
  • Scala 泛型:如何声明类型必须是案例类?

    我有几个案例类count场地 默认情况下为 1 我在代码中进行了归约 对重复项进行分组并对值求和以查找每个对象的数量 例如 case class Person name String count 1 personList groupBy n
  • 为什么 objdump 显示该汇编语言指令的操作码为空?

    我有以下汇编代码 global start section text start add byte eax al 编译和链接后 我尝试查看操作码 objdump d eax o eax o file format elf32 i386 Di
  • PYTHON:有类似ast.literal_eval()的函数吗?

    我在使用 ast literal eval 时遇到问题 在下面的示例中 我只想将字符串 myText 转换为字典 但 ast literal eval 尝试评估 lt main myClass instance at 0x000000005
  • 无法使用 pymssql 将 Unicode 发送到 SQL Server

    我在通过 pymssql 将 unicode 发送到 SQL Server 时遇到问题 In 1 import pymssql conn pymssql connect host hostname user me password pass
  • 使用 PHP Composer 开发本地包,然后在部署时复制它

    我有一个本地 PHP 项目 一个网站 我想使用我制作的另一个项目 一个小型 Web 框架 作为该网站项目的 Composer 包 我正在同时开发它们 但希望将它们保留为单独的项目 当我部署网站时 我想使用 Composer 将框架项目作为包