Yarn: Pembaruan benang tidak memperbarui `package.json` dengan benar untuk dependensi dev

Dibuat pada 25 Okt 2016  ·  83Komentar  ·  Sumber: yarnpkg/yarn

Apakah Anda ingin meminta _feature_ atau melaporkan _bug_?

_bug_

Bagaimana perilaku saat ini?

Menjalankan yarn upgrade untuk memutakhirkan ketergantungan dev, bahkan dengan tanda --dev , akan menambahkan versi yang ditingkatkan dari ketergantungan ke dependencies hash di package.json daripada devDependencies .

Ini mungkin juga menjadi masalah dengan jenis ketergantungan lain (seperti rekan), tetapi saya belum menguji.

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

$ mkdir foo && cd foo
$ yarn init
<snip>
$ yarn add lodash<strong i="19">@3</strong> --dev
<snip>

$ grep lodash package.json -C 1
  "devDependencies": {
    "lodash": "3"
  }

$ yarn outdated
yarn outdated v0.16.1
Package Current Wanted Latest
lodash  3.10.1  3.10.1 4.16.4

$ yarn upgrade lodash --dev
<snip>
success Saved 1 new dependency
└─ [email protected]

$ grep lodash package.json -C 1
  "devDependencies": {
    "lodash": "3"
  },
--
--
  "dependencies": {
    "lodash": "^4.16.4"
  }

Apa perilaku yang diharapkan?

yarn upgrade harus memperbarui string versi entri di devDependencies hash.

Alangkah baiknya jika ini dapat dilakukan tanpa --dev menggunakan lokasi ketergantungan saat ini (memutakhirkan dep dev akan mengubah devDependencies , memutakhirkan dep normal akan mengubah dependencies ) .

Sebutkan node.js, benang, dan versi sistem operasi Anda.

$ node --version
v6.9.1
$ yarn --version
0.16.1
$ sw_vers
ProductName:    Mac OS X
ProductVersion: 10.12
BuildVersion:   16A323
cat-bug

Komentar yang paling membantu

sama di sini dengan benang 1.3.2

Semua 83 komentar

Saya dapat mengonfirmasi bahwa saya melihat ini terjadi pada versi Yarn yang sama persis. Alih-alih memperbarui ketergantungan pengembangan yang ada, ia menambahkan entri baru ke "ketergantungan" dan membiarkan ketergantungan pengembangan yang ada di sana.

Bug terkonfirmasi di sini juga.

Sama disini. standard terus dimasukkan ke dalam dependencies meskipun itu tinggal di devDependencies .

Saya sudah mencoba yarn upgrade standard dan yarn upgrade standard -D . Hal yang sama.

Program yang indah! Terima kasih telah membangunnya!

Ini masalah yang sama, sedikit sebelumnya - # 1262

Sama disini.

Sama disini. Setiap modul yang diperbarui melalui yarn update ditambahkan ke dependencies .
--dev atau opsi lain tidak didokumentasikan untuk yarn update dan tampaknya diabaikan.

Pembaruan IMO harus menerima opsi yang sama seperti install - atau bahkan lebih baik memperbarui ketergantungan dalam kategori yang ditemukan di package.json

node --version
v6.9.0
yarn --version
0.16.1

1620 memperbaiki ini jadi saya akan menutup ini dan memindahkan diskusi ke sana.

Masih belum diperbaiki, saya menggunakan Yarn terbaru yang diinstal melalui Homebrew.

@kube Bisakah Anda menambahkan detail lebih lanjut jika masih menjadi masalah? Versi untuk OS, Node, Yarn? A package.json yang dapat digunakan untuk mereproduksi?

λ yarn --version
0.16.1

Saya menggunakan macOS 10.12.1, menginstal Yarn dengan Homebrew.

Dan inilah package.json yang saya coba.

ts-loader dan webpack-merge sudah ketinggalan zaman, memutakhirkannya dengan benang menambahkannya ke dependensi, meninggalkan devDependency usang.

@kube Silakan coba 0.17.0 yang baru saja dirilis hari ini, perbaikan ini disertakan dalam rilis itu, tetapi tidak di 0.16.1 .

Tentu, tetapi Homebrew masih memiliki 0.16.1

λ brew upgrade yarn
Error: yarn 0.16.1 already installed

Mencoba menginstal dengan NPM dan baru saja memiliki versi terbaru, tetapi tampaknya aneh menginstal Yarn dengan NPM.

