Saya ingin menggunakan grunt-contrib-jasmine
paket NPM. Ini memiliki berbagai dependensi. Bagian dari grafik dependensi terlihat seperti ini:
─┬ grunt-contrib-jasmine@0.4.1
│ ├─┬ grunt-lib-phantomjs@0.2.0
│ │ ├─┬ phantomjs@1.8.2-2
Sayangnya, ada bug di versi ini phantomjs
yang mencegahnya menginstal dengan benar di Mac OS X. Ini diperbaiki di versi terbaru.
Bagaimana saya bisa grunt-lib-phantomjs
menggunakan versi yang lebih baru phantomjs
?
Beberapa konteks tambahan:
grunt-contrib-jasmine
eksplisit membutuhkan versi"~0.2.0"
darigrunt-lib-phantomjs
, yang secara eksplisit membutuhkan versi"~1.8.1"
dariphantomjs
.- Menambah
phantomjs
dependensi paket saya terlebih dahulu tidak berpengaruh; kedua versi terinstal dangrunt-contrib-jasmine
masih menggunakan versi yang lebih lama (lihat: Ketika menginstal paket dengan NPM, dapatkah Anda mengatakannya untuk menggunakan versi berbeda dari salah satu dependensinya? ).
git clone
atau garpu modul yang diperlukan. Anda juga dapat menghapus sarangphantomjs
secara manual.grunt-contrib-jasmine
ada di 0.5.1, yang menggunakan[email protected]
, yang menggunakan[email protected]
:)Jawaban:
Anda dapat menggunakan fungsi npm shrinkwrap , untuk mengganti ketergantungan atau sub-ketergantungan.
Saya baru saja melakukan ini dalam proyek kasar kami. Kami membutuhkan versi koneksi yang lebih baru, sejak 2.7.3. menyebabkan masalah bagi kami. Jadi saya membuat file bernama npm-shrinkwrap.json:
NPM harus secara otomatis mengambilnya saat melakukan instalasi untuk proyek.
(Lihat: https://nodejs.org/en/blog/npm/managing-node-js-dependencies-with-shrinkwrap/ )
sumber
grunt-contrib-connect
ketergantungan dan anak-anaknya yang diinstal. Semua dependensi saya yang lain di package.json tidak diinstal.node_modules
direktori sehingga dump ketergantungan shrinkwrap penuh persis apa yang saya inginkan, bukan hanya menimpa. Tapi masih semacam solusi menyakitkan.node_modules
, menjalankan instalasi dengan penyusutan minimal tampaknyadevDependencies
tetap utuh meskipun mengabaikandependencies
, tetapi menjalankan instalasi lain menghapus item-item non-eksplisit, jadi untuk saat ini penting untuk menjalankannpm shrinkwrap
untuk mendapatkan file lengkap, memodifikasi bagian yang dipertanyakan, dan lalu jalankannpm install
lagi)Bagi mereka yang berasal dari 2018 dan seterusnya, gunakan npm versi 5 atau lebih baru: edit Anda
package-lock.json
: hapus perpustakaan dari"requires"
bagian dan tambahkan di bawah "dependensi".Sebagai contoh, Anda ingin
deglob
paket menggunakanglob
versi paket3.2.11
daripada yang sekarang. Anda membukapackage-lock.json
dan melihat:Hapus
"glob": "7.1.2",
dari"requires"
, tambahkan"dependencies"
dengan versi yang tepat:Sekarang hapus
node_modules
folder Anda , jalankannpm install
dan itu akan menambah bagian yang hilang ke"dependencies"
bagian tersebut.sumber
npm install
berjalan satu kali. Dalam kasus saya pengeditan diperlukan karena dep nested menyebabkan kegagalan.npm i
alih-alih mengedit package-lock.json Anda dan menambahkan dependensi anak ke "dependensi" di sana, tambahkan dependensi anak ke bagian package.json "dependensi" Andanpm install
lagi maka semua perubahan untukpackage-lock.json
dikembalikan dan saya mendapatkan versi buruk dari dep kembali.npm ci
dan ini tidak menyentuhpackage-lock.json
Bagi yang menggunakan benang.
Saya mencoba menggunakan npm shrinkwrap sampai saya menemukan benang cli mengabaikan file npm-shrinkwrap.json saya.
Yarn memiliki https://yarnpkg.com/lang/en/docs/selective-version-resolutions/ untuk ini. Rapi.
Lihat juga jawaban ini: https://stackoverflow.com/a/41082766/3051080
sumber
Saya memiliki masalah di mana salah satu dependensi bersarang memiliki kerentanan audit npm, tetapi saya masih ingin mempertahankan versi dependensi induk. solusi npm shrinkwrap tidak bekerja untuk saya, jadi apa yang saya lakukan untuk mengganti versi dependensi bersarang:
sumber
NPM shrinkwrap menawarkan solusi yang bagus untuk masalah ini. Hal ini memungkinkan kita untuk mengganti versi ketergantungan tertentu dari sub-modul tertentu.
Pada dasarnya, ketika Anda menjalankan instalasi npm, npm pertama-tama akan mencari di direktori root Anda untuk melihat apakah ada file npm-shrinkwrap.json. Jika ya, ia akan menggunakan ini terlebih dahulu untuk menentukan dependensi paket, dan kemudian kembali ke proses normal bekerja melalui file package.json.
Untuk membuat npm-shrinkwrap.json, yang perlu Anda lakukan adalah
kode:
sumber
Saya menemukan solusi yang berhasil untuk saya.
Begitu. Pertama-tama edit file npm-shrinkwrap.json Anda seperti yang disarankan semua solusi lainnya.
Lalu, (pada Windows):
Solusi lain yang diusulkan cukup baik jika Anda hanya melakukan operasi 'npm install'. Tetapi setelah 'npm instal' file 'npm-shrinkwrap.json' pertama diubah lagi seperti sebelum modifikasi Anda.
sumber