Pada saat penulisan tahun 2013, ini adalah salah satu cara untuk melakukannya. Komposer telah menambahkan dukungan untuk cara yang lebih baik: Lihat jawaban @igorw
APAKAH ANDA MEMILIKI REPOSITORI?
Git, Mercurial dan SVN didukung oleh Composer.
APAKAH ANDA PUNYA AKSES TULIS KE REPOSITORI?
Iya?
APAKAH REPOSITORI MEMILIKI composer.json
FILE
Jika Anda memiliki repositori, Anda dapat menulis ke: Tambahkan composer.json
file, atau perbaiki yang sudah ada, dan JANGAN gunakan solusi di bawah ini.
Buka jawaban @igorw
HANYA GUNAKAN INI JIKA ANDA TIDAK MEMILIKI REPOSITORI
ATAU JIKA REPOSITORI TIDAK MEMILIKI composer.json
DAN ANDA TIDAK DAPAT MENAMBAHNYA
Ini akan menimpa segala sesuatu yang mungkin bisa dibaca oleh Komposer dari repositori asli composer.json
, termasuk dependensi paket dan pemuatan otomatis.
Menggunakan package
tipe akan mentransfer beban untuk mendefinisikan semuanya dengan benar kepada Anda. Cara yang lebih mudah adalah dengan memiliki composer.json
file di repositori, dan gunakan saja.
Solusi ini hanya untuk kasus yang jarang terjadi di mana Anda memiliki unduhan ZIP yang tidak dapat diubah, atau repositori yang hanya dapat Anda baca, tetapi tidak dipertahankan lagi.
"repositories": [
{
"type":"package",
"package": {
"name": "l3pp4rd/doctrine-extensions",
"version":"master",
"source": {
"url": "https://github.com/l3pp4rd/DoctrineExtensions.git",
"type": "git",
"reference":"master"
}
}
}
],
"require": {
"l3pp4rd/doctrine-extensions": "master"
}
composer.json
, jadi gunakan repo vcs. Contoh Anda juga merusak pemuatan otomatis dan mengabaikanbranch-alias
.autoload
bidang, itu tidak akan disertakan. Pada dasarnya Anda perlu menyalin-tempel semua info daricomposer.json
ke definisi repo. Repo VCS mengambil info itu dari VCS secara langsung. Manfaatbranch-alias
dijelaskan di dokumen alias dan posting blog yang saya tulis .Paket tersebut sebenarnya tersedia melalui packagist . Anda tidak memerlukan definisi repositori khusus dalam kasus ini. Pastikan Anda menambahkan
require
(yang selalu diperlukan) dengan batasan versi yang cocok.Secara umum, jika sebuah paket tersedia di pembuat paket, jangan tambahkan repo VCS. Itu hanya akan memperlambat segalanya.
Untuk paket yang tidak tersedia melalui packagist, gunakan repositori VCS (atau git), seperti yang ditunjukkan dalam pertanyaan Anda. Saat Anda melakukannya, pastikan bahwa:
require
untuk paket yang dimaksudrequire
cocok dengan versi yang disediakan oleh repo VCS. Anda dapat menggunakancomposer show <packagename>
untuk menemukan versi yang tersedia. Dalam hal ini~2.3
akan menjadi pilihan yang baik.require
cocok dengan nama di remotecomposer.json
. Dalam hal ini, memang demikiangedmo/doctrine-extensions
.Ini contohnya
composer.json
yang menginstal paket yang sama melalui repo VCS:Itu repo VCS menjelaskan semua ini dengan cukup baik.
Jika ada repositori git (atau VCS lain) dengan yang
composer.json
tersedia, jangan gunakan repo "paket". Repo paket mengharuskan Anda untuk memberikan semua metadata dalam definisi dan akan sepenuhnya mengabaikan semua yangcomposer.json
ada di dist dan sumber yang disediakan. Mereka juga memiliki batasan tambahan, seperti tidak mengizinkan pembaruan yang tepat dalam banyak kasus.Hindari repo paket ( lihat juga dokumen ).
sumber
composer.json
.require
bidang harus ditentukan.The VCS repo docs explain all of this quite well.
... apa?Anda dapat menyertakan repositori git ke composer.json seperti ini:
sumber
composer.json
file jika memungkinkan.Beri tahu komposer untuk menggunakan sumber jika tersedia:
Atau:
Kemudian Anda akan mendapatkan paket sebagai repositori kloning daripada tarbal yang diekstrak, sehingga Anda dapat membuat beberapa perubahan dan mengkomitnya kembali. Tentu saja, dengan asumsi Anda memiliki izin tulis / push ke repositori dan Komposer tahu tentang repositori proyek.
Penafian: Saya pikir saya dapat menjawab pertanyaan yang sedikit berbeda, tetapi inilah yang saya cari ketika saya menemukan pertanyaan ini, jadi saya harap ini akan bermanfaat bagi orang lain juga.
Jika Composer tidak tahu, di mana repositori proyek, atau proyek tidak memiliki composer.json yang tepat, situasinya sedikit lebih rumit, tetapi skenario lain telah menjawab seperti itu.
sumber
Saya mengalami kesalahan berikut:
The requested package my-foo/bar could not be found in any version, there may be a typo in the package name.
Jika Anda membagi repo lain untuk membuat perubahan Anda sendiri, Anda akan mendapatkan repositori baru.
Misalnya:
Url baru harus masuk ke bagian repositori composer.json Anda.
Ingat jika Anda ingin merujuk ke garpu Anda seperti
my-foo/bar
di bagian yang Anda butuhkan, Anda harus mengganti nama paket dicomposer.json
file di dalam repo baru Anda.Jika Anda baru saja bercabang, cara termudah untuk melakukannya adalah mengeditnya langsung di dalam github.
sumber
name
atribut di dalamnyacomposer.json
.Dalam kasus saya, saya menggunakan Symfony2.3.x dan parameter stabilitas minimum secara default adalah "stabil" (yang bagus). Saya ingin mengimpor repo bukan dalam paket tetapi memiliki masalah yang sama "Persyaratan Anda tidak dapat diselesaikan ke satu set paket yang dapat diinstal.". Ternyata composer.json di repo yang saya coba impor menggunakan minimum-stability "dev".
Jadi untuk mengatasi masalah ini, jangan lupa untuk memverifikasi
minimum-stability
. Saya menyelesaikannya dengan memintadev-master
versi, bukanmaster
seperti yang dinyatakan dalam posting ini .sumber
"dev-master#4536bbc166ada96ff2a3a5a4b6e636b093103f0e"
.Jika Anda ingin menggunakan a
composer.json
dari GitHub, Anda akan melihat contoh ini (di bawah bagian VCS).Bagian paket adalah untuk paket yang tidak memiliki ekstensi
composer.json
. Namun, Anda tidak mengikuti contoh itu juga atau itu juga akan berhasil. Bacalah apa yang dikatakan tentang repositori paket:sumber
Saya mencoba untuk bergabung dengan solusi yang disebutkan di sini karena ada beberapa poin penting yang perlu dicantumkan.
Seperti yang disebutkan dalam jawaban @ igorw, URL ke repositori harus ditentukan dalam file composer.json, namun karena dalam kedua kasus, composer.json harus ada (tidak seperti cara ke-2 @Mike Graf) yang menerbitkannya di Packagist adalah tidak jauh berbeda (lebih jauh lagi, Github saat ini menyediakan layanan paket sebagai paket npm), hanya perbedaannya daripada memasukkan URL secara harfiah pada antarmuka paket setelah mendaftar.
Selain itu, ia memiliki kekurangan yaitu tidak dapat mengandalkan pustaka eksternal yang menggunakan pendekatan ini karena definisi repositori rekursif tidak berfungsi di Komposer. Lebih jauh lagi, karena itu, tampaknya ada "bug" di atasnya, karena definisi rekursif gagal pada dependensi, menentukan repositori secara eksplisit di root tampaknya tidak cukup tetapi juga semua dependensi dari paket harus dihormati.
Dengan file komposer (dijawab pada 18 Oktober '12 jam 15:13 igorw)
Tanpa file komposer (dijawab 23 Januari '13 pukul 17:28 Mike Graf)
sumber