Apakah Anda ingin meminta fitur atau melaporkan bug ?
Saya kira _bug_.
Bagaimana perilaku saat ini?
Jika perilaku saat ini adalah bug, berikan langkah-langkah untuk mereproduksi.
Katakanlah Anda memiliki struktur proyek berikut:
component-foo/
└── package.json
└── index.js
yarn-test/
└── package.json
Dengan file-file berikut:
component-foo/package.json
:
{
"name": "component-foo",
"version": "1.0.0",
"private": true,
"main": "index.js"
}
component-foo/index.js
:
console.log('foo');
yarn-test/package.json
:
{
"name": "yarn-test",
"version": "1.0.0",
"private": true,
"dependencies": {
"component-foo": "file:../component-foo"
}
}
Sekarang Anda menjalankan $ yarn install
di dalam yarn-test/
dan yarn-test/node_modules/component-foo/index.js
adalah:
console.log('foo');
Sekarang hapus yarn-test/node_modules/
dan yarn-test/yarn.lock
dan ubah component-foo/index.js
menjadi ini:
console.log('bar');
Sekarang Anda menjalankan $ yarn install
di dalam yarn-test/
lagi dan yarn-test/node_modules/component-foo/index.js
akan menjadi:
console.log('foo');
Ini menggunakan versi cache component-foo
, tetapi component-foo/index.js
telah berubah.
Apa perilaku yang diharapkan?
Saya berharap bahwa yarn-test/node_modules/component-foo/index.js
harus seperti ini di akhir:
console.log('bar');
Mungkin paket yang diinstal dengan jalur lokal seperti file:../
tidak boleh di-cache sama sekali, jika kami tidak dapat mengetahuinya, jika sudah berubah.
(FYI: Sepertinya npm tidak menyimpan cache mereka.)
Sebutkan node.js, benang, dan versi sistem operasi Anda.
$ node -v
v6.9.1
$ yarn -V
0.18.0
macOS 10.12.1
Ini membodohi saya juga. Pasti ada cara untuk mengatasi ini tanpa membersihkan semua cache.
Saya pikir mungkin ada tiga cara untuk membuat benang dapat digunakan untuk kasus ini:
file://<path>@<cache_timestamp>
yarn cache rm <package>
dan yarn cache add <package>
. Untuk semua dependensi.Saya ingin saran kedua diimplementasikan. Kecuali, opsi ketiga dapat berguna untuk kasus lain juga. Misalnya, yarn cache add <package>
dapat digunakan untuk menyegarkan cache untuk dependensi yang sudah di-cache jika ada yang tidak beres saat mengunduh dependensi.
@hantuzun mengapa cache dependensi lokal sama sekali? mereka lokal, jadi akan cepat terlepas dari cache atau tidak.
@ satya16 Anda benar. Meskipun, saya lebih cenderung ke pendekatan ketiga akan membantu jika ketergantungan dari jaringan dimodifikasi dengan sengaja.
Sesuatu seperti yarn cache ignore <package>
akan berguna. Tapi saya pikir mereka tidak harus saling eksklusif. Mengabaikan paket berguna, tetapi membutuhkan pekerjaan manual. Dependensi file dapat dibuat berfungsi tanpa upaya tambahan jika diabaikan secara default.
Adakah yang bisa menjelaskan logika internal saya?
Pemahaman saya:
Ketika sebuah ketergantungan dengan file:
ditemukan, file-resolver.js
. Dikatakan bahwa ketergantungan harus disalin dan tidak di- hash . Bukankah tidak ada hash berarti itu tidak harus di-cache ...? Tetapi copy-fetcher.js
tampaknya menyetel hash ke string kosong alih-alih menyimpan null
... Apakah ini masalah?
@bestander atau @kittens Mungkin Anda bisa menjelaskan lebih lanjut ...? Ingin mendapat sedikit bantuan untuk membuat PR ♥
Hash berarti hash md5 yang digunakan untuk tarball-fetcher, misalnya.
Hash ini kemudian ditambahkan ke file yarn.lock untuk verifikasi di masa mendatang dan juga ditambahkan ke nama folder saat menyimpan folder unzip di cache.
Anda menggali ke arah yang benar, terima kasih telah melihat hal ini, PR sangat disambut baik.
Anda mungkin bisa memulai dengan PR yang menambahkan tes unit yang rusak
Anda mungkin bisa memulai dengan PR yang menambahkan tes unit yang rusak
Oke, terima kasih atas tanggapan Anda. Haruskah saya melakukan ping kepada Anda sebagai reviewer di PR atau haruskah saya melakukan ping ke orang lain (atau bukan siapa-siapa) ...?
Ya, ping aku
@bestander mungkin masalah ini tidak boleh ditutup karena belum diperbaiki?
Ya, itu harus dibuka kembali. Itu ditutup karena saya menulis "perbaikan # 2165" di judul PR saya. Awalnya saya pikir ini akan menjadi PR yang berkelanjutan, tetapi untuk memperbaiki bug ini kami menginginkan dua PR: yang pertama menambahkan tes unit (pernyataan yang akan gagal tidak benar-benar aktif, jadi CI tidak meledak) dan yang kedua benar-benar akan memperbaikinya.
Maaf, github menutup masalah saat PR digabungkan
jadi jelas ini masih menjadi masalah? cukup menjengkelkan untuk berkembang, jujur saja. itu menyebabkan sedikit gangguan bagi saya pada tingkat pribadi di tempat kerja, di mana saya menggunakan file:
untuk membuat lingkungan pengembangan modular. bagian yang sial adalah bahwa setiap paket lokal yang saya edit (menggunakan file:
path di package.json
), perlu melakukan ini, untuk menarik konten yang diperbarui:
mengedit konten paket eslint-config-base-eslint saya
yarn cache clean && rm -rf node_modules/eslint-config-base-eslint && yarn install --force && yarn lint
Setiap orang dipersilakan untuk berkontribusi pada proyek ini.
Bisa apa saja - mengirimkan tes integrasi yang rusak untuk kasus ini, memperbaiki atau meyakinkan seseorang untuk memperbaiki.
Jika Anda ingin mengobrol tentang cara terbaik untuk mendekati itu, Anda dapat menemukan bantuan di saluran perselisihan.
Saya sebenarnya berpikir bahwa perbaikannya harus 10-15 baris kode, ini mungkin akan menghemat banyak waktu untuk memperbaikinya lebih cepat
FYI: Bisa jadi masalah ini juga relevan untuk langkah linking dependencies
lambat. Lihat komentar saya di sini: https://github.com/yarnpkg/yarn/issues/1496#issuecomment -282688818.
Maaf. Saya tidak dapat menemukan waktu untuk membuat PR lain untuk masalah ini :( Saya (dan masih) sangat sibuk.
@bestander Ini adalah pemblokir yang cukup besar bagi saya, mengerjakan proyek multi-modul. Jika saya membaca tautan kode dan komentar hash
(bukan null) setiap kali mencoba menyelesaikannya sehingga memaksa instal ulang? Ucapkan UUID atau stempel waktu saat ini? Maafkan saya jika saya melewatkan sesuatu, saya tidak terbiasa dengan cara kerja kode.
Cache baru dengan cap waktu dan uuid terdengar seperti retasan yang masuk akal.
Idealnya kita harus menyalin file secara langsung tanpa cache tetapi mungkin file
perubahan yang lebih kompleks.
Silakan kirim PR
Pada hari Selasa, 7 Mar 2017 pukul 03:38, Matt Traynham [email protected] menulis:
@bestander https://github.com/bestander Ini adalah pemblokir yang cukup besar
bagi saya, mengerjakan proyek multi-modul. Jika saya membaca @donaldpipowitch
https://github.com/donaldpipowitch tautan kode dan komentar
dengan benar, dapatkah kita meminta pemecah file membuat hash baru (sebagai ganti
null) setiap kali mencoba menyelesaikannya sehingga memaksa instal ulang? Ucapkan UUID
atau cap waktu saat ini? Maafkan saya jika saya melewatkan sesuatu, saya tidak terbiasa
dengan cara kerja kodenya.-
Anda menerima ini karena Anda disebutkan.Balas email ini secara langsung, lihat di GitHub
https://github.com/yarnpkg/yarn/issues/2165#issuecomment-284612526 , atau nonaktifkan
utasnya
https://github.com/notifications/unsubscribe-auth/ACBdWDS3xSr8KNu1o9Zn8sA9xdO8pyHOks5rjNEmgaJpZM4LFbmf
.
@bestander Mengenai komentar terakhir Anda: Bukankah lebih masuk akal untuk menautkannya dengan symlink, daripada menyalin file? Atau adakah alasan untuk tidak melakukan itu?
@danrot windows sepertinya membutuhkan admin untuk symlink.
juga mengacaukan berulang-ulang untuk menemukan modul node
Symlink juga mengabaikan .npmignore
dan hal-hal seperti itu. (Yang saat ini tampaknya juga diabaikan. Yang bisa menjadi masalah: https://github.com/yarnpkg/yarn/issues/1496#issuecomment-282688818)
Apakah ada solusi untuk saat ini melarang pembersihan seluruh cache? Sayangnya sepertinya tidak ada perintah yarn cache rm package
kind-of.
@ rhys-e Saya menggunakan skrip kecil ini:
#!/bin/sh
if [ $# != 1 ]
then
echo Usage $0 package-name
exit 1
else
echo Reinstalling $1
fi
dir="node_modules/$1"
if [ -d $dir ]
then
rm -fr $dir
fi
cache=`yarn cache dir`/npm-${1}*
# echo $cache
rm -fr $cache && yarn install --force
Adakah yang pernah mencoba yarn link
semua dependensi lokal pada postinstall
? Sepertinya solusi yang tepat sampai perbaikan yang tepat mendarat.
Saya kira idenya adalah tidak harus memperbarui nomor versi paket pada setiap perubahan untuk dependensi lokal. Benang link akan memaksa Anda melakukan itu, bukan? (tidak mencoba)
Di sisi saya, apa yang akhirnya saya lakukan adalah memanggil skrip pada fase preInstall yang membandingkan apa yang ada di folder sumber dan folder node_modules untuk dependensi lokal. Jika mendeteksi adanya perbedaan, itu hanya menghapus ketergantungan yang di-cache dan menghapus file integritas (untuk memaksa instal ulang). Jadi, ketika tidak ada perubahan, pemasangan benang cukup cepat (tidak banyak dependensi lokal) dan jika ada versi cache yang sudah ketinggalan zaman tidak digunakan.
Tautan @lucdew pada dasarnya akan membuat symlink di bawah tenda, yang berarti versi lokal terbaru akan digunakan. Tetapi saya pikir memiliki skrip, yang sebelum instalasi membersihkan cache dari departemen tertentu adalah solusi yang tepat sekarang.
Saya telah menguji kombinasi yang berbeda dalam mengatasi perubahan dalam paket lokal yang tidak diperbarui dalam versi terinstal proyek induk di bawah ./node_modules/. Saya menemukan bahwa ini akan dilakukan, tanpa perlu menghapus ./node_modules/
yarn cache clean; yarn upgrade file:../<package>
Tidak perlu dikatakan, memaksa pembersihan cache global secara manual seharusnya tidak diperlukan untuk memperbarui / meningkatkan paket lokal.
@fungilation Sebagai solusinya, Anda juga dapat menggunakan npm untuk menginstal dependensi lokal dan menghindari kehilangan seluruh cache setiap kali Anda menginginkan pembaruan.
Sesuai # 2860 dan komit penggabungan berikutnya https://github.com/yarnpkg/yarn/commit/7241de13bb236526fa439a2528fbed319f60ef24 , Anda sekarang dapat "menyegarkan" file:
dependensi protokol dengan
yarn install --force
Edit Atau tingkatkan paket tertentu (tidak menyadari ini berfungsi juga). Jika versi dependensi tidak berubah, ini tidak mengubah lockfile, tetapi masih akan menyalin versi yang lebih baru.
yarn upgrade [file protocol package name]
Perubahan PR akan membatalkan ketergantungan di cache & menginstalnya kembali secara lokal. yarn install
juga akan berfungsi jika versi dependensi berubah, yang membuat file yarn.lock tidak valid. Anda tidak perlu lagi mengosongkan cache, atau menghapus modul dari instalasi lokal.
Itu juga menjadi jelas bagi saya bahwa ada RFC aktif untuk menghubungkan dependensi, mungkin dengan protokol link:
. Itu bisa diikuti di sini, https://github.com/yarnpkg/rfcs/pull/34.
@mtraynham Terima kasih atas permintaan tarik Anda! 👌 Ini luar biasa. Ada alasan mengapa --force
dibutuhkan? Saat ini saya bahkan tidak tahu apa yang dilakukannya sekarang tanpa mencarinya :) Hanya bertanya, karena npm tidak memerlukan bendera --force
dan akan menyenangkan berperilaku seperti npm.
Edit Sepertinya yarn upgrade [dependency]
berfungsi. Saya ingin menunjukkan, ini tidak selalu mengubah lockfile, yang seharusnya hanya mencerminkan perubahan versi package.json. Saya telah memperbarui posting asli saya, karena peningkatan mungkin lebih sesuai.
Versi singkatnya adalah, Yarn tidak akan melakukan apapun dengan cache-resolver jika lockfile tidak berubah, jadi kita perlu melewati pemeriksaan lockfile dan menanyakan cache apakah ada versi yang lebih baru. Itu dapat dilakukan dengan menggunakan upgrade
atau install --force
Per yarn install --force
dokumentasi
"itu mengambil kembali semua paket, bahkan yang telah diinstal sebelumnya".
Ini benar-benar berarti itu akan melewati pemeriksaan integritas file kunci. Pemeriksaan integritas lockfile biasanya akan lolos jika Anda tidak mengubah file package.json dan melakukan bail out dengan baik. Melewati itu meminta cache untuk memeriksa dependensi yang hilang / tidak cocok terhadap lockfile, mendownloadnya jika hilang, dan menyalin kembali dependensi yang lebih baru / hilang secara lokal. Kemudian menjalankan skrip npm install
/ postInstall
.
Perubahan PR sekarang akan membatalkan ketergantungan file:
di cache dan menyalin versi baru ke bawah secara lokal. Sebelum ini, itu tidak akan pernah membatalkan ketergantungan file:
. Untuk protokol lain, jika Anda tidak mengubah file package.json Anda, mereka tidak akan berubah (di cache dan secara lokal).
Jadi, apa artinya ini bagi kita? Saya memiliki sekitar 60 ketergantungan pada sebuah proyek (mulai dari Angular hingga Webpack), dengan satu ketergantungan file:
. Pada install --force
, di mana saya hanya ingin menyegarkan ketergantungan lokal, dibutuhkan sekitar ~ 5 detik (naik dari ~ 1,5 detik untuk yarn install
). Bagi saya ini cukup dapat diabaikan, dan saya sebenarnya sangat terkesan dengan betapa sedikit kerja benang yang coba dilakukan di seluruh proses.
Jika ada perintah CLI lain untuk melewati pemeriksaan lockfile dan memeriksa cache hanya untuk ketergantungan file tertentu, itu mungkin akan lebih cepat, tetapi saya belum menemukannya.
Semua yang dikatakan, saya masih menyebut ini sebagai plester. Ini dapat diganti dengan solusi yang lebih baik seperti link:
; Saya tidak berpikir ada orang yang benar-benar peduli untuk menyimpan ketergantungan lokal. Paling tidak, biaya tambahan menggunakan install --force
atau upgrade
sebagian besar lalai dan Anda tidak lagi harus yarn cache clean; mv node_modules /tmp/
.
Jawaban yang bagus. 👏 Terima kasih telah menuliskan ini.
Apakah benang menimpa file proyek symlink lokal dengan file dari cache benang? (karena sepertinya itulah yang terjadi)
Perubahan PR sekarang akan membatalkan file: ketergantungan pada cache dan menyalin versi baru ke bawah secara lokal.
Apakah ini berarti bahwa setiap kali saya memanggil $ yarn
di dalam paket yang memiliki "foo": "file:../"
sebagai ketergantungan salinan baru "file:../"
akan dibuat?
Misalnya saya memiliki paket dengan banyak contoh yang juga merupakan paket:
foo/
foo/examples/
foo/examples/example-1/
foo/examples/example-2/
foo/examples/example-3/
...
foo/examples/example-10/
Dan sepertinya saya memiliki foo
10 kali sekarang di cache benang. Saya juga menguji contoh saya pada setiap perubahan versi foo
(dan saya memiliki beberapa modul yang dikonfigurasi dengan cara itu, bukan hanya foo
) sehingga sepertinya cache benang saya tumbuh _really_ cepat saat ini.
Apakah ini perilaku yang benar?
Saya pikir ini adalah alternatif yang lebih baik daripada memiliki versi lama di cache Anda.
Dengan benang 0.26 Anda dapat menggunakan link:
untuk membuat symlink daripada menyalin file.
Kami juga sedang mengerjakan ruang kerja yang akan mengotomatiskan pembuatan symlink, https://github.com/yarnpkg/yarn/issues/3294
Ya, menantikan ruang kerja 👍
link:
belum berfungsi dengan npm, bukan? (Karena https://github.com/npm/npm/pull/15900 masih terbuka.)
Dari npm 5 patchnote , file sekarang secara otomatis dihubungkan dengan sintaks file:
:
npm install ./packages/subdir sekarang akan membuat symlink daripada instalasi biasa. file: //path/to/tarball.tgz tidak akan berubah - hanya direktori yang terhubung. (# 15900)
Jadi ya, tidak ada link
dengan npm.
npm install ./packages/subdir sekarang akan membuat symlink daripada instalasi biasa
Agak disayangkan. Deps file tidak pernah berperilaku sama karena menyalin semuanya (termasuk node_modules
) dan tidak menghormati bidang .npmignore
atau files
. Sekarang lebih buruk dengan symlink.
Saya pikir file: dan link: dapat ditingkatkan lebih lanjut, ada berbagai strategi yang memiliki PRO dan CON mereka sendiri dan Yarn harus memungkinkan orang untuk memilih satu.
Misalnya knit
RFC dapat diimplementasikan sebagai salah satu strategi https://github.com/yarnpkg/rfcs/blob/master/accepted/0000-yarn-knit.md
@bestander
Saya pikir ini adalah alternatif yang lebih baik daripada memiliki versi lama di cache Anda.
Atau begitulah Anda akan percaya sampai Anda kehabisan ruang disk dan menemukan bahwa cache Yarn Anda menggunakan puluhan gigabyte untuk jutaan file yang sama sekali tidak berguna .
IMO yang membuat semuanya lebih serius rusak daripada sebelumnya, karena Anda hanya mengetahui setelah Anda merusak sementara sistem pengembangan Anda.
Hai teman-teman, ada pembaruan tentang masalah ini? Ini benar-benar masalah besar bagi kami, terutama saat kami mengerjakan beberapa produk sekaligus yang bergantung pada multi-dependensi terkait yang sama. Gigabyte cache dalam satu hari pengembangan, dll. Bisakah Anda setidaknya menjadikannya opsional dan menonaktifkan cache untuk paket semacam itu?
@nikdojo Gunakan benang link:
protokol untuk dependensi daripada file:
, ini menggunakan symlink. Itu diperkenalkan di 0,26 .
Alternatifnya, mulai gunakan ruang kerja jika Anda memiliki banyak dependensi antar-proyek.
@mtraynham Thx untuk petunjuknya, saya mencoba menemukan info apa pun tentang link:
protokol di dokumen resmi, tetapi sepertinya tidak ada. Bereksperimen dengan ruang kerja sekarang.
@bestander btw seperti yang Anda tahu, react-native tidak mendukung symlink, jadi jika kami bekerja dengan rn libs, itu masih menjadi masalah besar.
Ini tidak pernah terpecahkan, bukan? Anda harus menggunakan linklocal (paket NPM) untuk menghubungkan paket lokal (yang seharusnya menjadi cara standar benang beroperasi saat menggunakan paket dari sistem file lokal - menggunakan junctions atau symlink pada Windows daripada caching). yarn install
kemudian menimpa semuanya dengan hal-hal lama dari cache dan Anda harus mulai menautkan lagi.
Bisakah kita menjadi astronot arsitektur yang lebih sedikit dan tidak menyimpan paket lokal dalam cache? Masalah ini sekarang berusia 1,5 tahun, dan saya bosan menjalankan yarn add ../<another-local-package>
setiap kali saya mengubah sesuatu di another-local-package
.
Hai @filasi
Saya telah membuka masalah terkait lainnya: # 6037
tidak bekerja
Saya sudah memasukkan file App.js
console.log ('here we are'), dan tidak menghasilkan.
kemudian hapus semua file dan itu masih membuat output dari cache.
Bagaimana cara menghindarinya?
Benang benar-benar mengecewakan saya dalam masalah ini. Itu bagus untuk yang lainnya, kecuali untuk ini.
Saya telah mencoba menginstal versi baru dari paket lokal untuk tujuan pengujian, dan saya tetap menggunakan paket lama apa pun yang saya lakukan.
Saya sudah mencoba:
yarn cache clean package-name
)yarn add
dengan --force
node_modules/package-name
dan yarn add
ing lagiIni konyol, dan saya telah menghabiskan hampir 4 jam hari saya untuk ini.
Kami membutuhkan kemampuan untuk mengembangkan dan menginstal ulang paket lokal . Saya mengandalkan benang untuk menginstal file di folder .bin, jadi yarn link
tidak mungkin.
@ Yarn Developers: Apakah Anda dapat menginstal paket lokal, membuat perubahan pada paket lokal tersebut, dan kemudian mendapatkan perubahan untuk diterapkan dengan menginstal lagi?
@gregjacobs Saya sukses dengan yarn install --force
@jonathantorley Saya baru saja mencobanya lagi dengan --force
dan masih tidak berhasil dengan benang 1.12.3
Untuk orang lain yang menghadapi masalah ini: satu solusi yang saya gunakan agar ini benar-benar berfungsi adalah meningkatkan nomor versi paket dependen. Agak mengganggu, dan Anda harus ingat untuk melakukannya pada setiap perubahan (kecuali jika Anda dapat membuat skrip).
yarn
seharusnya tidak memerlukan solusi ini saat menginstal paket lokal
Saya menambahkan yarn upgrade MY_PACKAGE_NAME
dalam preinstall
skrip, dan itu meningkatkan ke versi NPM terbaru dengan baik. (Namun, saya perlu meningkatkan versi NPM secara manual).
Tampaknya yarn add file:PATH
sekarang selalu meningkatkan konten baru sekarang di benang 1.13.0.
yarn install
masih belum.
@leavter Masih tidak untuk saya.
Saya harus mengganti nama tgz agar bisa diperbarui
Coba gunakan perintah link
: https://yarnpkg.com/lang/en/docs/cli/link/
yarn add file:PATH
tidak meningkatkan konten baru untuk saya. Selain itu, file dalam package.json dan .npmignore tidak dihormati.
Ini berfungsi jika Anda mengubah versi paket Anda.
Jika Anda ingin yarn add file:PATH
untuk menghormati file di package.json dan .npmignore, Anda harus menjalankan yarn pack
dalam ketergantungan paket lokal Anda dan kemudian di mana Anda ingin menginstalnya jalankan yarn add file:path-to-local-pacckage.tgz
Coba gunakan perintah
link
: https://yarnpkg.com/lang/en/docs/cli/link/
yarn link
tidak dimaksudkan untuk menjawab masalah yang sama. Tidak baik jika seseorang menginginkan paket npm seperti jika itu diterbitkan dengan menghormati file di package.json dan .npmignore
@leavter Masih tidak untuk saya.
Saya harus mengganti nama tgz agar bisa diperbarui
Saya tidak memiliki tgz
dalam paket saya yang saya gunakan yarn add file: PACKAGE_PAH
untuk menambahkannya dalam proyek saat ini. Saya hanya memiliki kode js di paket saya. Mungkin tgz masih salah?
tidak bekerja untukku juga
@bestander mengapa masalah ini ditutup? Benang masih menyimpan file lokal dan paket tgz. Ruang kerja bukanlah solusi dalam beberapa kasus, misalnya jika satu paket memiliki deps dengan versi tertentu, dan paket lain memiliki devDeps paket yang sama seperti yang pertama, tetapi dengan versi lain, dan jika Anda menautkan satu paket ke paket lain, proyek Anda telah rusak .
Saya memiliki masalah yang sama dengan @gregjacobs. yarn cache clean package
tidak membantu. Tetapi saya menemukan bahwa jika Anda menginstal yarn add path/to/package.tgz
dan kemudian mengganti arsip ke yang lain, Anda dapat menginstal versi baru cukup ubah jalur seperti yarn add path/to/../to/package.tgz
, jadi jalur absolutnya sama, tetapi untuk utasnya berbeda .
Saya tidak mengerti di mana lagi paket cache toko benang dengan jalur resolusi, bahkan yarn cache list --pattern package
kosong.
Saya pikir masalahnya ada di sini https://github.com/yarnpkg/yarn/blob/eb2b565bb9b948e87b11119482ebc184a9d66141/src/resolvers/exotics/tarball-resolver.js#L58 -L63
Apa yang terjadi:
path/to/package.tgz
menghasilkan hash (itulah mengapa path/to/package.tgz
dan path/to/../to/package.tgz
menghasilkan hash yang berbeda)/Users/kich/Library/Caches/Yarn/v4/.tmp/c019816ee7d10ed5e1fef4072e8cc617
)isValidModuleDest
kembali false
dan semuanya berjalan dengan baikisValidModuleDest
return true
yarn cache clean package
, tetapi direktori temp tetap tidak tersentuh@bestander, bisakah kita menghapus direktori temp di sini https://github.com/yarnpkg/yarn/blob/master/src/config.js#L431 ?
Menghadapi masalah yang sama, cache di bawah folder temp memakan waktu 10GB setelah saya mengerjakan pacakge lokal saya hanya untuk satu hari!
Bisakah kita membuka kembali masalah ini? Kami menghadapi masalah yang sama. Dua proyek yang mereferensikan paket lain melalui file:
Saya pikir protokol tautan adalah perbaikan terbaik untuk ini, file: // tidak berfungsi karena masih membutuhkan cache yang bersih secara manual & pemasangan paksa
https://github.com/yarnpkg/yarn/issues/2165#issuecomment -345825904
buat saja ketergantungan Anda seperti ini
"<package>": "link:./libs/<package>"
@alxtz Apakah protokol tautan berfungsi dengan paket di tgz?
Saya pikir protokol tautan adalah perbaikan terbaik untuk ini, file: // tidak berfungsi karena masih membutuhkan cache yang bersih secara manual & pemasangan paksa
buat saja ketergantungan Anda seperti ini
"<package>": "link:./libs/<package>"
Terima kasih untuk ini mereplikasi perilaku NPM yang akan menghubungkan referensi file:..
di node_modules
. Tampaknya tidak didokumentasikan, setidaknya tidak di sini di mana saya akan menemukannya: https://yarnpkg.com/lang/en/docs/package-json/
Sayangnya, link
tidak dapat digunakan di semua kasus.
Misalnya, saya memerlukan ketergantungan bersama / rekan dari paket SDK saya, yang ketika saya membuat perubahan, saya akan menautkan untuk pekerjaan pengembang lokal.
Dengan link
, yarn tidak menyadari bahwa dependensi adalah dependensi bersama / peer dan menggunakan paket lokal di mana symlink berada, yang salah.
Saya telah menggunakan yarn pack
bersama yarn add file:<path_to_packed_tgz>
untuk menyiasati ini.
Sementara saya dapat terus mengganti nama paket setiap kali saya mengemasnya dan menempelkannya ke repo saya, agar tidak menghasilkan hash yang sama, sesuai dengan temuan fantastis
Saya mem-fork repo dan meletakkan klausa ekstra di pernyataan if untuk menghentikan thread agar tidak pernah memuat paket .tgz lokal dari cache jika ditentukan menggunakan yarn add file:<path>
.
const dest = this.config.getTemp(crypto.hash(url));
// If specified using file: never load from cache
if (!url.match(/file:/) && (await this.config.isValidModuleDest(dest))) {
// load from local cache
} else {
// continue as if it's a new package
}
Saya dapat membuat PR jika orang-orang menginginkannya, meskipun saya belum pernah melakukannya sebelumnya dan ini perbaikan yang cukup rumit.
Bisakah seseorang mengkonfirmasi apakah pendekatan ini akan terus menambahkan paket lokal ke cache benang atau tidak?
@ojboj untuk saat ini, yalc
mungkin bisa membantu sampai ini diperbaiki. Telah bekerja sangat baik bagi saya untuk menguji paket secara lokal sebelum diterbitkan.
@souporserious Itulah yang saya butuhkan / inginkan, terima kasih banyak!
Gila ini masih menjadi masalah setelah bertahun-tahun.
Apakah itu diperbaiki di [email protected]?
@wKich Saya yakin begitu! Saya belum mengujinya secara pribadi, tetapi sepertinya mereka menyelesaikan pengembangan lokal melalui protokol portal baru.
Saya masih mendapatkan kesalahan "membongkar di tujuan yang sama" menggunakan protokol link:
, dan itu mereferensikan direktori cache saya, jadi menurut saya benang masih menyimpan ketergantungan link:
. Saya mereferensikan 2 salinan dari paket lokal yang sama, disalin ke folder .deps/
dari setiap aplikasi yang menggunakannya - front-end
dan renderer
dalam kesalahan di bawah ini. (Tidak dapat menautkan ke aslinya karena alasan yang tidak terkait)
warning Pattern ["@horizon/common<strong i="11">@link</strong>:packages/front-end/.deps/@horizon/common"] is trying to unpack in the same destination "/home/garyo/.cache/yarn/v6/[email protected]/node_modules/@horizon/common" as pattern ["@horizon/common<strong i="12">@link</strong>:packages/renderer/.deps/@horizon/common"]. This could result in non-deterministic behavior, skipping.
Komentar yang paling membantu
@hantuzun mengapa cache dependensi lokal sama sekali? mereka lokal, jadi akan cepat terlepas dari cache atau tidak.