为wordpress主题和插件创建萨蒂斯composer私有资源库

jum4pzuy  于 2022-11-02  发布在  WordPress
关注(0)|答案(2)|浏览(204)

我的目标是有一个composer.json文件提交到我们的项目仓库,它指定了什么主题或插件应该被用于该项目,当开发人员拉下仓库时,他们所需要做的就是运行composer install。我们希望将插件排除在项目仓库之外,以阻止项目仓库的膨胀,以及它变得缓慢的拉和推。
对于标准的wordpress插件,如“Jetpack by WordPress.com“,这是好的,因为我们将使用https://wpackagist.org/。但对于付费插件和定制的内部插件,不能开源,我们希望将它们托管在一个私人 composer 仓库。
因为我们将有这些插件的多个版本,我希望显示所有版本,如1.1、1.2、1.3,以便开发人员可以在composer.json中指定需要哪个版本,例如,如果未来的版本破坏了一些东西,我们需要回滚到以前的版本。
我已经通读了设置萨蒂斯私有仓库的基础知识,我已经这样做了,但我不能让它循环通过版本的git标签,也指定它是一个WordPress插件,并将其安装在正确的位置。
这是我第一次尝试获取所有带git标记的版本:

{
    "name": "Private Repository",
    "homepage": "http://packages.privaterepo.com",
    "repositories": [
        {
            "type": "vcs",
            "url": "git@bitbucket.org:companyname/project.git"
        }
    ],
    "require-all": true
}

这是一个我必须指定的版本,但让它安装在正确的WordPress插件位置:

{
    "name": "Private Repository",
    "homepage": "http://packages.privaterepo.com",
    "repositories": [
        {
            "type": "package",
            "package": {
                "name": "company/project",
                "description": "WordPress Plugin",
                "version": "1.0",
                "source": {
                    "type": "git",
                    "url": "git@bitbucket.org:company/project.git",
                    "reference": "origin/master"
                },
                "type": "wordpress-plugin",
                "require": {
                    "php": ">=5.3.2",
                    "composer/installers": "*"
                }
            }
        }
    ],
    "require-all": true,
    "require-dependencies": true,
    "extra": {
        "installer-paths": {
            "wp-content/plugins/{$name}/": ["type:wordpress-plugin"]
        }
    }
}

有人能告诉我如何让这两个场景一起工作吗?

ux6nzvsh

ux6nzvsh1#

我想我有一个类似的设置:在本地的萨蒂斯repo中,我们有来自一个私有Git服务器的内部包,以及来自Github的所有外部包。
诀窍是做两个步骤:第一步只提取所有外部包的元数据,这就是你的版本范围发挥作用的地方,以避免提取一切。
第二步将扫描所有本地Git存储库并检测所有版本,此外还将添加在第一步中创建的Composer存储库。
实际上,您将处理两个萨蒂斯配置,这两个配置将创建两个结果,第一个任务的外部包的结果将只获取所有元数据,在第二步中,它将被导入并像本地Git repo一样使用,配置第二步扫描“所有”版本,并可能从它们创建ZIP文件,这将为您可能需要的每个包创建一个很好的本地备份副本。
或者换句话说:
satis-external.json

{
    "repositories": [
        {
            "type":"composer",
            "url":"https://packagist.org"
        }
    ],
    "require": {
        "any/package":">=2.0"
    }
    "output-html": false,
    "require-dependencies": true
}

运行它:

php -dmemory_limit=2G satis/bin/satis build satis-external.json external/

satis-internal.json

{
    "repositories": [
        {
            "type": "composer",
            "url": "http://url/from/external/above"
        },
        {
            "type": "vcs",
            "url": "ssh://internal/gitrepo.git"
        }
    ],
    "require-all": true,
    "archive": {
        "directory": "dist",
        "format": "zip",
        "prefix-url": "https://whatever/youneed",
        "skip-dev": true
    }
}

运行此

php  -dmemory_limit=2G satis/bin/satis build satis-internal.json internal/

在萨蒂斯中添加一个“type=composer”存储库会使它像其他存储库一样运行--特别是如果你“require-all=true”,它会下载所有提到的包,所以注意不要直接添加Packagist或其他存储库。
还要注意,“require-dependencies”对于外部包是正确的,因为您可能不想经历添加您要使用的包的每个依赖项的麻烦。
如果您的一些付费软件包提供远程存储库访问,您可以将此存储库与访问凭据一起添加到外部配置中--它应该可以工作。

83qze16e

83qze16e2#

根据我的经验,您的第一次尝试应该就足够了,但是我认为您在每个包上都遗漏了一些您想要要求的东西(“公司/项目”)。
每个包都应该有自己的composer.json,并且每个包都必须有composer/installers,并且应该正确定义"type": "wordpress-plugin"(或者theme,muplugin,dropin)
将此作为一项要求可以确保将软件包安装到所需的路径上。默认情况下,它将安装到以下文件夹:

protected $locations = array(
    'plugin'    => 'wp-content/plugins/{$name}/',
    'theme'     => 'wp-content/themes/{$name}/',
    'muplugin'  => 'wp-content/mu-plugins/{$name}/',
    'dropin'    => 'wp-content/{$name}/',
);

(from: installers/WordPress.php)
...但是您可以使用第二个片段中的这个片段来改变它--例如,如果您在“htdocs”文件夹下有站点代码:

"extra": {
    "installer-paths": {
        "htdocs/wp-content/plugins/{$name}/": ["type:wordpress-plugin"]
    }
}

有了这些配置,萨蒂斯应该可以从你的git标签中生成合适的标签。
我希望这对你有帮助!

相关问题