Ok semuanya berfungsi dengan baik saat menggunakan 0.17.0, tetapi mungkin Anda harus memperbarui versi Brew.
Manakah pengelola paket pilihan atau cara menginstal Yarn?

Brew adalah metode instalasi yang disukai untuk OSX. Ini masih proses manual untuk memperbaruinya di Homebrew, jadi seseorang harus memintanya untuk diperbarui seperti yang mereka lakukan di sini: https://github.com/Homebrew/homebrew-core/pull/6060

Ketika saya menjalankan yarn upgrade , itu tidak memperbarui versi apa pun di package.json . Ini cukup mengganggu datang dari NPM, di mana secara otomatis akan memperbarui angkanya.

Saya menggunakan benang 0.17.2 dari homebrew.

@milesj , ini mungkin masalah yang terpisah dan berikan langkah-langkah untuk mereproduksi bersama dengan package.json yang dapat kami gunakan untuk mereproduksi.

Saya akan membuat terbitan baru.

Di Debian Stable, benang 0.17.4, masalah ini tampaknya telah diperbaiki setidaknya. Itu meningkatkan lodash@3 menjadi lodash@4 dengan benar, jadi itu bisa saja masalah pergi ke versi terbaru.

Saya mencoba memutakhirkan grunt-sass dari 1.1.0 menjadi 2.0.0 (dalam __dev-dependencies__ saya)
Saya mengeksekusi yarn upgrade [email protected] tetapi menambahkan grunt-sass di __dependencies__ saya dan tidak memutakhirkan yang di __dev-dependencies__

Saya juga mencoba yarn upgrade [email protected] --dev tetapi masalahnya masih ada

Menggunakan benang v0.18.1 Saya masih tidak bisa memaksakan peningkatan sub-ketergantungan. yarn upgrade hanya menambahkan entri baru ke package.json dan tidak memperbarui sub-ketergantungan.

Masalah masih ada di 0.19.1, upgrade benang tidak memperbarui package.json.

@kittens ini tidak diperbaiki oleh # 1620

Saya juga dapat mengonfirmasi masalah ini di 0.19.1.

semuanya - menggunakan yarn add <package-name> akan memperbarui paket yang Anda inginkan untuk saat ini.

yarn upgrade juga tidak berfungsi untuk saya, v0.19.1

upgrade benang saat ini hanya memperbarui yarn.lock, bukan memperbarui package.json.

Dapat mengkonfirmasi masalah di v0.20.3

Saya memiliki masalah yang sama, ketika menggunakan peningkatan benang, itu meningkatkan semua paket, tetapi tidak tercermin dalam file package.json. v0.20.3 .. sangat mengganggu. Saya perhatikan juga ketika menggunakan "yarn install", itu menginstal versi terbaru dari semua paket daftar di package.json dan tidak menempel dengan versi yang disebutkan di dalamnya, jadi ini seperti benang meningkatkannya ke versi terbaru dan juga tidak mencerminkan itu di package.json tetapi ditampilkan di versi terbaru yarn.lock yang diinstal

@kittens v0.20.3 @ Windows dan masih belum memperbarui package.json - hanya file yarn.lock. Anda harus membukanya kembali.

Saya menjatuhkan benang dan beralih kembali ke npm karena bug ini. Tidak peduli bagaimana saya mencoba memutakhirkan paket saya, benang akan mengambil yang terbaru ke dalam cache, dan menyimpan versi lama di package.json saya dan di folder node_modules. Apa gunanya?..

Iya! Saya dapat mengonfirmasi bahwa Yarn v0.21.3 akhirnya memperbarui package.json, setidaknya yarn upgrade-interactive perintah.

@alexdevero saya baru saja mencoba yarn upgrade pada 3 proyek saya: tidak memperbarui package.json ....

tetapi saya mengonfirmasi yarn upgrade-interactive berfungsi ... untuk proyek pertama yang diperbarui
penggunaan berikutnya dari yarn upgrade-interactive pada proyek lain yang membutuhkan pemutakhiran yang sama akan gagal, yaitu "berhasil Semua ketergantungan Anda mutakhir."

saya menguji dengan memperbarui skrip-react dari 0.9.x ke 0.9.3 pada masing-masing dari 3 proyek saya. yarn upgrade-interactive bekerja pada proyek pertama, tetapi kemudian mengabaikan pembaruan pada 2 proyek lainnya.

Sampai hari ini, pada versi 0.21.3, yarn upgrade masih berperilaku salah.

