Soru Besteci - yerel bir depo kullanarak


Ben bir besteci başlangıççıyım ve bir projeyi diğerine bağımlı yapmaya çalışıyorum, her iki proje de yalnızca yerel makinemde var.

Kütüphane projemdeki composer.json (ProjectA):

{
    "name" : "project/util",
    "type" : "library"
}

Bu projenin ana klasörüne gitmeyi başlattım.

Projemdeki bestecim.json ilk projeye göre (ProjectB):

{
    "repositories": [
        {
            "name" : "util", 
            "type" : "git",
            "url" : "/d/workspaces/util"
        }   
    ],

    "require": {
        "project/util" : "*"
    },
}

Koştuğumda composer install ProjectB'den aşağıdaki hatayı alıyorum:

[RuntimeException]
Failed to clone , could not read packages from it
fatal: repository '' does not exist

Deponun URL'si ile ilgili bir şeylerin yanlış olduğunu düşünüyorum, ancak başka ne yazacağımı bilmiyorum.


32
2017-07-02 12:54


Menşei




Cevaplar:


Besteci kullanarak yerel paketi otomatik olarak yükleyin (her değiştirdiğinizde paketleyiciye gitmeden).

Bunu yapmanın birçok yolu var, bunlardan 2 tanesini alacağım:

Her durumda 2 ana tarafımız var:
 - yerel paket (proje bestecimizde otomatik olarak yükleyebilmemiz için paketin üzerinde yayınlamak istemediğimiz kod).
 - ana proje (Yerel paket kodunu kullanması gereken kod tabanı, başka bir paket veya herhangi bir proje olabilir).


Yöntem 1: (doğrudan ad alanı) 

Ana projeyi aç composer.json yerel paket ad alanlarını herhangi bir yöntemle (PSR-4, PSR-0, ...) yükleyip otomatik olarak yükleyin.

örnek:

eğer yerel paketin composer.json'ında varsa:

  "autoload": {
    "psr-4": {
      “Local\\Pack\\": "library"
    }
  },
  "autoload-dev": {
    "psr-4": {
      "Local\\Pack\\Tests\\": "tests"
    }
  },

daha sonra ana projenin composer.json'unda şöyle olmalı:

  "autoload": {
    "psr-4": {
      "Mahmoudz\\Project\\": "src",
      "Local\\Pack\\": "../path/to/local/pack/library”                   << referencing the other local package
    }
  },
  "autoload-dev": {
    "psr-4": {
      "Mahmoudz\\Project\\Tests\\": "tests"
    }
  },

Avantajları:
- satıcı dizinini yapmayacaksınız (besteci güncellemesini yanlışlıkla yaparak yerel değişikliklerinizi geçersiz kılmayacaksınız)
- Paketini kullanmak için paketinizde olmak zorunda değilsiniz.
- Tek bir yerde (yerel paket) çalışıyorsunuz ve değişiklikler ana projeye otomatik olarak yüklenir
Dezavantajları:
- composer.json'u prodüksiyona yayınlayamazsınız (yayınlamadan önce düzenlemeyi gerçek paket gerektirecek şekilde)

Yöntem 2: (yerel veri havuzu)

Yerel paketi yerel bir depodan indirin.

yerel paket:
 1. paketteki gitmeyi başlat (kullanmak istemiyor olsanız bile - hiçbir şey yapmanıza gerek yok)
 2. composer.json dosyasını ekleyin. Dosyada aşağıdakilere sahip olduğunuzdan emin olun:

"name": “vendor-name/package-name",  

"autoload": { …   // use whichever method you prefer, but make sure it’s being loaded correctly

"minimum-stability": “dev"  
  1. composer dump-autoload 

ana proje:
 1. composer.json dosyasını aşağıdakileri içerecek şekilde düzenleyin:

  "repositories": [
    {
      "type": "vcs",
      "url": “/full/path/to/the/local/package/package-name"
    }
  ],
  "require": {
    "vendor-name/package-name": "dev-master"
  },
  1. besteci güncelleme satıcı adı / paket adı
  2. şimdi satıcı dizininizi kontrol etmelisiniz, satıcı ismi / paket ismi

NOT: yerel pakette (satıcıya değil) değişiklik yaptığınızda, git işlemini yapmanız gerekir, daha sonra besteci ana projeyi güncelleyebilir, repo'nun en son kopyasını ana proje satıcı dizinine ulaştıracaktır.

Avantajı:
- satıcı dizinini yapmayacaksınız (yanlışlıkla besteci güncellemesi yerel değişikliklerinizi geçersiz kılmayacaktır) - paketinizi kullanmak için paketinizin olması gerekmez
dezavantajı:
- değişikliklerinizi (yerel pakette) yapmaya devam etmeli ve ardından ana projede besteci güncellemesi yürütmelisiniz.
- composer.json'u prodüksiyona yayınlayamazsınız (yayınlamadan önce düzenlemeyi gerçek paket gerektirecek şekilde)


27
2018-05-26 11:30



Teşekkürler, mükemmel! Not: eğer sen kullanıyorsan vcs yaklaşım (# 2), besteci.json değişikliklerini taahhüt etmeyi unutmayın. Unutulmaması kolay olan ve "paket sürümü bulunamadı" hatalarıyla bestecinin paketinizi niçin çektiği konusunda kafa yorucu olacaksınız. - mangonights
İlk yöntemin hayatımı kurtardı! Kudos! - Tᴀʀᴇǫ Mᴀʜᴍᴏᴏᴅ
ikinci yöntem ve @mangonights yorumu da beni kurtardı ... teşekkürler hepiniz kardeşim - Zaffar Saffee
Birinciye göre ikinci yaklaşımın bir başka avantajı, kodun tamamlanması için IDE'nin kodunun erişilebilir olmasıdır. - nibra
İkinci yöntemi kullandım ve bu hatayı aldım: Herhangi bir dalda ya da etiketinde geçerli bir composer.json bulunamadı ..., bir paket yükleyemedi. Ve düzeltmek için @mangonights cevabını kullandım ve yerel depomda değişiklikler yaptım ve problemimi çözdüm - gandalf


Bence sen sözdizimini yanlış anladın. Tip sadece VCS olmalı ve daha sonra besteci ne tür bir VCS olduğunu öğrenmelidir.

B projenizde, depo girişi şu şekilde olmalıdır:

"repositories": [
    {
        "type": "vcs",
        "url" : "/d/workspaces/util"
    }
],

Hangi kütüphanenin kullanılabilir olduğunu belirtmenize gerek yok /d/workspaces/util. Besteci, bu dizindeki composer.json dosyasını tarayacak ve orada hangi proje isminin mevcut olduğunu bilecek ve bu dizinden projeyi paketleyici veya başka bir depoda listelenen bir versiyona göre kullanacaktır.


23
2017-07-02 14:17



Tamam, vcs'ye geçtiğimde şu mesajı alırım: [Runtime Exception] Dizin mevcut değil: / d / workspaces / util - Banana
Er, muhtemelen dizin mevcut değil veya erişilebilir değil mi? - Danack
Sanırım dizin yanlış yazılmış. Bunu sağlamak zorunda olduğunuzdan emin misiniz? /d/workspaces/util ve değil d:/workspaces/util? - Vladislav Rastrusny
Nasıl sağlanmalı? - Notflip


Danack'in çözümüne ek olarak: / d / to d yolunu değiştirmek / benim için çalıştı.

Bunun gibi:

"repositories": [
    {
        "type": "vcs",
        "url" : "d:/workspaces/util"
    }
],

2
2017-07-12 10:43