Instal versi node yang sama berdasarkan mesin yang ditentukan dalam package.json untuk tugas pengembangan dan penerapan

Apa yang sering saya perhatikan dalam proyek node adalah Anda dengan cepat sampai pada titik di mana versi yang relevan dengan proyek tersebut ditentukan dan perlu dipertahankan di tempat yang berbeda, misalnya. templat pipa yang berbeda.

Namun idealnya, saya ingin mempertahankan versi node hanya di satu tempat dan pada saat yang sama memastikan bahwa semua pengembang menggunakan versi node yang sama, yang juga digunakan oleh otomatisasi CI/CD proyek.

Kami akan melihat satu pendekatan yang mungkin untuk mencapai hal ini sekarang!

Menerapkan versi node dan npm tertentu

Pertama-tama, jika Anda ingin menentukan versi node dan npm tertentu untuk digunakan dalam proyek node Anda, maka ada kemungkinan untuk menambahkannya ke package.jsondengan menggunakan pengaturan “mesin”.

Selain itu, jika Anda ingin benar-benar menerapkan versi yang ditentukan secara ketat karena alasan tertentu, Anda dapat melakukannya dengan membuat file .npmrc di proyek termasuk pengaturan berikut:

Menggunakan versi node yang sama dalam otomatisasi CI/CD

Setelah versi node ditentukan melalui setelan “mesin” di package.json, versi ini idealnya juga digunakan oleh pipeline CI/CD. Untuk ini kita perlu membaca informasi terkait dari file itu.

Yang harus kita lakukan adalah menulis skrip kecil yang menyimpan versinya dalam sebuah variabel. Tentu saja ada cara berbeda untuk mencapai hal ini. Untuk membaca versi dalam hal ini kami menggunakan jq, prosesor JSON baris perintah.

Di bawah ini adalah dua contoh tugas terkait di GitHub Actions dan Azure Pipelines, namun tentu saja pendekatannya juga berfungsi serupa untuk penyedia lainnya:

Kesimpulan

Secara pribadi, saya menemukan pendekatan yang ditampilkan cukup berguna dan menggunakannya juga untuk semua proyek pribadi saya di GitHub. Tentu saja saya memahami bahwa pasti ada juga proyek yang memerlukan penggunaan versi node yang berbeda dan oleh karena itu pendekatan yang ditunjukkan di sini tidak dapat diterapkan.