Merekod dan menganalisis pepijat benang yang telah wujud selama 6 tahun

青灯夜游
Lepaskan: 2022-11-04 19:29:42
ke hadapan
1498 orang telah melayarinya

Merekod dan menganalisis pepijat benang yang telah wujud selama 6 tahun

Saya baru-baru ini menemui pepijat benang Selepas mencari, saya mendapati ia wujud selama 6 tahun Apakah jenis masalah ajaib ini? Selepas beberapa analisis dan penyiasatan, saya memberikan 6 penyelesaian. . .

1. Penerangan Masalah

Beberapa projek yang telah saya ambil alih baru-baru ini menggunakan pengurus pakej yarn@v1.22.19 Selepas memasang dependensi, tidak kira sama ada ia berjaya atau tidak, sambungan rangkaian sentiasa muncul. Akan ada masalah dan ia akan tersekat untuk masa yang lama, dan kemudian akan terdapat beberapa baris log tidak normal seperti ini: info There appears to be trouble with your network connection. Retrying.... Merekod dan menganalisis pepijat benang yang telah wujud selama 6 tahun

Kadang-kadang sesetengah pakej ajaib (seperti node-sass) adalah tidak normal dan menyebabkan pemasangan gagal Akibatnya, pemasangan tersekat untuk masa yang lama sebelum kegagalan ditemui, yang sebenarnya mengecewakan. Di samping itu, terdapat berpuluh-puluh item yarn berkaitan dalam github gudang issue, dengan jangka masa 6 tahun dari 2016 hingga 2022. Terdapat pendapat yang berbeza mengenai sebab dan penyelesaiannya. Saya sangat ingin tahu tentang jenis masalah ajaib ini yang tidak dapat diselesaikan selama 6 tahun, jadi saya memutuskan untuk mengetahuinya. [Tutorial berkaitan yang disyorkan: tutorial video nodejs, Video pengaturcaraan]

Merekod dan menganalisis pepijat benang yang telah wujud selama 6 tahun

2. Menyelesaikan masalah

2.1. Carian kata kunci

2.1.1. Cari github

Apabila anda menghadapi masalah dan ralat yang tidak ada idea, Petua pertama ialah mencarinya. Cari mesej ralat yarn dalam github gudang There appears to be trouble with your network connection Anda boleh melihat bahawa terdapat 1 kod berkaitan dan 91 berkaitan issue dalam hasil carian. Selepas mencari seketika dalam issue, saya tidak menemui penyelesaian yang sesuai, jadi saya pergi ke langkah seterusnya: cari kod. Merekod dan menganalisis pepijat benang yang telah wujud selama 6 tahun

2.1.2. Kod carian

Atas sebab rangkaian, pergi terus ke direktori pemasangan yarn setempat untuk mencari. Gunakan vscode untuk membuka direktori pemasangan yarn (direktori tempatan saya ialah ~/.volta/tools/image/yarn/1.22.19), dan cari secara global untuk kata kunci There appears to be trouble with your network connection. Anda boleh melihat bahawa terdapat juga hanya satu hasil dan keseluruhan mesej ralat diberikan kepada pembolehubah offlineRetrying. Merekod dan menganalisis pepijat benang yang telah wujud selama 6 tahun

Kata kunci carian globalofflineRetrying Terdapat 2 hasil kesemuanya, kecuali keputusan dalam langkah sebelumnya, hanya terdapat 1 petikan. Kod di sini terutamanya membuang pengecualian dan cuba semula, dan tiada lagi kata kunci untuk dicungkil. Seterusnya, masukkan proses penyahpepijatan, letakkan titik putus di hadapan baris offlineRetrying kod dan nyahpepijat untuk melihat mesej ralat dan konteks tertentu. Merekod dan menganalisis pepijat benang yang telah wujud selama 6 tahun

2.2. Penyahpepijatan program

2.2.1 Tentukan arahan penyahpepijatan

