Ini bukanlah pertanyaan yang sama sekali baru, tetapi saya telah mencari-cari cukup lama sekarang dan saya mengalami masalah dalam menemukan solusi.
Saya menggunakan modul untuk aplikasi sudut saya yang disebut angular-translate. Namun, saya harus membuat beberapa modifikasi kecil pada kode sumber agar semuanya bekerja seperti yang saya inginkan, dan sekarang saya ingin mempertahankan perubahan tersebut npm install
. Seorang kolega menyarankan agar saya membagi repo kode sumber dan menunjuk ke repo bercabang saya sebagai ketergantungan, yang telah saya coba dengan cara ini, mis.
npm install https://github.com/myRepo/angular-translate
npm install https://github.com/myRepo/angular-translate/archive/master.tar.gz
Yang pertama memberi saya direktori seperti ini tanpa build. Hanya package.json, .npmignore, dan beberapa file penurunan harga
-angular-translate
.npmignore
.nvmrc
CHANGELOG.md
package.json
etc
Yang kedua npm install
memberi saya repo penuh, tetapi sekali lagi saya tidak mendapatkan build seperti ketika saya menggunakan perintah npm install angular-translate
. Saya telah melihat beberapa diskusi tentang menjalankan skrip prapublikasi, tetapi saya tidak yakin bagaimana melakukan ini saat menginstal semua modul. Saya juga mencoba menerbitkan fork sebagai modul saya sendiri ke registri npm, tetapi sekali lagi saya tidak mendapatkan build, dan saya tidak yakin itu hal yang benar untuk dilakukan ...
Saya minta maaf atas ketidaktahuan saya tentang topik ini. Saya tidak memiliki banyak pengalaman dengan npm. Ingin mendapatkan masukan tentang masalah ini. Sepertinya ini bisa menjadi masalah yang cukup umum ketika modifikasi perlu dilakukan pada kode sumber paket? Mungkin ada solusi yang lebih baik? Terima kasih sebelumnya atas bantuan Anda.
sumber
package.json
file garpu Anda, di bawahscripts
, ganti namaprepublish
menjadiprepare
. Tampaknya ketikanpm install
ataunpm install github:user_name/fork_name --save
(dan sama untuk benang) dijalankan itu juga menjalankan apa yang ada diprepare
skrip. Ini mengasumsikanprepublish
skrip paket ini membuat file build, yang biasanya terjadi.npm install <ghusername>/<repoName>#branchName
prepare
skrip, itudependencies
dandevDependencies
akan diinstal, dan skrip persiapan akan dijalankan, sebelum paket dikemas dan diinstal."Pembaruan untuk mereka yang menggunakan npm 5:
Saya menemukan menambahkan a
"prepare": "npm run build"
ke skrip memperbaiki semua masalah saya.sumber
npm run build
dannpm run publish
dan tidak mengalami masalah atau rasa sakit apa pun kecuali suatu hari mereka mencoba menginstal repo melalui git?Kode yang diterbitkan ke npmjs.com seringkali bukan yang ada di repositori untuk paket. "Mengompilasi" file sumber JavaScript ke dalam versi yang dimaksudkan untuk konsumsi umum di perpustakaan adalah hal yang umum. Itulah yang biasanya dipublikasikan ke npmjs.com.
Sangat umum bahwa ini adalah fitur
npm
untuk secara otomatis menjalankan langkah "build" sebelum menerbitkan (npm publish
). Ini awalnya disebutprepublish
. Tampaknya Npm berpikir akan berguna juga untuk menjalankanprepublish
skrip padanpm install
karena itu adalah cara standar untuk menginisialisasi lingkungan pengembangan.Hal ini akhirnya menimbulkan kebingungan besar di komunitas. Ada masalah yang sangat panjang di github tentang ini.
Pada akhirnya, dalam upaya untuk tidak mengubah perilaku lama, mereka memutuskan untuk menambahkan dua skrip otomatis lagi:
prepublishOnly
danprepare
.prepublishOnly
melakukan apa yang Anda harapkan. Itu tidak berjalannpm install
. Banyak pengelola paket yang secara membabi buta beralih ke ini.Tetapi ada juga masalah ini dimana orang ingin tidak bergantung pada npmjs.com untuk mendistribusikan versi paket. Repositori Git adalah pilihan yang wajar. Namun, praktik umum untuk tidak memasukkan file "yang dikompilasi" ke git. Itulah yang
prepare
ditambahkan untuk menangani ...prepare
adalah cara yang benarJika Anda memiliki repositori dengan file sumber tetapi langkah "build" diperlukan untuk menggunakannya,
prepare
lakukan persis apa yang Anda inginkan dalam semua kasus (mulai npm 4).Anda bahkan dapat memasukkan dependensi build Anda ke dalamnya
devDependencies
dan dependensi tersebut akan diinstal sebelumprepare
dieksekusi.Berikut adalah contoh paket saya yang menggunakan metode ini.
Masalah dengan
.gitignore
Ada satu masalah dengan opsi ini yang membuat banyak orang tertarik. Saat menyiapkan dependensi, Npm dan Yarn hanya akan menyimpan file yang terdaftar di
files
bagianpackage.json
.Orang mungkin melihat bahwa
files
default untuk semua file disertakan dan mengira sudah selesai. Apa yang mudah terlewatkan adalah.npmignore
sebagian besar mengesampingkanfiles
arahan dan , jika.npmignore
tidak ada,.gitignore
digunakan sebagai gantinya.Jadi, jika Anda memiliki file bawaan yang terdaftar
.gitignore
seperti orang waras, dan tidak melakukan hal lain,prepare
akan tampak rusakJika Anda memperbaiki
files
untuk hanya menyertakan file yang dibangun atau menambahkan yang kosong.npmignore
, Anda sudah siap.Rekomendasi saya adalah untuk mengatur
files
(atau, dengan inversi,.npmignore
) sehingga satu-satunya file yang benar-benar diterbitkan adalah yang dibutuhkan oleh pengguna paket yang diterbitkan. Imho, tidak perlu menyertakan sumber yang tidak dikompilasi dalam paket yang diterbitkan.Jawaban asli: https://stackoverflow.com/a/57503862/4612476
sumber
Untuk mendukung jawaban @ RyanZim yang luar biasa,
postinstall
jelas merupakan pilihan yang valid untuk ini.Lakukan salah satu dari yang berikut:
Jika Anda telah mem-fork repositori orang lain, mungkin ada baiknya mengangkat masalah untuk mengilustrasikan masalah bahwa menginstal paket mereka melalui GitHub tidak berfungsi karena tidak menyediakan sarana yang diperlukan untuk membangun skrip. Dari sana, mereka dapat menerima PR untuk menyelesaikan masalah ini dengan pasca instalasi, atau mereka dapat menolaknya dan Anda dapat melakukan # 2.
sumber
"postinstall": "cd node_modules/scrape-twitter/ && npm install && npm run build"
untuk memastikan bahwa paket yang menyebabkan masalah Anda dibangun sebelum aplikasi Anda berjalan. Seperti yang dikatakan, saya lebih suka pendekatan forking repo ke pengguna saya sendiri, menambahkan postinstall ke paket itu sendiri, dan menggunakannya di aplikasi saya.postinstall
adalah satu langkah pendek dari solusi yang tepat. Gunakan sajaprepare
. Ini tahun 2020.Cukup gunakan perintah
npm install git+https://[email protected]/myRepo/angular-translate.git
. Terima kasih.sumber