Karena https://github.com/npm/npm/issues/2943 , npm tidak akan pernah mendukung kemampuan untuk membuat alias paket dan menginstal beberapa versi dari paket yang sama.
Solusi yang diposting pada masalah github mungkin berfungsi untuk modul pure-JS, tetapi karena npm menjadi standar untuk manajemen paket frontend, paket sekarang menyertakan berbagai aset seperti CSS.
Apakah ada solusi untuk menginstal beberapa versi dari paket yang sama?
Ide terbaik yang saya dapatkan adalah "mengkloning" sebuah paket, dan menerbitkannya dengan nama yang sedikit berbeda.
Misalnya, jika Anda membutuhkan beberapa versi jquery
, Anda hanya bisa mempublikasikan paket disebut jquery-alias1
, jquery-alias2
, jquery-alias3
dll, dan kemudian mengatur versi yang tepat dalam Andapackage.json
.
Atau Anda bisa nama paket sesuai dengan nomor versi mereka, misalnya jquery-1.11.x
, jquery-2.1.x
, dll ..
Kedua pendekatan ini tampak ceroboh. Apakah ada yang lebih baik?
Jawaban:
Mulai npm v6.9.0, npm sekarang mendukung alias paket. Ini mengimplementasikan sintaks yang sama seperti yang digunakan Yarn:
Ini menambahkan yang berikut ke
package.json
:Dimungkinkan juga untuk menginstal langsung dari GitHub dengan sintaks ini. Misalnya, jika Anda ingin menginstal versi registri npm dan garpu GitHub dari paket tersebut
foobar
:sumber
eslint
, tetapi tidak tahu sekarang namanyaeslint6
Saya ingin memposting di sini untuk siapa saja seperti saya yang menggunakan Benang dan mendarat di sini. Ini adalah pengganti drop-in untuk NPM yang mendukung aliasing out of the box:
(kredit misalnya pergi ke https://github.com/callemall/material-ui/issues/7195#issuecomment-314547601 )
sumber
<alternative-name>@npm:<package-name>@<version>
Sepertinya "JSPM" adalah alat yang Anda cari. JSPM dibangun di atas NPM tetapi memungkinkan Anda untuk menarik paket dari berbagai sumber (github, npm, dll). Ia menggunakan pemuat modul universal System.js di bagian depan untuk memuat modul, dan "menggunakan manajemen versi datar untuk mengunduh ke dalam folder dengan akhiran versi" yang mudah dipikirkan.
jspm.io
Ketika Anda menginstal sebuah paket dengan jspm Anda dapat membuat alias paket itu dengan nama tertentu, yang nantinya dapat Anda
require
secara khusus di modul Anda.Kemudian di js Anda, Anda dapat dengan sederhana
require(jquery)
dan / ataurequire(jqueryOne)
seperlunya, memungkinkan Anda untuk bolak-balik seperlunya.Ini berlaku sama untuk paket apa pun yang ingin Anda gunakan beberapa versinya.
sumber
Ini cukup sulit untuk dilakukan dengan bersih, karena cara kerja npm, jadi saya akan menghindari untuk melakukannya dalam produksi.
Namun, untuk pengujian integrasi dan kasus penggunaan serupa, saya membuat paket yang disebut multidep , yang memungkinkan Anda menginstal beberapa versi dari paket yang sama dan
require
seperti itu:sumber
Versi Instal NPM ( https://github.com/scott113341/npm-install-version ) juga merupakan opsi. Ini pada dasarnya melakukan apa yang dilakukan beberapa solusi lain di sini (secara teknis) tetapi cukup mudah digunakan. Modul yang diinstal dengan nomor versi (parameter perintah @version standar yang digunakan oleh NPM) dapat diprediksi diinstal dalam sub-folder di bawah node_modules dengan nama itu. Anda juga dapat mengontrol dir tujuan per modul - yang berguna dengan sistem build.
Potongan kode penggunaan dari Dokumen GitHub:
sumber
install-npm-version
( https://github.com/scott-lin/install-npm-version ) adalah opsi lain. Ini dapat digunakan pada baris perintah, atau melalui antarmuka program - ditulis dalam TypeScript untuk pengembangan modern.Contoh # 1: Instal ke direktori berversi (default)
Contoh # 2: Instal ke direktori kustom
Contoh # 3: Instal dengan output standar senyap atau berisik
Contoh # 4: Menimpa instalasi yang sudah ada
sumber
Dalam kasus saya, saya perlu menginstal aplikasi create-react-app versi lama daripada versi yang telah saya instal secara global, karena saya mengambil kursus yang memerlukan versi lama ini untuk tugas.
Saya membuat folder baru hanya untuk memuat versi lama ini, memasukkannya ke dalamnya, dan melakukan
Setelah menyiapkan shell package.json ini, saya menginstal versi persis dari create-react-app yang saya butuhkan
yang membuat folder node_modules lokal dengan versi lama dari create-react-app.
Kemudian saya membuat skrip bash sederhana (create-react-app.sh) sebagai pintasan ke versi yang lebih lama ini, dan menggunakan variabel bash "$ @" untuk meneruskan semua argumen:
Akhirnya, saya membuat skrip bash sederhana ini dapat dieksekusi
Jadi langsung menjalankan skrip bash ini akan mengeksekusi versi lama dari create-react-app:
sumber