Composer yükleme yolu nasıl belirtilir?


97

Bu tanıma sahibim:

{
    "repositories": [
        {
            "type": "package",
            "package": {
                "name": "symfony/sfGuardPlugin",
                "version": "4.0.2",
                "dist": {
                    "url": "http://plugins.symfony-project.org/get/sfGuardPlugin/sfGuardPlugin-4.0.2.tgz",
                    "type": "tar"
                }
            }
        }
    ],
    "require": {
        "symfony/sfGuardPlugin": "4.0.*"
    }
}

Symfony 1 kullanıyorum ve onları yüklemek istiyorum plugins/sfGuardPlugin/. Bunu nasıl belirteceğim?

Yanıtlar:


145

Görünüşe göre vendordir'i başka bir şey olarak tanımlayabilirsiniz ( pluginssizin durumunuzda):

{
    "config": {
        "vendor-dir": "plugins"
    }
}

Ardından, paket adını içinde bir düzey dizini olmayacak şekilde yeniden adlandırabilirsiniz, örneğin:

        "package": {
            "name": "sfGuardPlugin",

Yani, composer.jsonşuna benzemelisin:

{
    "config": {
        "vendor-dir": "plugins"
    },
    "repositories": [
        {
            "type": "package",
            "package": {
                "name": "sfGuardPlugin",
                "version": "4.0.2",
                "dist": {
                    "url": "http://plugins.symfony-project.org/get/sfGuardPlugin/sfGuardPlugin-4.0.2.tgz",
                    "type": "tar"
                }
            }
        }
    ],
    "require": {
        "sfGuardPlugin": "4.0.*"
    }
}

Düzenle

Bu konfigürasyonu kullanarak yolu alacaksınız (ki bu elbette symfony için iyi değildir):

eklentiler / sfGuardPlugin / sfGuardPlugin-4.0.2 /

Bununla bir çözüm buldum composer.json:

{
    "config": {
        "vendor-dir": "plugins"
    },
    "repositories": [
        {
            "type": "package",
            "package": {
                "name": "sfGuardPlugin",
                "version": "4.0.2",
                "source": {
                    "url": "http://svn.symfony-project.com/plugins/sfGuardPlugin/",
                    "type": "svn",
                    "reference": "branches/1.3/"
                }
            }
        }
    ],
    "require": {
        "sfGuardPlugin": "4.0.*"
    }
}

Güzel, ayrıca çıkarılan klasörün şu anki kadar derinlemesine gitmemesi için bir şekilde yapabilir miyim: plugins/sfGuardPlugin/sfGuardPlugin-4.0.2/bunun yerine ben istiyorum plugins/sfGuardPlugin?
Tower

Evet, şimdi gördüm. Farklı bir türle deniyorum (yerinetar ).
j0k

Bu iyi çalışıyor - bu yüzden hala bir depoları var :)
Tower

3
Yalnızca belirli bir paket için satıcı dizinini belirtmenin ve diğerlerini varsayılan olarak bırakmanın bir yolu var mı?
mr1031011

1
Bu harika ve araştırılmış bir cevap, ama Adam'ın V'sini kaybetmeyin, çünkü daha resmi görünüyor, oh ve kolay ;-)
mTorres

28

Ayrıca kullanabilirsin "symfony1-plugin" paket tipine sahip çok çerçeveli bir kitaplık kurucusu olan composer / installers'ı . Hem Symfony 1.4'ü (lib / vendor'da) hem de eklentileri (/ plugins) içine kurması için composer.json dosyam şöyle görünüyor:

{
    "config": {
        "vendor-dir": "lib/vendor"
    },
    "repositories": {
        "symfony": {
            "type": "package",
            "package": {
                "name": "symfony/symfony1",
                "version": "1.4",
                "dist": {
                    "url": "https://github.com/symfony/symfony1/zipball/1.4",
                    "type": "zip"
                }
            }
        },
        "sfResquePlugin" : {
            "type": "package",
            "package": {
                "name": "devpips/sfResquePlugin",
                "type": "symfony1-plugin",
                "version": "0.1",
                "dist": {
                    "url": "https://github.com/devpips/sfResquePlugin/zipball/master",
                    "type": "zip"
                }
            }
        }
    },
    "require": {
        "composer/installers": "dev-master",
        "symfony/symfony1": "1.4",
        "devpips/sfResquePlugin":"0.1"
    }
}

Bunun nasıl bir şeye işaret ettiğini anlamıyorum /plugins- detaylandırabilir misin?
Isaac Lubow

@IsaacLubow, bu, orada bir eklenti olduğu composer-installersgibi paket tarafından yapılacaktır symfony1:) Symfony1Installer.php'yi
ruh

11

COMPOSER_VENDOR_DIRÇevre değişkenine bakın .

Bu değişkeni ayarlayarak Composer'ın bağımlılıkları satıcı dışındaki bir dizine yüklemesini sağlayabilirsiniz.

Bunu, paylaşılan bir klasörde / birimde olmasını istemediğiniz serseri veya docker gibi belirli bir ortamda geçersiz kılmak istediğinizde yardımcı olabilir.

J0K söylediği gibi, orada vendor-diriçinde configbölümücomposer.json

Satıcı için varsayılanlar. İsterseniz bağımlılıkları farklı bir dizine kurabilirsiniz. $ HOME ve ~, ana dizininizin vendor-dizindeki yolu ve aşağıdaki tüm * -dir seçenekleriyle değiştirilecektir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.