Memasang kebergantungan memerlukan arahan yang dijalankan. yarn, Jadi bagaimana untuk menyahpepijatnya? yarn ialah pakej npm, yang sebenarnya memanggil node xxx.js apabila dilaksanakan, dan ini xxx.js biasanya dikonfigurasikan dalam medan package.jsonbin . Seperti yang anda boleh lihat daripada gambar di bawah, fail sepadan yarn ialah ./bin/yarn.js, jadi anda boleh menggunakan baris arahan penyahpepijatan ini: node --inspect-brk ~/.volta/tools/image/yarn/1.22.19/bin/yarn.js. (Untuk nyahpepijat Node.js, sila rujuk dokumen rasmi) Merekod dan menganalisis pepijat benang yang telah wujud selama 6 tahun

2.2.2 Mulakan nyahpepijat

tempat pertama pembolehubah offlineRetrying Tambah pernyataan cli.js:66099debugger sebelum baris kod. Merekod dan menganalisis pepijat benang yang telah wujud selama 6 tahun

Kemudian kembali ke direktori akar projek perniagaan dan jalankan arahan penyahpepijatan node --inspect-brk ~/.volta/tools/image/yarn/1.22.19/bin/yarn.js. Pada masa ini, program digantung dan menunggu alat penyahpepijatan disambungkan dan mencetak log berikut: Merekod dan menganalisis pepijat benang yang telah wujud selama 6 tahun

Kemudian buka chrome halaman penyahpepijatan terbina dalam chrome://inspect/#devices, cari Target dengan laluan fail yang sama, dan klik butang inspect untuk mula menyahpepijat.

Merekod dan menganalisis pepijat benang yang telah wujud selama 6 tahun

Kemudian chrome akan membuka tetingkap DevTools bebas Memandangkan perintah node --inspect-brk digunakan, DevTools titik putus automatik berada dalam fail yang sedang dinyahpepijat. kedudukan permulaan, anda perlu menekan F8 untuk melangkau titik putus dan meneruskan pelaksanaan. Merekod dan menganalisis pepijat benang yang telah wujud selama 6 tahun

Setelah menunggu dalam tempoh yang singkat, DevTools berhenti pada titik putus yang ditambahkan sebelum ini Anda dapat melihat bahawa ini adalah pengecualian tamat masa dan permintaan yang menyebabkan pengecualian ialah GET: https://yarnpkg.com/latest-version. Menggunakan curl untuk meminta pautan ini mengakibatkan tamat masa 210s. Mengakses pautan ini menggunakan proksi boleh berjaya, tetapi permintaan itu diubah hala ke classic.yarnpkg.com/latest-vers…, dan hasil pulangan ialah 1.22.19. Merekod dan menganalisis pepijat benang yang telah wujud selama 6 tahun

Masalahnya pada dasarnya jelas sekarang Sebab utamanya ialah permintaan telah tamat masa dan berbilang percubaan semula menyebabkan masalah pada permulaan artikel Anda boleh menggunakan proksi untuk mengelakkan masalah ini. Membosankan jika siasatan berakhir di sini.

2.2.3. Siasatan mendalam

Untuk memahami lebih lanjut yarn mengapa meminta yarnpkg.com/latest-vers… , gunakan ini Pautan adalah carian kata kunci dalam kod dan mendapati rangkaian kata kunci ini: https://yarnpkg.com/latest-version -> SELF_UPDATE_VERSION_URL -> ditunjukkan di bawah: _checkUpdatecheckUpdate

Merekod dan menganalisis pepijat benang yang telah wujud selama 6 tahun

Merekod dan menganalisis pepijat benang yang telah wujud selama 6 tahun

Merekod dan menganalisis pepijat benang yang telah wujud selama 6 tahun

3. Tentukan sebabnya

Seperti yang dinyatakan di atas Disimpulkan bahawa hubungan panggilan bagi pautan tamat masa ialah: -> ->

, digabungkan dengan ulasan dan kod

