Bagaimana cara mengedit modul node yang diinstal melalui npm?

125

Saya menggunakan modul node_swiz, yang pada gilirannya menggunakan modul validator.

Saya ingin membuat perubahan pada modul validator, tetapi saya menggunakan npm install untuk menginstal modul / dependensi.

Bisakah saya membuat perubahan pada modul validator di dalam node_modules, atau apakah dependensi node_modules itu akan dibuat ulang dan versi terbaru didapat ketika saya menerbitkan ke heroku atau saat saya menjalankan npm install?

Strukturnya terlihat seperti ini:

myNodeApplication
  - node_modules
     - swiz
         - node_modules
            - validator [this is the library I want to edit]

Terima kasih untuk bantuannya!

pengguna1810875
sumber

Jawaban:

244

Anda dapat mengedit file secara langsung, tetapi ini akan ditimpa setiap kali npm memperbarui, hal terbaik yang harus dilakukan adalah langsung ke sumbernya.

Jika perubahan mempengaruhi fungsionalitas dari keseluruhan modul, dan mungkin berguna bagi orang lain, Anda mungkin ingin berkontribusi ke sumber asli di github dan mencari perubahan yang akan diterapkan.

Jika ini adalah fungsionalitas berpemilik yang diperlukan, dan tidak membantu pengembangan modul, hal terbaik yang harus dilakukan adalah mencabangnya dari github dan membuat perubahan Anda. Anda dapat menginstal item langsung dari github menggunakan NPM, dan metode ini memungkinkan Anda mengintegrasikan perubahan di masa mendatang ke versi kustom Anda dari sumber aslinya.

Untuk menginstal langsung dari github, gunakan perintah berikut:

npm install https://github.com/<username>/<repository>/tarball/master

Sdedelbrock
sumber
2
Terima kasih! Itulah yang ingin saya ketahui. Juga, untuk orang lain yang membaca ini ... Saya ingin memasukkan modul yang ada di github saya di file package.json, dan ada info di sini tentang itu: stackoverflow.com/a/8306715/1810875
user1810875
22
sebelum bercabang saya mengubahnya di sistem lokal, tetapi perubahan tersebut tampaknya tidak memengaruhi. Mengubah file javascript apa pun yang merupakan node_modules / package_name / lib / file_name.js berpengaruh?
ingin tahu
1
Sekadar catatan, tidak yakin apakah ada yang berubah tetapi secara pribadi saya harus menentukan URL Git sebagai git: //github.com/ <user> / <package> .git "
Craig
5
@JohnDevor Daripada menginstal modul yang disesuaikan, gunakan perintah "npm link" untuk hanya membuat sym-link ke foldernya: docs.npmjs.com/cli/link
Venryx
3
Mengetahui itu, saya harus menavigasi ke folder /node_modulesdan menjalankannya npm installmaka semuanya baik-baik saja!
Adam Moisa
6

Anda dapat menggunakan patch-package untuk membuat dan mempertahankan perubahan pada modul node.

Ini dapat dilakukan dengan terlebih dahulu membuat perubahan pada paket di dalamnya node_modulesdan kemudian menjalankan perintah berikut, dengan <package name>menjadi nama paket yang baru saja Anda ubah.

npx patch-package <package name>

patch-package kemudian akan membuat patchesfolder dengan file di dalamnya, mewakili perubahan Anda. File ini kemudian dapat dikomit ke git, dan tambalan dapat dipulihkan nanti dengan menjalankan npx patch-package(tanpa argumen apa pun).

Langkah opsional:

Tambahkan yang berikut ini di bagian skrip package.json Anda untuk secara otomatis menambal ketergantungan saat Anda menjalankan "npm install".

"postinstall": "npx patch-package" 
Pedro Fracassi
sumber
1
Solusi yang sangat bagus yang berhasil untuk saya tanpa masalah apa pun.
ヨ ハ ン ソ ン
ini sangat keren! FYI: Saya harus menggunakan "preinstall" daripada "postinstall" karena patch saya menggunakan skrip postinstall dari ketergantungan tersebut. Bagaimana Anda akan menerapkannya jika Anda memiliki tambalan lain yang perlu diterapkan pada fase pasca pemasangan?
Superole
1
Jawaban yang luar biasa, saya perlu melakukan modifikasi pada dep sebelum menyebarkan ke netlify. prainstal 'npx patch-package' adalah tiket ajaib. Gambar yang tepat sekarang ditampilkan di situs web.
TheBetterJORT
1

Saya tidak ingin menerbitkan modul baru dan saya juga tidak ingin npm installmenimpa perubahan saya. Saya menemukan solusi untuk kedua masalah ini, tetapi mungkin akan lebih baik untuk menerima saran @ Sdedelbrock. Tetapi jika Anda ingin melakukannya, berikut caranya:

  1. Edit package.jsonfile Anda untuk menghapus ketergantungan yang ingin Anda edit.
  2. Masuk ke proyek Anda /node_modulesdan pindahkan folder ke tempat lain di repositori Anda yang dapat dikomit. Jadi sekarang /node_modules/dependencydi/dependency
  3. cd ke dalam direktori dependensi dan ketik npm link
  4. cdke root direktori proyek Anda dan ketik npm link dependency Penting bahwa Anda melakukan ini di luar /node_modulesdan/dependency

Jika semuanya berhasil, Anda sekarang memiliki symlink yang telah dibuat di /node_modules/dependency. Sekarang Anda dapat menjalankan proyek Anda untuk melihat apakah berhasil.

Daniel Kaplan
sumber