Yarn: Izinkan subdirektori dalam git repo di yarn install

Dibuat pada 17 Okt 2017  ·  40Komentar  ·  Sumber: yarnpkg/yarn

Apakah Anda ingin meminta fitur atau melaporkan bug ?
Fitur

Apa perilaku saat ini?
Tidak dapat menginstal paket yang ada di dalam subdirektori di git repo. Ini adalah kasus yang sangat umum untuk monorepos dan hanya repositori yang tidak dapat memiliki paket node di repo root.

Jika perilaku saat ini adalah bug, berikan langkah-langkah untuk mereproduksi.
Bukan tapi

Apa perilaku yang diharapkan?
Harus ada sintaks yang tersedia untuk yarn add dan yarn global add yang memungkinkan untuk menambahkan paket yang ada di dalam subdirektori di git repo.

Itu membuatnya lebih mudah untuk menggunakan kode yang belum dirilis saat menguji versi yang belum dirilis untuk masalah/regresi atau perbaikan yang belum ditayangkan seperti tiket ini https://github.com/Microsoft/code-Push/issues/428

mantan. paket yang terpengaruh oleh masalah ini
https://github.com/Microsoft/code-push/tree/master/cli
https://github.com/Microsoft/BotBuilder/tree/master/Node
https://github.com/facebook/react-native/tree/master/react-native-cli
https://github.com/babel/babel/tree/master/packages/babel-cli

Masalah npm terkait: https://github.com/npm/npm/issues/2974

Sebutkan versi node.js, benang, dan sistem operasi Anda.
versi benang v1.2.1
versi simpul v8.7.0
macOS Sierra 10.12.6

Komentar yang paling membantu

Saya membangun layanan https://gitpkg.now.sh/ untuk mengunduh sub folder dari git repo sebagai file .tgz , sehingga dapat diinstal dengan benang dan npm. Dengan layanan ini, pengguna paket dapat menggunakan subdir secara langsung dan pengembang paket tidak perlu mempublikasikan subdir.

Misalnya, jika Anda ingin menambahkan babel-core di cabang next-8-dev sebagai dependensi,
gunakan saja:

yarn add https://gitpkg.now.sh/babel/babel/packages/babel-core?next-8-dev

juga berfungsi untuk npm install .

Perhatikan bahwa saya harus meminta maaf kepada @ramasilveyra karena nama layanan saya bertentangan dengan alat yang dia kembangkan tetapi saya tidak mengetahuinya sebelumnya.

Semua 40 komentar

Ada beberapa ide bagus untuk sintaks yang digunakan untuk menentukan subdirektori dalam masalah tertaut (npm/npm#2974)

Gunakan cara pip menggunakan parameter kueri
git+https://git.repo/some_repo.git?subdirectory=subdir_path#branch
atau
git+https://git.repo/some_repo.git#branch?path=subdir_path
Meskipun saya akan menganggap sebagian besar pengurai url tidak akan menguraikan yang ini.

Gunakan :: karena ini bukan token yang valid untuk nama cabang
git+https://git.repo/some_repo.git#branch::subdir_path
git+https://git.repo/some_repo.git#::subdir_path

Ide lain: git+https://git.repo/some_repo.git/subdir_path#branch . Jika saya menganggap fitur ini ada, itulah yang akan saya coba dulu. Opsi lain akan membutuhkan seseorang untuk mencari sintaks.

Itu mungkin ambigu tergantung pada bagaimana url server git diatur.

Urlnya mungkin seperti

git+https://github.com/yarnpkg/yarn/<subdir_path>#branch

Kemudian menjadi sulit untuk mengatakan apa yang merupakan bagian dari jalur repo dan apa itu subdir_path

Tidak yakin apakah ini berlaku untuk setiap repo, tetapi dengan Github keduanya git+https://github.com/yarnpkg/yarn dan git+https://github.com/yarnpkg/yarn.git berfungsi. Anda dapat mengasumsikan apa pun setelah .git/ adalah sub-direktori.

Terlepas dari sintaks, akan menyenangkan untuk memiliki fitur ini. Akan sangat keren untuk membuat sintaksnya menjadi intuitif :).