fungsi, setiap kali checkUpdate dilaksanakan Semasa memasang arahan, _checkUpdateyarnpkg.com/latest-vers…SELF_UPDATE_VERSION_URL akan diminta untuk menyemak sama ada terdapat versi baharu yang perlu dikemas kini. Walau bagaimanapun, akses pautan ini tamat masa dan akan dicuba semula selepas kegagalan Tamat masa lalai ialah 30s dan bilangan percubaan semula ialah 4, jadi selepas pemasangan selesai, ia masih akan terperangkap selama 120s sebelum program benar-benar tamat. https://yarnpkg.com/latest-versioncheckUpdateyarn4. Penyelesaian

Terdapat tiga faktor utama yang menyebabkan masalah: menyemak kemas kini, tamat masa dan mencuba semula, anda boleh mengoptimumkan rangkaian, melaraskan tamat masa , dan lompat Terdapat 3 arah untuk menyelesaikan masalah dengan menyemak dan mengemas kini Terdapat 6 penyelesaian di bawah untuk rujukan.

4.1 Optimumkan rangkaian

Adalah mudah untuk memikirkan idea ini Memandangkan masa akses tamat, kemudian tingkatkan kelajuan permintaan.

[Pilihan 1] Gunakan proksi untuk mengoptimumkan rangkaian (disyorkan)

    Mengambil persekitaran pembangunan saya sebagai contoh, arahannya kelihatan seperti ini:
$ yarn install --proxy "http://{domain}:{port}" --https-proxy "http://{domain}:{port}"
Salin selepas log masuk
4.2 Laraskan tamat masa

yarn install --proxy "http://10.180.55.191:7890" --https-proxy "http://10.180.55.191:7890"
Salin selepas log masuk
Idea ini lebih mudah dan boleh digunakan untuk lebih banyak senario Jika kaedah lain tidak berkesan, anda boleh mencubanya.

[Pilihan 2] Ubah suai tamat masa rangkaian (bergantung pada situasi)

Tamat masa lalai ialah 30s dan boleh ditukar kepada 2s selepas pengubahsuaian wujud, tetapi ia boleh Menyemak kemas kini gagal dengan cepat tanpa menunggu beberapa minit.
Sesetengah pembangun mengatakan bahawa pengecualian berlaku kerana beberapa pakej

yang besar telah dipasang terlalu lama dan melebihi tamat masa lalai 30-an, oleh itu, tamat masa rangkaian juga boleh ditukar kepada nilai yang lebih besar untuk mengelakkan ini tidak normal.

yarn install --network-timeout 2000
Salin selepas log masuk

4.3 Langkau menyemak kemas kini npm

Penyelesaian idea ini terutamanya datang daripada beberapa syarat penamatan dalam fungsi

.
  • 【方案3】修改配置禁止检查更新(推荐)
$ yarn config set disable-self-update-check true$ yarn install
Salin selepas log masuk
  • 【方案4】修改配置把上次更新时间调到百年后(推荐)
$ yarn config set lastUpdateCheck 1e13
$ yarn install
Salin selepas log masuk
  • 【方案5】执行命令时禁用交互式提示(推荐)
$ yarn install --non-interactive
Salin selepas log masuk
  • 【方案6】修改代码跳过检查更新(不推荐)
    • 找到 yarn 的安装目录注释 checkUpdate 的调用,具体代码行为 cli.js:7261,修改后长这样:// this.checkUpdate();
    • 也可以修改其他可以阻断 checkUpdate 函数的代码...

5、最后

以上主要是分享一些问题分析排查的经验,另外也提供了一些 yarn install 超时异常的解决方案,希望能对前端同学们有所帮助。

在快写完这篇文章的时候,yarnpkg.com/latest-vers… 已经可以正常访问,不知道还会不会有人再遇到这个问题。

另外我在 yarngithub issue 中回复了以上的解决方案,希望前端同学们少受点折磨,也希望官方早点修复这个6年陈的老Bug。?

更多编程相关知识,请访问:编程教学!!

Atas ialah kandungan terperinci Merekod dan menganalisis pepijat benang yang telah wujud selama 6 tahun. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:juejin.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!