Penggunaan Modular Patterns Pada Node.js
Pada artikel ini, Anda akan mempelajari lebih lanjut tentang apa itu modularisasi kode dan bagaimana melakukannya. Anda juga akan belajar cara memodulasi kode Anda di Node.js. Saat membangun aplikasi, tidak semua kode ditulis dalam satu file. Hal ini karena sangat sulit untuk dikelola.
Untuk aplikasi besar, sulit bagi pengembang untuk kembali ke kode ini, memfaktorkan ulang, atau memperluas fungsionalitas aplikasi. Namun, Anda dapat memecah aplikasi kompleks ini menjadi bagian-bagian yang lebih kecil dan dapat digunakan kembali.
Prasyarat
Untuk mengikuti artikel ini, ada baiknya memiliki hal-hal berikut:
- Instalasi Node.js.
- Latar belakang pengetahuan tentang penggunaan Node.js
Kata pengantar
Pengemangan kode biasanya dibagi menjadi beberapa file logis. Setiap file berisi kode yang berbeda dengan fungsi tertentu. Seperti yang Anda lihat, setiap file memiliki lebih sedikit kode untuk melakukan tugas tertentu, yang membuatnya lebih mudah untuk mempertahankan basis kode Anda.
Ini memudahkan untuk men-debug kode Anda dan membagikannya dengan pengembang lain, sehingga lebih mudah untuk berkontribusi dan memelihara aplikasi Anda.
Konsep ini umum di sebagian besar bahasa pemrograman. Konsep ini disebut modularitas (pola modularitas). Dalam hal ini, semua file adalah modul.
Misalnya, Anda membuat aplikasi kalkulator. Dalam hal ini, Anda dapat menggunakan file yang menangani penambahan dan file lain yang menangani fungsi pengurangan. Oleh karena itu, lakukan tugas aritmatika tertentu pada setiap file.
Cakupan dan ruang nama
Ini adalah keuntungan besar untuk Node.js. Saat menggunakan JavaScript tanpa kerangka kerja seperti Node.js, tidak ada konsep scope publik juga private.
JavaScript menyediakan lokal scope. Artinya, konten fungsi atau objek private kecuali jika secara khusus diekspos ke modul eksternal.
Ini dapat mencemari namespace global saat Anda menjalankan kode JavaScript ini di browser Anda. Oleh karena itu, untuk meningkatkan privasi dan mencegah browser memasuki namespace global, Anda perlu membungkus metode fungsi dalam cakupan fungsi.
Node.js tidak mengimplementasikan namespace global. Di Node.js, sistem modular diimplementasikan secara native berdasarkan spesifikasi JavaScript umum.
Dengan cara ini, implementasikan namespace lokal di setiap modul. Ini berisi variabel dan properti yang bersifat pribadi untuk modul hingga secara eksplisit diterbitkan/diexports ke modul lain, ini memecah kompleksitas aplikasi menjadi unit yang dapat dikelola dan memberikan pemisahan masalah.
modularisasi
Sistem modular menyediakan kerangka kerja yang skalabel saat membangun aplikasi yang kompleks. Pola-pola ini dapat diimplementasikan dalam beberapa cara, tetapi mereka bergantung pada paradigma pemrograman modular dari bahasa pemrograman host.
Di Node.js, konsep pola modular memiliki fitur tambahan yang melampaui pola modul (file) biasa, anda dapat menggunakan fitur modular Node.js untuk mengimpor fungsi, kelas, objek, file eksternal, modul inti Node.js, dan modul NPM.
Node.js bisa stateless atau stateful.
- Stateless mengekspos entitas stateless seperti kelas, objek, dan metode.
- Stateful mengekspos instance objek stateful seperti koneksi database, serta instance layanan API pihak ketiga.
Tutorial ini akan fokus pada pembuatan modul menggunakan Node.js dan mengexports dan mengimpornya ke berbagai file, mari kita buat beberapa modul Node.js.
Membuat dan impor modul fungsi
Pertama, buat folder proyek dan sertakan masing-masing file app.js dan main.js, seperti yang ditunjukkan di bawah ini.
// app.js
const sum = (num1,num2) => {
return 'The sum is '+ (num1 + num2);
}
// main.js
const result = sum(10,14)
console.log(result);
Jelas bahwa app.js ingin mengakses fungsi sum() dari main.js. Ketika saya menjalankan node main.js, saya melihat undefined. Ini karena sum bersifat private untuk main.js. Juga, itu tidak dapat diakses dari luar modul ini kecuali jika terkena modul lain.
Ini adalah cara untuk membuat modul tersedia saat dibutuhkan oleh modul lain.
// app.js
const sum = (num1, num2) => {
return 'The sum is '+ (num1 + num2);
}
module.exports = sum
// main.js
// search app.js in present directory
const sum = require('./app.js')
const result = sum(10, 14)
console.log(result);
Di sini kita memiliki fungsi sum() yang berisi module.exports. Ini memungkinkan Anda untuk mengakses fungsi ini di luar modul kapan pun Anda membutuhkannya.
Modul objek menggunakan exports properti untuk mengekspos jumlah fungsi secara native. Fungsi ini sekarang dapat diakses secara eksplisit dan dapat dipanggil oleh modul lain seperti main.js.
Untuk menggunakan modul ini, Anda perlu mengimpornya ke modul lain menggunakan require(). Di sini, kita akan mengimpor modul app.js ke dalam modul main.js.
Catatan: Fungsi require() bersifat sinkron. require() menyimpan nilai module.exports dan mengembalikan nilai yang sama untuk semua panggilan require() di masa mendatang. Jika modul perlu mengembalikan nilai yang berbeda, Anda perlu mengexports fungsi yang dapat dipanggil nanti dan mengembalikan nilai baru.
Jalankan node main.js dan Anda akan mendapatkan hasil yang Anda harapkan.
Bagaimana jika saya memiliki fungsi yang berbeda dan saya mengexportsnya ke main.js?
Berikut cara menggunakan sistem modular:
/ app.js
const sum = (num1, num2) => {
return 'The sum is '+ (num1 + num2);
}
const count = (anims) => {
return 'The number of animals is '+ anims.length;
};
const greet = () => {
console.log("Hello world");
}
module.exports = {
sum:sum,
count:count,
greet:greet
}
// main.js
// search app.js in present directory
const myModule = require('./app.js')
const result = myModule.sum(10,14)
console.log(result);
const animals = myModule.count(['Sheep','Horse','Tiger','Pigeon'])
console.log(animals);
myModule.greet();
Dalam hal ini, module.exports diatur ke objek yang memiliki serangkaian fungsi sebagai properti untuk diexports. Pola di atas disebut RevealingModulePattern.
Ini karena hanya apa yang ingin Anda publikasikan yang diterbitkan ke modul lain. Publikasikan hasil akhir hanya jika require() dijalankan di modul lain.
Mengexports dan mengimpor kelas
// person.js
// constructor function for the Person class
function Person(name) {
this.age = 21;
this.name = name;
}
// export the class, so other modules can access Persion objects
module.exports = {
Person: Person
}
Ini adalah kelas Person yang berisi nama dan usia objek. Orang diekspos sebagai properti dari module.exports. Anda dapat mengakses kelas Person dengan mengimpor modul person.js ke main.js, seperti yang ditunjukkan di bawah ini:
// main.js
// import the Person module
let p
// creates a Persion
let persons1 ersons = require('./person.js');
let Person = persons.Person;
= new Person("John");
// find the names and ages persons1 in the class Persion
console.log(persons1.name + " is " + persons1.age + " old." );
Dalam hal ini, gunakan kata kunci new untuk membuat turunan dari kelas Person di main.js.
Jalankan node main.js dan catat hasilnya di konsol.
exports
export adalah singkatan dari module.exports.
exports berguna untuk mengekspos objek dan metode.
Lihat contoh ini untuk mendapatkan pemahaman yang lebih baik.
//circle.js
// constant value
const pi = Math.PI
// using the the value to diggrent elements and exposing them to other modules
exports.areaOfaCircle = radiusOfaCircle => (radiusOfaCircle ** 2) * pi
exports.circumferenceOfaCircle = radiusOfaCircle => 2 * radiusOfaCircle * pi
Lingkaran modul menggunakan exports alias untuk mengekspos fungsi perrounderOfaCircle dan areaOfCircle. Anda perlu constPI untuk menemukan luas dan keliling lingkaran. Math.PI menyediakan fungsi matematika ini. Dalam hal ini, constpi didedikasikan untuk circle.js. Anda hanya dapat mengakses modul ini. Saya memerlukan cara untuk menggunakan PI dalam modul ini dan mengekspos elemennya menggunakan exports. Mari kita konsumsi elemen-elemen ini seperti yang ditunjukkan di sini:
//app.js
const circle = require('./app.js')
const r = 21
const area = circle.areaOfaCircle(r)
const circumference = circle.circumferenceOfaCircle(r)
console.log(`Area of the circle is: ${area}`)
console.log(`Circumference of the circle is: ${circumference}`)
Jalankan node app.js dan dapatkan hasilnya.
Perbedaan module.exports dan exports
exports hanyalah variabel alias yang digunakan untuk mengurangi penulisan kode. exports berperilaku seolah-olah ada baris kode implisit yang menetapkannya ke module.exports.
const exports = module.exports = {};
Tugas ini dilakukan di belakang layar setiap kali Anda menggunakan exports. exports variabel hanyalah penunjuk ke nilai awal module.exports. Ini adalah cara menggunakan exports.
exports.areaOfaCircle = radiusOfaCircle => (radiusOfaCircle ** 2) * pi
Usecase
- module.exports biasanya digunakan untuk mengekspos elemen seperti fungsi, objek, dan kelas di tingkat root. Misalnya:
module.exports = sum
module.exports = {
sum:sum,
count:count,
greet:greet
}
Menetapkan lebih dari satu objek untuk exports tidak akan berfungsi
Menggunakan core modul Node.js
Node.js dibundel dengan beberapa modul seperti HTTP filesystem(fs). Untuk menggunakan modul ini dalam proyek Anda, gunakan fungsi require() untuk mengakses instance modul. Misalnya, gunakan modul HTTP Node.js untuk membuat server sederhana.
Modul NPM Node.js
Npm menyediakan paket open source yang dapat Anda gunakan dalam proyek Anda. Saat Anda menginstal paket npm, dependensi disimpan di folder node_modules. Agar modul ini berfungsi, Anda perlu mengimpornya menggunakan require(). Untuk bekerja dengan modul NPM, Anda perlu menjalankan npm init -y untuk menghasilkan file package.json.
Jalankan npm install <nama paket> untuk membuat paket tersedia untuk proyek Anda.
Misalnya, Moment adalah modul NPM yang digunakan saat mencoba melihat dan memformat tanggal di Node.js. Berikut cara menggunakan momen.
Jalankan npm install moment untuk menginstal dependensi Moment untuk proyek Anda, Gunakan momen untuk menampilkan tanggal hari ini:
//app.js
const moment = require('moment');
const todayDate = moment();
console.log(
"The date today is " +
todayDate.format('dddd, MMMM Do YYYY, h:mm:ss a')
);
Ketika saya menjalankan node app.js, saya mendapatkan output berikut:
The date today is Saturday, May 1st 2021, 4:11:26 pm
Kesimpulan
Pola modul membantu menerapkan teknologi untuk membangunnya dalam skala besar dengan membagi proyek Node.js menjadi bagian-bagian yang dapat digunakan kembali.
selamat mencoba, happy coding :)