Oh ya, saya kebanyakan berbicara tentang situs web lain, bukan github. Maaf contoh saya bukan yang terbaik untuk menjelaskannya.

Diskusi panjang tentang mendukung ini di npm:
https://github.com/npm/npm/issues/2974

Ada beberapa pemisah yang disarankan di utas.

Saya juga ingin dapat melakukan ini untuk memfasilitasi bekerja dengan monorepo yang berisi banyak sub modul. Saya juga menemukan #1570 yang membahas ini. Itu ditutup demi https://github.com/yarnpkg/rfcs/issues/15 tetapi https://github.com/yarnpkg/rfcs/issues/15 tidak ada lagi sehingga sulit untuk mengatakan bagaimana jika ada dilakukan atau diputuskan di sana.

jadi yarn belum mendukung ini?
baiklah, tidak ada opsi yang lebih sederhana selain menerbitkan dan menggunakan paket npm :(

Ya, meningkatnya popularitas arsitektur monorepo menjadikannya fitur penting. Apakah ada solusi untuk ini, untuk saat ini? Diskusi tentang API publik cenderung bertahun-tahun...

Kasus penggunaan # 1 saya untuk ini menarik perbaikan bug dari monorepo yang belum digabungkan atau dirilis. Saya sering ingin menyimpan sebagian besar paket asli, tetapi menarik salah satu sub-repo dengan perbaikan bug. Saat ini saya tidak dapat melakukan ini, dan solusinya rumit. Mampu mereferensikan cabang Github akan sangat menurunkan resistensi.

Saya tahu ada beberapa orang di npm yang sangat menentang gagasan ini, dan monorepos secara umum. Namun, banyak kontributor di sini mengerjakan proyek yang menggunakan monorepos. Saya menduga bahwa jika benang mengimplementasikan fitur ini dan menjadi cukup populer, npm akan mengikutinya. Banyak ide benang telah diterapkan di npm nanti. benang bagi saya adalah babel dari npm.

@erykpiast pasangan solusi yang dapat saya pikirkan:

  1. mengkloning repo target di suatu tempat dan kemudian menggunakan yarn add /path/to/repo/subdirectory
  2. atau mungkin (jika dalam monorepo Anda sendiri) gunakan ruang kerja benang?

Atau -- ini mungkin lebih gila -- tambahkan remote yang dimaksud sebagai submodul dan (opsional pindahkan file proyek Anda ke subdirektori) _then_ gunakan ruang kerja benang?

Penafian: Saya belum mencoba salah satu dari pendekatan ini dan keduanya menambahkan overhead untuk pengembang baru & build CI Anda ...

Atau -- ini mungkin lebih gila -- tambahkan remote yang dimaksud sebagai submodul dan (opsional pindahkan file proyek Anda ke subdirektori) lalu gunakan ruang kerja benang?

Saya dapat mengkonfirmasi ini berfungsi.

Upgrade ke webpack 4. Create React App belum memiliki dukungan tetapi ada PR yang menunggu untuk digabungkan - sayangnya webpack 4 telah mengubah API plugin-nya. Sangat disayangkan: create-react-app adalah repo yang berisi banyak paket. Menambahkan PR bercabang sebagai submodul dan menambahkan paket menggunakan sintaks 'file:' berhasil.

Benar-benar menghemat satu hari atau lebih pekerjaan dengan pekerjaan ini.

Sangat mengkhawatirkan bahwa ini tidak ada dalam peta jalan untuk npm atau benang karena meningkatnya popularitas monorepos. Sintaks git+... membuat kontribusi ke proyek paket tunggal menjadi mudah, dan sebaliknya tidak memilikinya untuk subdirektori membuat kontribusi ke proyek monorepo sangat merepotkan.

Saya setuju. Setelah beberapa bulan menyusuri submodul git, rute file: , itu tidak ideal. Orientasi pengembang lain lebih sulit. Rekan-rekan saya harus khawatir tentang inisialisasi dan pembaruan submodul. Dalam pembelaan mereka, dulunya sesederhana menjalankan yarn untuk memulai.

Dukungan Monorepo akan menjadi mimpi yang menjadi kenyataan.

benang + lerna (menggunakan ruang kerja benang) berfungsi untuk mengelola monorepos.

Alat kedua untuk menginstal dari monorepo tidak ideal. Seharusnya sebagai
sederhana seperti menginstal paket dari repo paket tunggal, menggunakan yarn add ...

Secara umum, itu tidak membantu 'masalah kecil' JS. Sebuah kasus penggunaan muncul. Kami
gunakan alat baru ketika alat yang ada adalah rumah yang sempurna.

Pada Minggu, 1 Juli 2018, 11:34 malam Frederik Krautwald, [email protected]
menulis:

benang + lerna (menggunakan ruang kerja benang) berfungsi untuk mengelola monorepos.


Anda menerima ini karena Anda berkomentar.
Balas email ini secara langsung, lihat di GitHub
https://github.com/yarnpkg/yarn/issues/4725#issuecomment-401638034 , atau bisukan
benang
https://github.com/notifications/unsubscribe-auth/AAjP2lWrm2u8tOiIZQ5D-oKre9BqTj5-ks5uCU6SgaJpZM4P7hjl
.

@Frikki Saya tidak percaya lerna memiliki banyak dukungan submodule , dan bagaimanapun juga bukan "alat konsumsi".

@jwdunne Untuk saat ini saya hanya npm publish versi garpu yang diberi nama dan bergantung padanya

Halo! Saya membuat https://github.com/ramasilveyra/gitpkg untuk "menerbitkan" paket dari monorepos sebagai tag git, ini mungkin membantu.

@ramasilveyra yang terlihat sangat berguna -- terima kasih atas tambahannya 👍

Beberapa berita dalam mendukung subdir git sebagai sumber instal?

Terima kasih,

Saya mengalami masalah ini hari ini ketika perlu yarn add perbaikan yang belum diterima/tidak dipublikasikan yang saya tulis untuk monorepo. +1 dari saya.

Foking Pasti Ketik menyebabkan raja masalah yang sama,
Setiap kali saya melakukan fork git ini, untuk menyiapkan permintaan tarikan baru, saya harus bergantung pada sub direktori git bercabang saya.
Apakah file:// saat ini adalah satu-satunya solusi?

@UrielCh saya dapat menggunakan https://github.com/ramasilveyra/gitpkg sebagai solusi. Ini mungkin berhasil untuk situasi Anda juga.

Terima kasih atas saran ini, membuat git baru untuk garpu ini akan sederhana.

Halo! Saya membuat https://github.com/ramasilveyra/gitpkg untuk "menerbitkan" paket dari monorepos sebagai tag git, ini mungkin membantu.

Ini mungkin terlihat sedikit kacau pada awalnya, tetapi setelah beberapa alasan tampaknya ini merupakan solusi yang sah untuk masalah tersebut 👍

Serius, gitpkg berfungsi! Itu membuat tag di dalam repositori proyek, dan dapat digunakan dengan repositori yang berisi beberapa paket.

Dan ini mendorong saya untuk membuang npm karena hanya yarn dapat diambil dengan baik dari Git.

+1

Halo! Saya membuat https://github.com/ramasilveyra/gitpkg untuk "menerbitkan" paket dari monorepos sebagai tag git, ini mungkin membantu.

Baru saja menggunakan gitpkg dan saya pikir ini adalah solusi yang bagus sehingga harus ditambahkan sebagai catatan di dokumen untuk kasus penggunaan ini

Saya membangun layanan https://gitpkg.now.sh/ untuk mengunduh sub folder dari git repo sebagai file .tgz , sehingga dapat diinstal dengan benang dan npm. Dengan layanan ini, pengguna paket dapat menggunakan subdir secara langsung dan pengembang paket tidak perlu mempublikasikan subdir.

Misalnya, jika Anda ingin menambahkan babel-core di cabang next-8-dev sebagai dependensi,
gunakan saja:

yarn add https://gitpkg.now.sh/babel/babel/packages/babel-core?next-8-dev

juga berfungsi untuk npm install .

Perhatikan bahwa saya harus meminta maaf kepada @ramasilveyra karena nama layanan saya bertentangan dengan alat yang dia kembangkan tetapi saya tidak mengetahuinya sebelumnya.

@EqualMa Ini terlihat sangat menakjubkan. Aku akan melihat ini soo.

@EqualMa Akan lebih menakjubkan lagi jika ini berfungsi untuk proyek dengan langkah build. Tapi bagaimanapun, pekerjaan bagus, terima kasih banyak!

Apakah kita masih membutuhkan gitpkg? Menjalankan lerna terbaru dan ketika dijalankan dalam mode independen akan menerbitkan tag git dari setiap komponen.

@erykpiast Akhirnya layanan GitPkg mendukung skrip khusus, memungkinkan Anda menjalankan langkah pembuatan di pascainstal atau skrip lainnya! Anda dapat memeriksa dokumen atau mencoba menambahkan skrip khusus di https://gitpkg.now.sh

@EqualMa itu bahkan lebih dari luar biasa! Terima kasih!

Ada pembaruan untuk ini? Apakah sudah direncanakan atau bagaimana?

@EqualMa luar biasa! kerja bagus!

Saya mengalami masalah saat mencoba melakukan fork repo (https://github.com/ianstormtaylor/slate) yang menggunakan ruang kerja dan memiliki beberapa paket dalam repo yang sama. Saya hanya ingin memodifikasi dan mengimpor salah satu paket. Mencoba yarn add menunjuk ke direktori yang menyimpan file package.json individual memberikan kesalahan...

yarn add https://github.com/kr-project/slate/tree/master/packages/slate#e73db650a332fc5ded3fd72cffb1fcd7279b85d7
error https://github.com/kr-project/slate/tree/master/packages/slate: Extracting tar content of undefined failed, the file appears to be corrupt: "Invalid tar header. Maybe the tar is corrupted or it needs to be gunzipped?"

Saya juga mencoba memeriksa file yang diterbitkan, tetapi pemahaman saya adalah ini adalah masalah dengan benang yang mencari tar hanya ditemukan di direktori root repo github?

Jadi, apakah satu-satunya cara untuk memotong proyek yang menggunakan ruang kerja untuk menggunakan sesuatu seperti gitpkg ? Saya agak terkejut bahwa sepertinya tidak ada lebih banyak dukungan asli untuk ini.

Baru saja mengalami masalah yang persis sama dengan @jason-krypton ... mencoba bekerja dengan garpu repo yang menggunakan ruang kerja, biasanya saya baru saja menambahkan repositori git bercabang ... Membuang banyak waktu untuk ini untuk mengubah beberapa baris kode. :-(

Saya memiliki masalah serupa dengan ckeditor5. Saya sedang mencoba GitPkg sekarang.

Jadi @LucidDan dan lainnya.

Saya telah menemukan yang berikut ini berfungsi:

  • Anda harus menjalankan yarn 2.1.X agar ini berfungsi.
  • Lihat halaman ini untuk sintaks yang lebih baru yang memungkinkan ini: https://yarnpkg.com/features/protocols
  • Anda harus menambahkan entri individual untuk setiap paket di monorepo ke package.json bawah dependencies atau, dalam kasus saya, devDependencies :
"package-1": "my-org-name/mono-repo-name#head=my-git-branch&workspace=package-1"

Sangat mengecewakan bahwa tidak ada cara untuk hanya meminta yarn menginstal monorepo tingkat atas dan membuka gulungan semua paket petugas ke tempat yang semestinya. Mungkin ada dan saya hanya menjadi bodoh di sini? Jika demikian, seseorang mencerahkan saya ;-)

Apakah halaman ini membantu?
0 / 5 - 0 peringkat