Saya menggunakan yarn add package<strong i="7">@version</strong> --dev sebagai gantinya, dan itu meningkatkan paket sesuai keinginan dan memperbarui package.json dengan benar.

Fwiw, saya telah menggunakan upgrade-interactive yang untuk beberapa alasan tampaknya menghasilkan keberuntungan yang lebih baik.

🍒 🍒 🍒

Sebaiknya diketahui, seperti apa perilaku benang yang diharapkan dalam kasus ini. Bisakah salah satu pengembang benang mengatakan jika benang harus memperbarui package.json atau tidak?

Saya baru saja melakukan yarn upgrade babel-cli yang ada di devDependencies dan itu ditambahkan sebagai ketergantungan produksi (ke dependencies ) ... sesuatu masih benar-benar rusak. Oh, dan saya menggunakan benang v 0.22.0 btw!

EDIT: Ternyata, saya menyetel NODE_ENV ke "produksi" (karena aplikasi saya adalah aplikasi node) dan ini mengacaukan hal-hal seperti "pemasangan benang" (yang akan bertindak seperti yarn install --production dan melewati devDependencies sepenuhnya

Mungkin yarn upgrade juga dipengaruhi oleh variabel lingkungan node.

Baru menyadari ini:
image

Saya bukan seorang apologis atau apapun, saya pikir ini harus dibuka kembali ... tapi bola suci. Masalah 720 sudah cukup untuk menenggelamkan kapal pesiar yang dipenuhi pengembang benang.

Masalah +1 masih ada di Yarn v0.21.3 pada Windows 10 Pro dan Node 6.10.0.

Ini tidak diperbaiki. Saya mendapatkannya di macOS Sierra 10.12.4. Saya memiliki beberapa devDependencies yang merupakan repo git pribadi dan satu standar dependency ( "jquery": "^3.1.1" ). Versi terbaru jQuery adalah 3.2.1, dan yarn upgrade melihatnya ( ├─ [email protected] ) tetapi tidak memperbarui package.json .

yarn --version
0.21.3
node --version
v7.7.4

Buka kembali.

Windows - v0.21.3 gagal dengan yarn upgrade ... ketika menentukan paket setelah itu akan memperbarui baik package.json dan file kunci.

Windows - v0.22 -masih tidak memperbarui package.json tetapi memperbarui file kunci.
bekerja semacam itu tetapi tidak mengidentifikasi semua paket yang seharusnya diperbarui dan dengan demikian merusak berbagai dependensi peer.

Untungnya saya hanya menggunakannya pada satu proyek dan dapat mengembalikan kekacauan itu. Saya suka ide di balik Yarn tapi saya tidak akan mengganggunya sampai ini selesai.

Windows, Yarn v0.22 - tidak memperbarui package.json saat menggunakan yarn upgrade seperti yang disebutkan @LaughingBubba . Folder node_modules diperbarui, tetapi package.json tidak, yang membuat versi paket menjadi berantakan.

@kittens tampaknya tidak masalah ini telah diperbaiki.

Saya baru saja melihat ini lagi di 0.23.2.

Dalam kasus saya, tampaknya jika setidaknya 1 dari dependensi yang ditingkatkan dalam daftar BUKAN devDep, maka itu menempatkan semua peningkatan ke dalam dependensi di package.json.

Pembaruan: Juga melihatnya dengan memperbarui satu devDep. Itu akan disalin ke deps tanpa ditingkatkan.

Ini jelas tidak diperbaiki. Hilang satu jam sekarang karena ini. Bukankah benang seharusnya lebih baik dari npm?

@ fab1an , untuk saat ini gunakan yarn add package-name<strong i="6">@latest</strong> [--dev] untuk memperbarui paket. Ini berperilaku sebagai upgrade diharapkan, memperbarui package.json dengan benar.

@diegovilar Terima kasih atas npm-check -u untuk memutakhirkannya.

Masih rusak di Windows x64, Yarn 0.23.2

Untuk semua orang yang berkomentar di sini, saya sarankan untuk menggunakan yarn upgrade-interactive sementara itu. Sudah bekerja cukup baik di sini.

Masih rusak dan jika Anda menggunakan yarn upgrade-iteractive dan tidak tahu versi tslint, codelyzer, skrip, dll yang bergantung pada paket seperti Angular atau Angular CLI, Anda dapat dan akan menyebabkan banyak kesalahan yang akan menghantui Anda bahkan setelah Anda mengembalikan semuanya. Apakah masalah ini telah diposting ulang?

@tokopedia Saya di sini dan saya telah menggunakan HANYA upgrade-interactive dengan masalah yang sama persis.

Tidak yakin apakah ini mendapatkan waktu tatap muka karena telah ditutup selama berbulan-bulan jadi buat masalah baru - # 3266

@ fab1an Sangat disayangkan. Saya tidak punya masalah dengan itu memperbarui package.json: /

@ fab1an @milesj Saya memiliki upgrade-interactive tidak memperbarui package.json di salah satu proyek kami juga. Sepertinya jika Anda memutakhirkan dan package.json tidak memiliki nomor yang benar maka semua pemutakhiran interaktif tidak memperbarui package.json ... atau sesuatu ... bagaimanapun juga pasti dapat setuju dengan Anda karena kadang-kadang tidak berfungsi.

Windows 10, benang v0.23.4 masih tidak memperbarui package.json saat melakukan yarn upgrade

Edit: Mungkin ini disengaja?
Sebagai contoh: "semantic-ui-react": "^0.68.2" - sudah ada versi baru (0.68.3) dan versi tersebut diinstal dan yarn.lock diubah menjadi 0.68.3 tetapi karena ^ dalam versi (> = 0.68.2 <0.69.0) tidak perlu memperbarui package.json ke ^0.68.3 ?

@iamfreee Saya menjalankan Yarn v0.24.5 dan menjalankan yarn upgrade tidak memperbarui package.json, hanya yarn.lock. Ini tidak bisa (atau setidaknya tidak boleh) disengaja, karena pertama-tama, pembuatan versi di package.json adalah menyetel versi aktual dari paket terlebih dahulu, dan kemudian menentukan batasan peningkatan, yaitu ^ atau ~ . Kedua, menjalankan yarn upgrade pada paket individual mengubah package.json jadi mengapa perilaku saat memutakhirkan semua paket berbeda? Mengapa harus ada perbedaan perilaku antara menjalankan yarn upgrade dan yarn upgrade-interactive itu tidak masuk akal?

Masalah ini telah ditutup untuk sementara waktu, jadi terus terang tidak ada daya tarik apa pun. Kami hanya harus membuka masalah baru. Bahkan jika perilaku ini disengaja, saya tetap tidak setuju dengannya. yarn upgrade bahkan seharusnya tidak meningkatkan ke tag @latest karena bagaimana jika Anda memiliki batasan versi berbeda yang terdaftar di package.json Anda? Lihat di sini: https://docs.npmjs.com/cli/update#caret -dependencies

@leosco Dalam kasus saya npm update tidak memperbarui package.json juga dan juga yarn upgrade [package] tidak berhasil. Itulah mengapa saya pikir masalah ini terkait dengan batasan versi ^ , atau perilaku yang diharapkan.

@iamfreee Tidak, Anda harus melakukan npm update --save yang seharusnya menjadi perilaku default Yarn.

Saya memposting masalah baru yang merinci semua ini, lihat di sini https://github.com/yarnpkg/yarn/issues/3492 dan mungkin melanjutkan diskusi di sana.

Saya juga ingin menegaskan kembali bahwa saya telah sukses dengan yarn interactive-upgrade sedangkan yarn upgrade --latest tidak berhasil untuk saya.
Menggunakan benang v0.24.6 dengan simpul v7.10.0.

yarn upgrade --latest berfungsi dengan baik: +1:

~> yarn -v
1.0.0
~> yarn upgrade --help | grep "\-\-latest" | head -n 1

  --latest       list the latest version of packages, ignoring version ranges in package.json

yarn interactive-upgrade tampaknya mengalami masalah sekarang di v1.

@milesj Bisakah Anda mencoba bangunan malam? https://yarnpkg.com/en/docs/nightly PR ini mungkin telah memperbaikinya https://github.com/yarnpkg/yarn/commit/da2b9096057301273aa27336f70622dda09b6c33

@kaylieEB Saya tidak yakin tapi saya pikir yarn interactive-upgrade berperilaku berbeda sekarang. Saya baru saja menjalankannya dalam proyek dengan banyak peningkatan kecil, dan package.json tidak diubah, hanya yarn.lock . Sebelum 1.0.2, saya pikir package.json akan tetap sinkron dengan versi yang ditingkatkan, tetapi saya mungkin salah tentang ini ... Versi malam terbaru tidak mengubah perilaku itu untuk saya.

yarn upgrade --latest sekarang berfungsi dengan baik, tetapi saya lebih suka dapat secara interaktif memilih apa yang akan ditingkatkan, dan kemudian menyesuaikan package.json sesuai.

@lehni Ada juga yarn interactive-upgrade --latest .

@milesj : maksud Anda yarn upgrade-interactive --latest ?
docs: https://yarnpkg.com/en/docs/cli/upgrade-interactive

Err ya, otak kentut. Terima kasih.

sama di sini dengan benang 1.3.2

sama di sini dengan benang 1.5.1

Rusak di 1.5.1 lagi

rusak dengan -

$ node --version
v9.0.0
$ yarn --version
1.5.1

node masalah yang sama v8.9.4
benang 1.5.1

Satu solusi: gunakan yarn add alih-alih yarn upgrade .

Pendeknya:

  • yarn upgrade : perbarui paket ke kisaran terbaru yang mungkin ditentukan oleh pacakge.json , tetapi jangan menimpa
  • yarn add : perbarui paket ke kisaran terbaru yang memungkinkan dan tulis ulang package.json
  • yarn update , seperti npm update : tidak ada

Namun dokumen pembaruan npm mengatakan:

Mulai [email protected] , pembaruan npm akan mengubah package.json untuk menyimpan versi baru sebagai ketergantungan minimum yang diperlukan. Untuk mendapatkan perilaku lama, gunakan npm update --no-save.

Tetapi faktanya...

 y > npm -v
5.7.0
 y > cat package.json
{
  "dependencies": {
    "lodash": "^4.17.5"
  }
}
 y > npm update lodash
npm WARN y No description
npm WARN y No repository field.
npm WARN y No license field.

+ [email protected]
added 1 package from 2 contributors in 1.004s
 y > cat package.json
{
  "dependencies": {
    "lodash": "^4.17.5"
  }
} 

Tidak tahu yang mana yang akan digunakan :( Yarn menambahkan perilaku ini sekitar tahun 2017 dan kemudian merusaknya secara diam-diam. Npm mengklaim memilikinya ketika tidak berfungsi juga.

@kittens Silakan buka kembali masalah ini.

seperti yang dikatakan oleh @octref yarn upgrade memutakhirkan dependensi ke versi terbaru mereka tetapi tidak menimpa package.json . yarn add <package> akan memperbarui paket ke versi terbaru jika sudah menginstal dan menimpa package.json . Apakah ada alasan untuk yarn upgrade tidak menimpa package.json ? Jika demikian, maka mungkin itu bisa ditambahkan sebagai flag ke yarn upgrade .

[email protected]
[email protected]
os: MacOS

Edit

baca https://github.com/yarnpkg/yarn/issues/5602#issuecomment -377528617

Satu solusi: gunakan yarn add alih-alih yarn upgrade .

Bekerja seperti pesona. Perlu memperbarui dua halaman Dokumen ini untuk menggunakan yarn add alih-alih yarn upgrade .

Saya telah menggunakan yarn upgrade-interactive --latest cukup lama sekarang tanpa cegukan ...

Saya telah menggunakan peningkatan-interaktif benang --terbaru cukup lama sekarang tanpa cegukan ...

Tampaknya agak berlebihan .. Mengapa tidak menggunakan perintah yang paling mudah saja dari semua perintah ini, yarn add ? Sangat sederhana.

@ guylepage3 karena saya dapat melihat peningkatan apa yang tersedia dalam versi apa dengan kode warna berbeda berdasarkan perubahan versi patch / minor / mayor, pilih yang ingin saya tingkatkan, dan lakukan beberapa peningkatan sekaligus dengan cara itu. Tidak ada yang berlebihan tentang itu?

@lehni maka dokumentasi di situs web harus mencerminkan ini dan dua halaman berikut harus menyatakan untuk menggunakan metode yarn upgrade-interactive --latest .

@ guylepage3 percakapan ini tidak mengarah kemana-mana dan juga tidak membantu. Jika Anda ingin menyarankan pembaruan dokumen, mungkin lebih baik untuk membuat masalah baru khusus untuk itu.

Maaf jika Anda merasa seperti itu @alexdevero. Dan ya sudah kalau lihat di atas .. https://github.com/yarnpkg/yarn/issues/1458#ref -issue-332178362

Ini membantu saya: https://www.npmjs.com/package/syncyarnlock

$ yarn upgrade-interactive && syncyarnlock

Ini tidak berhasil untuk saya untuk ruang kerja benang. Bisakah seseorang melihatnya?

Apakah halaman ini membantu?
0 / 5 - 0 peringkat