Cli: [BUG] tautan npm memperbarui package.json agar mengarah ke direktori lokal

Dibuat pada 24 Okt 2020  ·  6Komentar  ·  Sumber: npm/cli

Perilaku Saat Ini:

npm link foo-bar update package.json untuk menunjuk ke direktori lokal dari modul foo-bar alih-alih hanya menghubungkannya

Perhatikan bahwa foo-bar adalah paket pribadi yang diinstal dari git (git + ssh)

Perilaku yang Diharapkan:

npm link foo-bar membuat symlink di node_modules/ tanpa mengubah package.json

Langkah Untuk Mereproduksi:

  1. $ cd ./foo-bar && npm link
  2. $ cd ../other-package && (cat ./package.json | grep "foo-bar")
    
    "foo-bar": "git+ssh://[email protected]:..."
    
  3. $ npm link foo-bar
  4. $ cat ./package.json | grep "foo-bar"`
    
    "foo-bar": "file:../foo-bar",
    

Paket foo-bar sekarang terhubung ke folder lokal foo-bar alih-alih link di npm root -g

Lingkungan Hidup:

  • OS: Ubuntu 20.04 (WSL)
  • Node: 12.9.0
  • npm: 7.0.5 (Telah terjadi dengan 7.0.0 - 7.0.5 meskipun)
Bug Release 7.x

Komentar yang paling membantu

Sayangnya melakukan symlink secara manual seperti itu tidak akan menyiapkan symlink biner apa pun, juga tidak akan menjalankan skrip siklus hidup yang sesuai.

Semua 6 komentar

Saya mengonfirmasi pengalaman yang sama di Windows 10 1909 dengan NodeJS 15.0.1.
Dan saya setuju bahwa perilaku seperti itu tampaknya tidak diinginkan bagi saya.

Contoh ini harus berupa repro yang dikurangi penuh:

$ git clone [email protected]:wesleytodd/english-days.git && cd english-days && npm link && cd .. # this is just a dep free test package I use
$ mkdir link-to && cd link-to && npm init -y && npm i english-days
$ cat package.json | grep english-days # "english-days": "^1.0.0"
$ npm link english-days
$ cat package.json | grep english-days # "english-days": "file:../english-days"

Juga mencoba perintah link dengan --no-save yang tidak mengubah perilaku dan mungkin merupakan bug lain.

Solusi:

  1. Anda bisa menghubungkannya secara manual ( ln -s ../foo-bar ./node_modules/foo-bar )
  2. Anda dapat melakukan hal berikut:
$ cd ./foo-bar && npm link
$ cd ../other-package
$ npm i --no-save "$(npm root -g)/foo-bar"

Sayangnya melakukan symlink secara manual seperti itu tidak akan menyiapkan symlink biner apa pun, juga tidak akan menjalankan skrip siklus hidup yang sesuai.

Coba juga perintah tautan di atas dengan --no-save yang tidak mengubah perilaku dan mungkin merupakan bug lain.

Mencoba dengan --no-save juga merupakan naluri pertama saya ketika saya melihat npm link dimodifikasi package.json.

Saya rasa ini jelas merupakan perubahan perilaku yang minimal perlu didokumentasikan dalam catatan rilis.

Saya mengandalkan npm link untuk menyiapkan lingkungan pengembangan yang kompleks, dan seperti yang ada sekarang ini tidak akan berhasil. Memodifikasi package.json memiliki potensi besar bagi saya (atau siapa pun yang menggunakan pengaturan serupa) secara tidak sengaja melakukan perubahan di package.json, dan merusak segalanya.

Akan sangat menyenangkan jika seseorang dari NPM mengakui hal ini / memberi kami semacam pemberitahuan , saya harus kembali ke

Apakah halaman ini membantu?
0 / 5 - 0 peringkat