【问题标题】:Javascript dependency in PHP libraryPHP 库中的 Javascript 依赖项
【发布时间】:2020-12-18 22:37:20
【问题描述】:

我有一个依赖于 Javascript 存储库(也是我的库)的 PHP 库。在 PHP 库中,我不想要 CDN url 或缩小副本。 PHP 库使用了一个框架(也是自制的),它将把 JS 文件连同我网站上的所有资源一起编译。

我不想更改 JS 库的任何内容,也不想创建 composer.json 文件。我知道git submodule 存在,尽管我不确定如何使用它,并且我读过它是处理依赖项的一种非常糟糕的方式,而且我猜我的子模块不会被 composer 包含在内?

还有其他方法可以在 PHP 库中包含 JS 依赖项吗? (除了复制+粘贴文件)(和/或使子模块成为一个好选择的提示)

【问题讨论】:

  • & 我知道我应该为想要使用 js 库的人创建一个 CDN 版本和一个缩小的 javascript 副本,但这不是我现在的重点,也不是什么我在找。

标签: javascript php dependencies dependency-management


【解决方案1】:

Composer 默认使用来自 Packagist 的元数据,Packagist 从每个 repo 的 composer.json 文件中提取。

但是,您可以只指定要自己下载的任何文件。但是如果你想要有很多版本可能会有点麻烦。

Composer 有一些关于它的文档 here 但我自己尝试过,并将在下面包含我的示例作曲家文件。我能够使用composer update 下载不包含composer.json 文件的git repo。

PHP 项目的示例 Composer 文件:

看起来你需要为你想要的每个版本一个“包”部分。

{
    "repositories": [
        {
            "type": "package",
            "package": {
                "name": "testy/testyson",
                "version": "1.0.0",
                "dist": {
                    "url": "https://github.com/mickadoo/testlib/archive/1.0.0.zip",
                    "type": "zip"
                }
            }
        },
        {
            "type": "package",
            "package": {
                "name": "testy/testyson",
                "version": "2.0.0",
                "dist": {
                    "url": "https://github.com/mickadoo/testlib/archive/2.0.0.zip",
                    "type": "zip"
                }
            }
        }
    ],
    "require": {
        "testy/testyson": "2.*"
    }
}

我加载的测试存储库只包含一个文本文件,其内容为“这是版本 1”,并使用 PHP 包的 require 部分中的不同版本,我能够在它们之间切换。

【讨论】:

  • 非常感谢!虽然如果有人在使用我的库,他们将不得不包含repositories{} 列表,不是吗?我记得前一阵子读到,它们必须在根级 composer.json 中才能工作。仍然给我一个“复制+粘贴到你的作曲家”的解决方案,而不是更复杂的解决方案。
  • 是的,我没有从问题中意识到您想要不同的东西。我认为当今维护现代 PHP 应用程序的任何人都应该对 composer 感到满意。在此之上添加第二个系统来管理依赖项似乎(无论如何对我来说)有点令人头疼。你想到了什么?
  • 这是一个很好的观点,将它保存在 composer-family 中对大多数人来说都是可以接受的。在考虑了一会儿之后,我想知道是否使用自定义 bash 构建脚本到 git pull 依赖 repo 然后删除它的 .git 文件夹,这样 JS 依赖项就可以保存到版本控制中,而无需任何额外步骤供使用我的人使用库。但是,如果我开发 3 个不同的 PHP 库,它们都使用同一个 JS 库,我将拥有多个副本,这将是有问题的。
  • 我可能会按照你的建议去做。不难说“将其复制+粘贴到您的作曲家文件中”。我还可以使用composer config 编写命令,这样我就可以告诉最终用户composer require blah blah; composer config stuff-and-things; 并将其全部保存在一行/一个命令中。
  • 我认为你的 Jenkins 想法听起来不错,甚至只是你自己的一个分支,你手动保持最新。我想从长远来看,让 Jenkins 自动化会让你少一些麻烦。 TBH 我认为在主 JS 库中包含 composer.json 完全没问题 - 就像查看 Github 上的引导库 - 与 PHP 完全无关,但仍然有 composer.json。不过,如果您不想在根目录中添加另一个文件,我可以理解 :-)
猜你喜欢
  • 2017-10-26
  • 1970-01-01
  • 2013-02-28
  • 1970-01-01
  • 2019-08-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-04
相关资源
最近更新 更多