├── README.md ├── node-js-dasar ├── 01-Pengenalan-Node-JS │ ├── README.md │ └── image.png ├── 02-Web-Applications │ └── README.md ├── 03-Concurrency-dan-Parallel │ └── READMe.md ├── 04-Threadpool-Web-Model │ ├── README.md │ └── image.png ├── 05-Blocking-dan-Non-Blocking │ └── README.md ├── 06-Node-JS-Architecture │ ├── README.md │ ├── image-1.png │ └── image.png ├── 07-Menginstall-Node-JS │ ├── README.md │ ├── image-1.png │ └── image.png ├── 08-Hello-World │ ├── README.md │ ├── hello-world.js │ └── image.png ├── 09-REPL │ ├── README.md │ └── image.png ├── 10-Node-JS-Standard-Library │ └── README.md ├── 11-Modules │ ├── README.md │ ├── image.png │ └── module.mjs ├── 12-Require-Functions │ ├── README.md │ ├── image.png │ └── require-functions.js ├── 13-Globals-Async-pada-Modules │ ├── README.md │ ├── async.mjs │ └── image.png ├── 14-OS │ ├── README.md │ ├── image.png │ └── os.mjs ├── 15-Path │ ├── README.md │ ├── image.png │ └── path.mjs ├── 16-File-System │ ├── README.md │ ├── image-1.png │ ├── image.png │ ├── info.txt │ ├── read.mjs │ └── write.mjs ├── 17-Debugger │ ├── README.md │ ├── debugger.mjs │ └── image.png ├── 18-DNS │ ├── README.md │ └── dns.mjs ├── 19-Events │ ├── README.md │ ├── events.mjs │ └── image.png ├── 20-Globals │ ├── README.md │ └── globals.mjs ├── 21-Process │ ├── README.md │ └── process.mjs ├── 22-Readline │ ├── README.md │ ├── image.png │ └── readline.mjs ├── 23-Report │ ├── README.md │ ├── image-1.png │ ├── image.png │ └── report.mjs ├── 24-Buffer │ ├── README.md │ ├── buffer-encoding.mjs │ ├── buffer.mjs │ └── image.png ├── 25-Stream │ ├── README.md │ ├── image.png │ ├── stream.mjs │ └── target.log ├── 26-Timer │ ├── README.md │ ├── image-1.png │ ├── image.png │ ├── timer-promise.mjs │ └── timer.mjs ├── 27-Net │ ├── README.md │ ├── image-1.png │ ├── image.png │ ├── net-client.mjs │ └── net-server.mjs ├── 28-URL │ ├── README.md │ └── url.mjs ├── 29-Util │ ├── README.md │ └── util.mjs ├── 30-Zlib │ ├── README.md │ ├── zlib-decompress.mjs │ └── zlib.mjs ├── 31-Console │ ├── README.md │ ├── application.log │ └── console.mjs ├── 32-Worker-Threads │ ├── README.md │ ├── worker-main.mjs │ └── worker.mjs ├── 33-Http-Client │ ├── README.md │ └── http-client.mjs ├── 34-Http-Server │ ├── README.md │ ├── http-server.mjs │ └── request-response.mjs ├── 35-Cluster │ ├── README.md │ └── cluster.mjs └── README.md ├── node-js-npm ├── 01-Pengenalan-NPM │ ├── README.md │ ├── image-1.png │ └── image.png ├── 02-Membuat-Project │ ├── README.md │ ├── image-1.png │ └── image.png ├── 03-Project-Configuration │ ├── README.md │ ├── image-1.png │ └── image.png ├── 04-Menjalankan-Project │ ├── README.md │ └── image.png ├── 05-Project-Type │ ├── README.md │ └── image.png └── README.md └── package.json /README.md: -------------------------------------------------------------------------------- 1 |
2 | Selamat datang di repository mastering Node JS, di repository ini anda akan mempelajari banyak sekali konsep dasar hingga advanced pada teknologi Node JS. Adapun beberapa materi yang akan anda pelajari adalah sebagai berikut. 3 |
4 | 5 | 1. [Node JS Dasar](https://github.com/Bahrul-Rozak/mastering-node-js/tree/main/node-js-dasar) 6 | 2. [Node JS NPM]() 7 | 3. [Node JS Unit Test]() 8 | 4. [Node JS Logging]() 9 | 5. [Node JS Express]() 10 | 6. [Node JS Template Engine]() 11 | 7. [Node JS Database dan ORM]() 12 | 8. [Node JS Validation]() 13 | 9. [Node JS Restful API]() 14 | 10. [Node JS Beautiful Documentation]() 15 | -------------------------------------------------------------------------------- /node-js-dasar/01-Pengenalan-Node-JS/README.md: -------------------------------------------------------------------------------- 1 |2 | Sebelum kita menjelajahi dunia Node JS lebih jauh, mari kita awali petualangan kita kali ini dengan berkenalan dengan teknologi Node JS terlebih dahulu. Teknologi Node JS pertama kali diperkenalkan oleh Ryan Dahl sekitar tahun 2009, dengan menggunakan Node JS kita bisa menjalankan atau mengeksekusi kode JavaScript di luar environmentnya, dalam hal ini adalah browser. Node JS sendiri dibuat dengan menggunakan engine bernama v8. Engine v8 ini merupakan engine yang digunakan dalam browser Google Chrome, cara kerja engine ini adalah dengan mengubah kode JavaScript menjadi bentuk byte-byte code, sehingga eksekusi atau runtime execution dari JavaScript menjadi lebih cepat. Perlu diperhatikan bahwa Node JS ini bukanlah bahasa pemrograman, melainkan runtime environment. 3 |
4 | 5 | ### Kenapa harus Node JS? 6 | 7 |8 | Ketika kita mempelajari sesuatu, pastilah kita akan awali dengan mengapa atau kenapa, dari hal ini maka nanti kita akan melihat sudut pandang dan perspektif yang beraneka ragam, sehingga proses belajar kita akan menjadi lebih efektif. So balik lagi, mengapa harus Node JS? Mungkin anda pernah melihat postingan meme berikut? 9 |
10 | 11 |  12 | 13 |14 | Pada meme di atas, terlihat Javascript bisa mengisi di hampir semua lini, misalkan front end, back end, mobile apps, dekstop app dan machine learning. Artinya apa? JavaScript everywhere, JavaScript ada di mana-mana. Nah konsep JavaScript everywhere inilah yang tidak mungkin bisa kita pisahkan dengan Node JS, dengan Node JS maka istilah JavaScript everywhere menjadi semakin populer, karena pada zaman dulu JavaScript hanya sebatas pada sisi client, namun dengan hadirnya teknologi Node JavaScript, Kini JavaScript dapat berjalan diluar browser, seperti yang sudah kita simak di meme tersebut. 15 |
16 | 17 | ### Apa saja yang tidak bisa dilakukan Node JS? 18 | 19 |20 | Walaupun dengan hadirnya teknologi Node JS, tidak serta merta kita dapat menggunakannya disegala environment untuk menjalankan kode dan fitur yang tersedia pada JavaScript. Misalkan kita ingin menjalankan fitur pada JavaScript client (Document Object Model) di Node JS, maka tentu saja hal ini tidak bisa dilakukan. 21 |
22 | -------------------------------------------------------------------------------- /node-js-dasar/01-Pengenalan-Node-JS/image.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Bahrul-Rozak/mastering-node-js/53e273f3ad4aed1e1977d34357805b0057d71559/node-js-dasar/01-Pengenalan-Node-JS/image.png -------------------------------------------------------------------------------- /node-js-dasar/02-Web-Applications/README.md: -------------------------------------------------------------------------------- 1 |2 | Ketika kita mengembangkan web application atau dalam bahasa Indonesia adalah aplikasi berbasis website, ada 3 hal yang menjadi komponen utama dalam pembuatannya yaitu client, server dan tentu saja database. 3 |
4 | 5 | ### Client 6 | 7 |8 | Client ini merupakan bagian yang secara langsung terlihat dan pengguna dapat berinteraksi dengannya entah itu meminta atau mengirim data. Client pada lingkup software developer, biasanya dikerjakan oleh seorang Frontend developer. Teknologi pada client ini terdiri dari HTML, CSS dan tentu saja JavaScript. 9 |
10 | 11 | ### Server 12 | 13 |14 | Berbeda dengan client, server ini tidak terlihat langsung oleh pengguna atau end user. Dan disinilah semua proses dan logic business berlangsung. Server ini bertanggung jawab untuk menerima request dari Client, mengerjakan request yang dikirim dan membalas request berupa response ke Client. Biasanya Server dibuat menggunakan PHP, Python, Java, .NET dan banyak bahasa pemrograman lainnya. Dengan kemunculan teknologi Node JS, sekarang kita bisa membuat Server menggunakan JavaScript 15 |
16 | 17 | ### Database 18 | 19 |20 | Database adalah tempat untuk menyimpan data pada web application. Data disimpan dan diambil oleh Server. Client tidak bisa langsung mengambil atau menyimpan data ke Database secara langsung, oleh karena itu perlu penengah untuk melakukannya, yaitu Server. Database biasanya menggunakan aplikasi sistem basis data seperti misalnya MySQL, PostgreSQL, MongoDB dan lain-lain 21 |
22 | 23 | [<2 | Dahulu, komputer hanya bekerja untuk menjalankan sebuah program hanya pada satu waktu (monotasking), hal ini tentu saja sangatlah tidak efisien dan memakan waktu lama karena hanya bisa mengerjakan atau menjalankan sebuah program pada satu waktu. Namun seiring perkembangan zaman, komputer kini bisa menjalankan program secara bersamaan (multitasking) dalam proses yang berbeda-beda dan tentu saja terisolate (maksudnya gak bakal ganggu antar proses). Contoh yang sering kita lakukan yaitu saat ngoding, kita pasti buka stackoverflow, kita pasti buka dokumentasi dan lain-lain. 3 |
4 | 5 | ### Apa itu Thread? 6 | 7 |8 | Nah program-program yang berjalan tersebut akan memiliki resource dengan sifat yang indepedent. Sekarang komputer tidak hanya bisa menjalankan multitasking, namun juga dapat menjalankan banyak pekerjaan sekaligus atau dikenal dengan istilah menjalankan thread (sebuah proses ringan). Thread ini membuat proses aplikasi berjalan tidak harus selalu sequential (saling tunggu-tungguan) melainkan kita bisa membuat proses aplikasi tersebut berjalan secara async atau parallel. 9 |
10 | 11 | ### Concurrency dan Parallel 12 | 13 |14 | Concurrency secara sederhana adalah proses yang dilakukan oleh komputer untuk mengerjakan tugas satu persatu dalam satu waktu. Sedangkan parallel secara sederhana adalah proses yang dilakukan oleh komputer untuk mengerjakan banyak tugas sekaligus dalam satu waktu. Contohnya browser adalah aplikasi yang concurreny dan parallel. Browser akan melakukan proses concurreny ketika membuka web, browser akan melakukan http request, lalu mendownload semua file web (HTML, CSS, JavaScript) lalu merender dalam bentuk tampilan web (saling tunggu-tungguan). Kemudian Browser akan melakukan proses parallel, ketika kita membuka beberapa tab web (seperti pada contoh sebelumnya) 15 |
16 | 17 | ### Synchronous vs Asynchronous 18 | 19 |20 | Saat membuat aplikasi yang concurrent atau parallel, kadang kita sering menemui istilah 21 | synchronous dan asynchronous. Tidak perlu bingung dengan istilah tersebut, secara sederhana Synchronous adalah ketika kode program kita berjalan secara sequential, dan semua tahapan ditunggu sampai prosesnya selesai baru akan dieksekusi ke tahapan selanjutnya. Sedangkan, Asynchronous artinya ketika kode program kita berjalan dan kita tidak perlu 22 | menunggu eksekusi kode tersebut selesai, kita bisa lanjutkan ke tahapan kode program selanjutnya 23 |
24 | 25 | [<2 | Pada materi Concurrency dan parallel kita sudah mengetahui bahwa thread merupakan proses ringan yang biasa dibuat saat membuat applikasi. Walaupun ada istilah "ringan", namun jika kita terlalu banyak membuat thread (thread overload), maka tetap saja akan memberatkan proses kita. Oleh karena itu, kita harus melakukan management terhadap thread-thread tersebut, dengan apa? Kita bisa menggunakan threadpool. Threadpool merupakan tempat dimana kita menyimpan thread, jadi ketika kita membutuhkan thread maka kita cukup ambil dari threadpool, dengan adanya threadpool ini kita bisa menggunakan thread berulang kali tanpa harus membuat thread baru terus menerus atau istilahnya reusable thread. 3 |
4 | 5 |  6 | 7 | ### Threadpool Queue 8 | 9 |10 | Apa yang akan terjadi ketika semua thread sedang bekerja? Bagaimana jika kita ingin meminta thread ke threadpool untuk mengerjakan sesuatu? Jika semua thread penuh, kita tidak bisa meminta lagi thread ke threadpool. Kita harus menunggu sampai ada thread yang tidak sibuk. Dimana kita harus menunggu sampai ada thread tersedia untuk digunakan? Biasanya threadpool memiliki tempat untuk menyimpan tugas yang belum dikerjakan oleh thread 11 | di tempat bernama queue (antrian). Ketika kita mengirim perintah ke threadpool, perintah tersebut akan dikirim ke queue, lalu perintah-perintah itu akan dieksekusi satu per satu oleh thread yang tersedia di threadpool 12 |
13 | 14 | ### Threadpool Web Model 15 | 16 |17 | Dahulu pembuatan web application sangat populer menggunakan threadpool model. Setiap request yang masuk ke web server akan diproses oleh satu buah thread. Dengan demikian ketika banyak request masuk, semua bisa diproses secara paralel karena akan ditangani oleh thread masing-masing. Namun penggunaan threadpool model ini memiliki kekurangan, ketika thread sedang sibuk semua, secara otomatis request selanjutnya harus menunggu sampai ada thread yang selesai melakukan tugas sebelumnya. Contoh web server yang menggunakan threadpool model, seperti Apache HTTPD, Apache Tomcat dan lain-lain 18 |
19 | 20 | [<2 | Secara default, saat kita membuat program maka code program tersebut akan berjalan secara syncronous atau blocking. Artinya kode program kita akan tunggu-tungguan. Sedangkan non blocking atau biasa disebut async merupakan kebalikan dari blocking, maka program kita akan berjalan atau dieksekusi tanpa harus menunggu kode sebelumnya selesai dieksekusi. Ketika memanggil kode async atau non blocking, biasanya kita perlu mengirimkan callback, contoh proses non blocking yaitu AJAX, Fetch API. Nah di Node JS hampir semua fiturnya mendukung kode non blocking. 3 |
4 | 5 | [<4 | Event-Loop merupakan single thread proses yang digunakan untuk mengeksekusi kode Non-Blocking. Karena Event-Loop hanya menggunakan single thread, maka kita harus berhati-hati ketika 5 | membuat blocking code, karena bisa memperlambat proses eksekusi kode kita. Event-Loop sendiri sebenarnya tugasnya hanya menerima dan mengirim eksekusi kode ke C++ threadpool, oleh karena itu selalu usahakan menggunakan kode nonblocking agar proses blocking-nya dikerjakan di C++ threadpool. Event-Loop akan menerima response dari C++ threadpool yang di kirim via callback. NodeJS Menggunakan C++ Threadpool untuk workernya, yaitu threadpool untuk melakukan pekerjaan. 6 |
7 | 8 |  9 | 10 |11 | Libuv adalah library yang digunakan di NodeJS, dimana secara default libuv menggunakan 4 thread di dalam threadpool nya, hal ini menjadikan kita bisa melakukan 4 pekerjaan blocking sekaligus dalam satu waktu. 12 | Jika terlalu banyak pekerjaan blocking, kita bisa mengubah jumlah thread di libuv dengan 13 | pengaturan environment variable UV_THREADPOOL_SIZE 14 |
15 | 16 | [<2 | Silahkan kunjungi https://nodejs.org/en untuk mendownload Node JS. Kemudian download yang versi LTS. Setelah itu untuk memastikan bahwa Node JS sudah terinstall di local environment kita, kita bisa check menggunakan perintah 3 |
4 | 5 | ``` 6 | node -v 7 | ``` 8 | 9 |  10 | 11 | Ketika, kita menginstall Node JS, secara default Node JS sudah membundle packet manager bernama NPM, untuk mengecek NPM bisa menggunakan perintah 12 | 13 | ``` 14 | npm -v 15 | ``` 16 | 17 |  18 | 19 | [<2 | Silahkan buat satu buah folder bernama belajar-node-js, kemudian buatlah satu buah file bernama hello-world.js, yang didalamnya tentu saja kita masukkan script javascript untuk menampilkan hello world di dalam console. 3 |
4 | 5 | ```js 6 | console.log("Hello World"); 7 | ``` 8 | 9 |10 | Karena NodeJS tidak memerlukan Web Browser, jadi kita bisa langsung menjalankan program 11 | JavaScript kita menggunakan aplikasi NodeJS lewat terminal / command promt, dengan perintah 12 |
13 | 14 | ``` 15 | node namaFilenya 16 | ``` 17 | 18 |  19 | 20 | [<2 | Sebenarnya, kita bisa saja menjalankan kode JavaScript, tanpa harus membuat filenya. Caranya yaitu dengan menggunakan playground Node JS bernama REPL. REPL ini merupakan kepanjangan dari Read Eval Print Loop, yang merupakan mekanisme membaca langsung kode program yang diketikkan, lalu mengeksekusinya, menampilkan hasilnya, lalu mengulangi dari awal lagi. Untuk menggunakan playground REPL caranya cukup ketikkan perintah node 3 |
4 | 5 |  6 | 7 | [<2 | 3 | Kita sudah mengetahui bahwa tidak semua fitur pada JavaScript, dapat kita jalankan dengan teknologi Node JS. Fitur-fitur tersebut diantaranya adalah Web API. Namun bukankah dengan adanya Web API itu akan mempermudah pembuatan aplikasi? Yap betul! Tapi bagaimana dengan Node JS? Nah kalau di Node JS kita bisa menggunakan standard library. 4 | 5 |
6 | 7 | [<2 | Nah standard library pada Node JS, ini kita sebut dia sebagai Modules, jika anda sudah paham menggunakan JavaScript modules, ya seperti itu kurang lebih mekanisme kerjanya. Jika kita ingin menggunakan Modules, maka kita juga perlu memberi tahu bahwa file JavaScript kita menggunakan Modules, caranya dengan mengubah nama file extensi .js (javascipt) menjadi extensi .mjs (module javascript). Sebagai contoh disini kita memiliki file module.mjs yang dimana pada file tersebut memiliki fungsi untuk mengecek versi dari os kita, nah untuk memudahkan kita bisa menggunakan standard library bernama os. 3 |
4 | 5 | ```js 6 | import os from "os"; 7 | 8 | function getOsInformation() { 9 | const version = os.version(); 10 | console.log(version); 11 | } 12 | getOsInformation(); 13 | ``` 14 | 15 |  16 | 17 | [<2 | Ketika kita menggunakan JavaScript modules, untuk melakukan import file kita bisa gunakan cara import blabla from blabla, namun itu sekarang. Tapi dahulu kala, ketika awal mula teknologi Node JS rilis, Node JS secara default tidak bisa menggunakan JavaScript modules dengan cara tersebut, tapi Node JS menggunakan require functions, walaupun require functions mulai ditinggalkan tapi masih banyak beberapa artikel atau tutorial yang menggunakan require function, oleh karena itu tidak ada salahnya untuk mempelajari require function. Menggunakan require functions itu sangat sederhana kita cukup ketikkan keyword require(). Sebagai contoh kita memiliki functions untuk mengecek versi os menggunakan standard library os 3 |
4 | 5 | ```js 6 | const os = require("os"); 7 | 8 | function getOsInformation() { 9 | const version = os.version(); 10 | console.log(version); 11 | } 12 | getOsInformation(); 13 | ``` 14 | 15 |  16 | 17 | [<2 | Ketika kita menggunakan async await, biasanya kita perlu membuat terlebih dahulu function dengan label async, nah saat kita menggunakan javascript modules (.mjs), itu secara tidak langsung, global codenya adalah bersifat async. Oleh karena itu kita bisa menggunakan async await, kecuali jika kita membuat function, maka function tersebut harus kita berikan label sebagai async jika ingin menggunakan async await. 3 |
4 | 5 | ```js 6 | function samplePromise() { 7 | return Promise.resolve("Rozak"); 8 | } 9 | 10 | const data = await samplePromise(); 11 | console.log(data); 12 | ``` 13 | 14 |  15 | 16 | [<2 | Pada beberapa materi sebelumnya, kita sudah menggunakan standar library bernama OS, OS merupakan standard library yang digunakan untuk mendapatkan informasi tentang sistem operasi. 3 |
4 | 5 | ```js 6 | import os from "os"; 7 | 8 | const getOsInformation = { 9 | version: os.version(), 10 | platform: os.platform(), 11 | }; 12 | 13 | let { version, platform } = getOsInformation; 14 | 15 | console.log(version, platform); 16 | ``` 17 | 18 |  19 | 20 | [<2 | Path merupakan standard library yang digunakan untuk mendapatkan lokasi file 3 |
4 | 5 | ```js 6 | import path from "path"; 7 | 8 | const locationFile = "/Desktop/mastering-node-js/15-Path/path.mjs"; 9 | 10 | console.log(path.dirname(locationFile)); 11 | console.log(path.basename(locationFile)); 12 | console.log(path.extname(locationFile)); 13 | console.log(path.parse(locationFile)); 14 | ``` 15 | 16 |  17 | 18 | [<2 | Di Node JS, kita juga bisa melakukan operasi manipulasi file, contoh manipulasi file sederhana adalah membaca dan menulis file. Pada teknologi Node JS kita bisa menggunakan standard library bernama fs alias file system. Dalam fs terdapat 3 jenis library yaitu, yang pertama library yang bersifat blocking atau synchronous, yang kedua library yang bersifat non-blocking atau asynchronous menggunakan callback dan yanh ketiga library yang bersifat non-blocking atau asynchronous tapi menggunakan promise 3 |
4 | 5 |6 | Disini kita mempunyai sebuah fungsi untuk membaca isi file pada file read.mjs dalam bentuk string 7 |
8 | 9 | ```js 10 | import fileSystem from "fs"; 11 | 12 | const readFileAsString = function () { 13 | const read = fileSystem.readFileSync("read.mjs"); 14 | console.log(read.toString()); 15 | }; 16 | 17 | readFileAsString(); 18 | ``` 19 | 20 |  21 | 22 |23 | Kemudian kita juga, membuat sebuah fungsi untuk menuliskan file dalam format info.txt yang berisi data diri nama : Bahrul Rozak 24 |
25 | 26 | ```js 27 | import fileSystem from "fs"; 28 | 29 | const writeFileTxt = function () { 30 | const write = fileSystem.writeFileSync("info.txt", "Nama : Bahrul Rozak"); 31 | console.log(write); 32 | }; 33 | 34 | writeFileTxt(); 35 | ``` 36 | 37 | Hasilnya, kita telah membuat satu file info.txt 38 | 39 |  40 | 41 | [<2 | Debugging merupakan makanan sehari-hari bagi para developer, Nah Node JS sendiri menyediakan fitur untuk melakukan debugging tersebut. Dia bernama debugger. Dalam debugging, ada istilah yang cukup penting untuk kita pahami yaitu, breakpoint. Breakpoint adalah lokasi dimana kita ingin menghentikan 3 | sementara eksekusi kode program. Biasanya hal ini kita lakukan untuk mengawasi data-data di sekitar lokasi berhentinya tersebut. Untuk menambahkan breakpoint, kita bisa menggunakan keyword debugger 4 |
5 | 6 | ```js 7 | function add(a, b) { 8 | debugger; 9 | return a + b; 10 | } 11 | 12 | const calculate = add(5, 5); 13 | console.log(calculate); 14 | ``` 15 | 16 |17 | Untuk menjalankan mode debugger, kita bisa menggunakan perintah node inspect namafile 18 |
19 | 20 |  21 | 22 | [<2 | DNS merupakan standard library teknologi Node JS untuk bekerja dengan Domain Name System (DNS) 3 |
4 | 5 | ```js 6 | import dns from "dns/promises"; 7 | 8 | const lookup = await dns.lookup("bahrulrozak.vercel.app"); 9 | console.log(lookup.family); 10 | console.log(lookup.address); 11 | ``` 12 | 13 | [<< Debugger](https://github.com/Bahrul-Rozak/mastering-node-js/tree/main/node-js-dasar/17-Debugger) 14 |2 | Untuk mengimplementasikan event listener pada teknologi Node JS, kita dapat menggunakan salah satu standard library bernama Events. Nah Di dalam Events ini, terdapat sebuah class bernama EventEmitter yang bisa digunakan sebagai wadah atau penampung untuk data listener per jenis event. Lalu kita bisa melakukan emmit untuk mentrigger jenis event dan mengirim data kepada event tersebut. 3 |
4 | 5 | ```js 6 | import { EventEmitter } from "events"; 7 | 8 | const emitter = new EventEmitter(); 9 | emitter.addListener("hello", (name) => { 10 | console.info(`Hello ${name}`); 11 | }); 12 | 13 | emitter.emit("hello", "Rozak"); 14 | ``` 15 | 16 |17 | Ketika kita memberikan dan mengirimkan trigger "hello" dan "Rozak", maka Hello Rozak akan berjalan 18 |
19 | 20 |  21 | 22 | [<< DNS](https://github.com/Bahrul-Rozak/mastering-node-js/tree/main/node-js-dasar/18-DNS) 23 |2 | Selama ini ketika kita menggunakan standar library, kita harus terlebih dahulu mengimport standard library yang akan kita gunakan, namun di dalam teknologi Node JS terdapat standard library berupa variable atau function yang secara global bisa diakses dimana saja, tanpa harus import-import dulu. Contohnya adalah setTimeout(). 3 |
4 | 5 | ```js 6 | setTimeout(function () { 7 | console.log("Halo Node JS"); 8 | }, 3000); 9 | ``` 10 | 11 | [<< Events](https://github.com/Bahrul-Rozak/mastering-node-js/tree/main/node-js-dasar/19-Events) 12 |2 | Process merupakan standard library yang digunakan untuk mendapatkan informasi proses NodeJS 3 | yang sedang berjalan. Process juga merupakan instance dari EventEmitter, sehingga kita bisa menambahkan listener kedalam standar library Process. 4 |
5 | 6 | ```js 7 | import process, { env, memoryUsage, report } from "process"; 8 | 9 | process.addListener("exit", function (exitCode) { 10 | console.log(`Node JS with exit code ${exitCode}`); 11 | }); 12 | 13 | const allProcess = { 14 | reportProcess: report, 15 | reportMemoryUsage: memoryUsage(), 16 | }; 17 | 18 | const { reportProcess, reportMemoryUsage } = allProcess; 19 | console.log(reportProcess, reportMemoryUsage); 20 | 21 | process.exit(1); 22 | ``` 23 | 24 | [<< Globals](https://github.com/Bahrul-Rozak/mastering-node-js/tree/main/node-js-dasar/20-Globals) 25 |2 | Biasanya ketika kita ingin memberikan interaksi kepada pengguna, misalkan menerima dan membaca input dari user, kita dapat menggunakan fitur web API pada JavaScript bernama prompt(), namun seperti yang sudah kita pelajari bahwa teknologi Node JS tidak bisa menjalankan Web API tersebut dan digantikan dengan standard library. Nah standard library yang digunakan untuk menerima dan membaca input dari user tersebut adalah readline. 3 |
4 | 5 | ```js 6 | import readline from "readline"; 7 | import process from "process"; 8 | 9 | function getInputFromUser() { 10 | const input = readline.createInterface({ 11 | input: process.stdin, 12 | output: process.stdout, 13 | }); 14 | input.question("Siapa Nama Anda? ", function (name) { 15 | console.info(`Hello ${name}`); 16 | input.close(); 17 | }); 18 | } 19 | 20 | getInputFromUser(); 21 | ``` 22 | 23 |  24 | 25 | [<< Process](https://github.com/Bahrul-Rozak/mastering-node-js/tree/main/node-js-dasar/21-Process) 26 |2 | Report merupakan fitur yang terdapat di NodeJS untuk membuat laporan secara otomatis dalam file ketika sesuatu terjadi pada aplikasi NodeJS kita. 3 |
4 | 5 | ```js 6 | import process from "process"; 7 | 8 | process.report.reportOnFatalError = true; 9 | process.report.reportOnUncaughtException = true; 10 | process.report.reportOnSignal = true; 11 | process.report.filename = "report.json"; 12 | 13 | function sampleError() { 14 | throw new Error("Ups Terjadi Eror"); 15 | } 16 | 17 | sampleError(); 18 | ``` 19 | 20 |21 | Maka, kita akan mendapati generate report dalam bentuk file report.json 22 |
23 | 24 |  25 | 26 |  27 | 28 | [<< Readline](https://github.com/Bahrul-Rozak/mastering-node-js/tree/main/node-js-dasar/22-Readline) 29 |2 | Buffer merupakan object yang berisikan urutan byte dengan panjang tetap yang merupakan turunan dari tipe data Uint8Array 3 |
4 | 5 | ```js 6 | import { Buffer } from "node:buffer"; 7 | 8 | const buffer = Buffer.from("Rozak"); 9 | console.info(buffer.toString()); 10 | 11 | buffer.reverse(); 12 | console.info(buffer.toString()); 13 | ``` 14 | 15 |  16 | 17 |18 | Selain itu buffer juga bisa kita gunakan untuk melakukan encoding dan merubah encoding tersebut ke encoding lainnya. Ada banyak encoding yang didukung oleh Buffer, misal utf8, ascii, hex, base64, base64url dan lain-lain. 19 |
20 | 21 | ```js 22 | import { Buffer } from "node:buffer"; 23 | 24 | const buffer = Buffer.from("Rozak"); 25 | console.info(buffer.toString("base64")); 26 | ``` 27 | 28 | [<< Report](https://github.com/Bahrul-Rozak/mastering-node-js/tree/main/node-js-dasar/23-Report) 29 |2 | Stream adalah standard library untuk kontrak aliran data di teknologi Node JS. Ada banyak sekali Stream object di teknologi NodeJS. Stream bisa jadi object yang bisa dibaca, atau bisa di tulis, dan Stream adalah turunan dari EventEmitter 3 |
4 | 5 | ```js 6 | import fs from "fs"; 7 | 8 | function createWriterStream() { 9 | const writer = fs.createWriteStream("target.log"); 10 | writer.write("Bahrul"); 11 | writer.write("Rozak"); 12 | writer.close(); 13 | } 14 | 15 | function createReaderStream() { 16 | const reader = fs.createReadStream("target.log"); 17 | reader.on("data", function (data) { 18 | console.info(data.toString()); 19 | reader.close(); 20 | }); 21 | } 22 | 23 | createWriterStream(); 24 | createReaderStream(); 25 | ``` 26 | 27 |28 | Maka kita akan mendapati output target.log 29 |
30 | 31 |  32 | 33 | [<< Buffer](https://github.com/Bahrul-Rozak/mastering-node-js/tree/main/node-js-dasar/24-Buffer) 34 |2 | Timer merupakan standard library untuk melakukan scheduling. Function di Timer terdapat di globals, seperti yang sudah kita pelajari bahwa function yang terdapat di globals kita bisa menggunakannya tanpa harus melakukan import-import dulu, namun semua function Timer menggunakan mekanisme Callback. 3 |
4 | 5 | ```js 6 | setInterval(() => { 7 | console.log(`Interval at ${new Date()}`); 8 | }, 1000); 9 | ``` 10 | 11 |  12 | 13 |14 | Akan tetapi Jika kita ingin menggunakan Timer versi Promise, kita bisa meng-import dari moduletimer/promise 15 |
16 | 17 | ```js 18 | import timers from "timers/promises"; 19 | 20 | for await (const startTime of timers.setInterval(1000, new Date())) { 21 | console.log(`Starter time at ${startTime}`); 22 | } 23 | ``` 24 | 25 |  26 | 27 | [<< Stream](https://github.com/Bahrul-Rozak/mastering-node-js/tree/main/node-js-dasar/25-Stream) 28 |2 | Net merupakan standard library yang bisa digunakan untuk membuat network client dan server berbasis TCP atau IPC. Net Server dan Client merupakan object Stream, sehingga kita bisa baca datanya, tulis datanya dan juga menambahkan listener. Pada contoh kali ini kita mempunyai sebuah client server sederhana yang saling terhubung dan akan menerima pesan selama interval yang ditentukan 3 |
4 | 5 | ```js 6 | // net-client.mjs 7 | import net from "net"; 8 | 9 | const connection = net.createConnection({ 10 | port: 3000, 11 | host: "localhost", 12 | }); 13 | 14 | setInterval(function () { 15 | connection.write("Rozak\r\n"); 16 | }, 2000); 17 | 18 | connection.addListener("data", function (data) { 19 | console.info(`Receiver data from server : ${data.toString()}`); 20 | }); 21 | ``` 22 | 23 |  24 | 25 | ```js 26 | // net-server.mjs 27 | import net from "net"; 28 | 29 | const server = net.createServer(function (client) { 30 | console.info("Client has been Connected"); 31 | client.on("data", function (data) { 32 | console.info(`Receiver data from client : ${data.toString()}`); 33 | client.write(`Hello ${data.toString()}\r\n`); 34 | }); 35 | }); 36 | 37 | server.listen(3000, "localhost"); 38 | ``` 39 | 40 |  41 | 42 | [<< Timer](https://github.com/Bahrul-Rozak/mastering-node-js/tree/main/node-js-dasar/26-Timer) 43 |2 | URL merupakan standar library yang tersedia pada teknologi Node JS untuk bekerja dengan URL. 3 |
4 | 5 | ```js 6 | import { URL } from "url"; 7 | 8 | const getUrlInformation = () => { 9 | const originalUrl = new URL("https://bahrulrozak.vercel.app"); 10 | const urlProperties = { 11 | protocol: originalUrl.protocol, 12 | host: originalUrl.host, 13 | pathname: originalUrl.pathname, 14 | }; 15 | console.log(urlProperties); 16 | }; 17 | 18 | getUrlInformation(); 19 | ``` 20 | 21 | [<< Net]() 22 |2 | Util adalah standard library yang berisikan utility-utility yang bisa kita gunakan untuk mempermudah pembuatan kode program di teknologi NodeJS. Misalkan disini kita ingin key firstName dan lastName memiliki value yang berisi single quotes. 3 |
4 | 5 | ```js 6 | import util from "util"; 7 | 8 | const person = { 9 | firstName: "Bahrul", 10 | lastName: "Rozak", 11 | age: 21, 12 | }; 13 | 14 | console.log(util.format("Person : %s", person)); 15 | 16 | // Person : { firstName: 'Bahrul', lastName: 'Rozak', age: 21 } 17 | ``` 18 | 19 | [<< URL]() 20 |2 | Kita juga dapat melakukan kompresi file dengan bantuan dari salah satu standard library bernama zlib 3 |
4 | 5 | ```js 6 | import zlib from "zlib"; 7 | import fs from "fs"; 8 | 9 | const originialSourceFile = fs.readFileSync("zlib.mjs"); 10 | const compressOriginalSourceFile = zlib.gzipSync(originialSourceFile); 11 | 12 | fs.writeFileSync("zlib.mjs.txt", compressOriginalSourceFile); 13 | ``` 14 | 15 |16 | Maka kita akan mendapati hasil kompresi original file dalam bentuk format txt, nah sekarang bagaimana caranya agar file tersebut, kembali ke format semula? Kita bisa lakukan decompress file 17 |
18 | 19 | ```js 20 | import zlib from "zlib"; 21 | import fs from "fs"; 22 | 23 | const originialSourceFile = fs.readFileSync("zlib.mjs.txt"); 24 | const decompressOriginalSourceFile = zlib.unzipSync(originialSourceFile); 25 | 26 | console.log(decompressOriginalSourceFile.toString()); 27 | ``` 28 | 29 | [<< Util]() 30 |2 | Tahukah kamu? ternyata console yang selama ini sering kita gunakan merupakan salah satu dari sekian banyak standard library pada teknologi Node JS. Console ini juga masuk ke dalam globals object, jadi seperti biasa kita tidak harus lakukan import-import module. Dan kita juga bisa membuat object dari console tersebut, sangat menarik sekali bukan? 3 |
4 | 5 | ```js 6 | import { Console } from "console"; 7 | import fs from "fs"; 8 | 9 | const logFile = fs.createWriteStream("application.log"); 10 | 11 | const log = new Console({ 12 | stdout: logFile, 13 | stderr: logFile, 14 | }); 15 | 16 | log.info("Hello Node JS"); 17 | log.error("Ups terjadi error"); 18 | ``` 19 | 20 | [<< Zlib]() 21 |2 | Worker Threads adalah standard library yang bisa kita gunakan untuk menggunakan thread ketika mengeksekusi JavaScript secara paralel. Worker Threads sangat cocok ketika kita membuat kode program yang butuh jalan secara paralel dan biasanya kasusnya adalah ketika kode program kita membutuhkan proses yang cukup intensive, seperti misalnya enkripsi atau kompresi. Cara kerja Worker Threads mirip dengan Web Worker di JavaScript Web API 3 |
4 | 5 | [<< Console]() 6 |2 | NodeJS juga memiliki standard library untuk HTTP. Salah satu fitur di module HTTP adalah HTTP Client, dimana kita bisa melakukan simulasi HTTP Request menggunakan NodeJS. Terdapat 2 jenis module HTTP di NodeJS, HTTP dan HTTPS 3 |
4 | 5 | [<< Worker Threads]() 6 |2 | Standard Library HTTP juga tidak hanya bisa digunakan untuk membuat HTTP Client, tapi juga bisa 3 | digunakan untuk membuat HTTP Server. Untuk kasus sederhana, cocok sekali jika ingin membuat HTTP Server menggunakan standard library NodeJS, namun untuk kasus yang lebih kompleks, direkomendasikan menggunakan library atau framework yang lebih mudah penggunaannya. 4 |
5 | 6 | [<< HTTP Client]() 7 |2 | Seperti yang dijelaskan di awal, bahwa NodeJS itu secara default dia berjalan single thread, kecuali jika kita membuat thread manual menggunakan worker thread, tapi tetap dalam satu process. NodeJS memiliki standard library bernama Cluster, dimana kita bisa menjalankan beberapa process NodeJS secara sekaligus. Ini sangat cocok ketika kita menggunakan CPU yang multicore, sehingga semua core bisa kita utilisasi dengan baik, misal kita jalankan process NodeJS sejumlah CPU core. Di dalam Cluster, terdapat 2 jenis aplikasi, Primary dan Worker. Primary biasanya digunakan sebagai koordinator atau manajer untuk para Worker. Sedangkan Worker sendiri adalah aplikasi yang menjalankan tugasnya. 3 |
4 | 5 | ```js 6 | import cluster from "cluster"; 7 | import http, { request } from "http"; 8 | import os from "os"; 9 | import process from "process"; 10 | 11 | if (cluster.isPrimary) { 12 | for (let i = 0; i < os.cpus().length; i++) { 13 | cluster.fork(); 14 | } 15 | 16 | cluster.addListener("exit", function (worker) { 17 | console.log(`Worker ${worker.id} is exited`); 18 | }); 19 | } 20 | 21 | if (cluster.isWorker) { 22 | const server = http.createServer((request, Response) => { 23 | Response.write(`Response from process ${process.pid}`); 24 | Response.end(); 25 | process.exit(); 26 | }); 27 | server.listen(3000); 28 | console.log(`Start cluster worker ${process.pid}`); 29 | } 30 | ``` 31 | 32 | [<< HTTP Server]() 33 |2 | Selamat datang di repository Node JS Dasar, disinilah kita akan memulai petualangan yang sangat seru dan menantang. Sebelum itu mari kita lihat hal-hal menantang apa saja yang akan kita pelajari? 3 |
4 | 5 | 1. [Pengenalan Node JS](https://github.com/Bahrul-Rozak/mastering-node-js/tree/main/node-js-dasar/01-Pengenalan-Node-JS) 6 | 2. [Web Application](https://github.com/Bahrul-Rozak/mastering-node-js/tree/main/node-js-dasar/02-Web-Applications) 7 | 3. [Concurency dan Parallel](https://github.com/Bahrul-Rozak/mastering-node-js/tree/main/node-js-dasar/03-Concurrency-dan-Parallel) 8 | 4. [Threadpool Web Model](https://github.com/Bahrul-Rozak/mastering-node-js/tree/main/node-js-dasar/04-Threadpool-Web-Model) 9 | 5. [Blocking dan Non-Blocking](https://github.com/Bahrul-Rozak/mastering-node-js/tree/main/node-js-dasar/05-Blocking-dan-Non-Blocking) 10 | 6. [Node JS Architecture](https://github.com/Bahrul-Rozak/mastering-node-js/tree/main/node-js-dasar/06-Node-JS-Architecture) 11 | 7. [Menginstall Node JS](https://github.com/Bahrul-Rozak/mastering-node-js/tree/main/node-js-dasar/07-Menginstall-Node-JS) 12 | 8. [Hello World](https://github.com/Bahrul-Rozak/mastering-node-js/tree/main/node-js-dasar/08-Hello-World) 13 | 9. [REPL Mode](https://github.com/Bahrul-Rozak/mastering-node-js/tree/main/node-js-dasar/09-REPL) 14 | 10. [Node JS Standard Library](https://github.com/Bahrul-Rozak/mastering-node-js/tree/main/node-js-dasar/10-Node-JS-Standard-Library) 15 | 11. [Modules](https://github.com/Bahrul-Rozak/mastering-node-js/tree/main/node-js-dasar/11-Modules) 16 | 12. [Require Functions](https://github.com/Bahrul-Rozak/mastering-node-js/tree/main/node-js-dasar/12-Require-Functions) 17 | 13. [Globals Async pada Modules](https://github.com/Bahrul-Rozak/mastering-node-js/tree/main/node-js-dasar/13-Globals-Async-pada-Modules) 18 | 14. [OS](https://github.com/Bahrul-Rozak/mastering-node-js/tree/main/node-js-dasar/14-OS) 19 | 15. [Path](https://github.com/Bahrul-Rozak/mastering-node-js/tree/main/node-js-dasar/15-Path) 20 | 16. [File System](https://github.com/Bahrul-Rozak/mastering-node-js/tree/main/node-js-dasar/16-File-System) 21 | 17. [Debugger](https://github.com/Bahrul-Rozak/mastering-node-js/tree/main/node-js-dasar/17-Debugger) 22 | 18. [DNS](https://github.com/Bahrul-Rozak/mastering-node-js/tree/main/node-js-dasar/18-DNS) 23 | 19. [Events](https://github.com/Bahrul-Rozak/mastering-node-js/tree/main/node-js-dasar/19-Events) 24 | 20. [Globals](https://github.com/Bahrul-Rozak/mastering-node-js/tree/main/node-js-dasar/20-Globals) 25 | 21. [Process](https://github.com/Bahrul-Rozak/mastering-node-js/tree/main/node-js-dasar/21-Process) 26 | 22. [Readline](https://github.com/Bahrul-Rozak/mastering-node-js/tree/main/node-js-dasar/22-Readline) 27 | 23. [Report](https://github.com/Bahrul-Rozak/mastering-node-js/tree/main/node-js-dasar/23-Report) 28 | 24. [Buffer](https://github.com/Bahrul-Rozak/mastering-node-js/tree/main/node-js-dasar/24-Buffer) 29 | 25. [Stream](https://github.com/Bahrul-Rozak/mastering-node-js/tree/main/node-js-dasar/25-Stream) 30 | 26. [Timer](https://github.com/Bahrul-Rozak/mastering-node-js/tree/main/node-js-dasar/26-Timer) 31 | 27. [Net](https://github.com/Bahrul-Rozak/mastering-node-js/tree/main/node-js-dasar/27-Net) 32 | 28. [URL](https://github.com/Bahrul-Rozak/mastering-node-js/tree/main/node-js-dasar/28-URL) 33 | 29. [Util](https://github.com/Bahrul-Rozak/mastering-node-js/tree/main/node-js-dasar/29-Util) 34 | 30. [Zlib](https://github.com/Bahrul-Rozak/mastering-node-js/tree/main/node-js-dasar/30-Zlib) 35 | 31. [Console](https://github.com/Bahrul-Rozak/mastering-node-js/tree/main/node-js-dasar/31-Console) 36 | 32. [Worker Threads](https://github.com/Bahrul-Rozak/mastering-node-js/tree/main/node-js-dasar/32-Worker-Threads) 37 | 33. [Http Client](https://github.com/Bahrul-Rozak/mastering-node-js/tree/main/node-js-dasar/33-Http-Client) 38 | 34. [Http Server](https://github.com/Bahrul-Rozak/mastering-node-js/tree/main/node-js-dasar/34-Http-Server) 39 | 35. [Cluster](https://github.com/Bahrul-Rozak/mastering-node-js/tree/main/node-js-dasar/35-Cluster) 40 | -------------------------------------------------------------------------------- /node-js-npm/01-Pengenalan-NPM/README.md: -------------------------------------------------------------------------------- 1 |2 | Ketika kita membuat aplikasi, aplikasi yang kita deliver kepada client adalah dalam bentuk per project. Dan dalam project tersebut berisi codebase, asset dan masih banyak lagi. Sekilas memang terlihat mudah, namun kita akan mengalami kesulitan, apabila ada beberapa sumber code (source code) yang deprecated. maka kita harus melakukan perbaikan. Bayangkan jika kita menggunakan cara konvensional atau bahasa lainnya manual, maka tentu saja akan merepotkan. Oleh karena itu NPM hadir menjawab permasalahan tersebut. NPM merupakan Node Packet Manager yang digunakan sesuai dengan kepanjangannya yaitu mengatur package. 3 |
4 | 5 |  6 | 7 | ## NPM lebih dari itu! 8 | 9 |10 | Tidak hanya untuk mengatur package, NPM lebih dari itu. NPM juga bisa digunakan untuk melakukan dependency management (Nanti akan kita bahas di chapter lain) yang kita butuhkan dalam project yang kita buat. Kemudian dengan NPM bisa digunakan untuk download dependency, update dan upgrade dependency secara otomatis, tanpa harus kita lakukan secara manual dengan cara download dependency secara manual seperti yang sudah kita diskusikan dibagian awal. 11 |
12 | 13 | ## package.json adalah teman kita! 14 | 15 |16 | 17 | Ketika kita bekerja dengan NPM, maka kita akan akrab dengan satu buah file bernama package.json. NPM akan menyimpan semua konfigurasi project di file bernama package.json. Nah Semua konfigurasi project dan juga dependency kita simpan dalam file package.json yang terdapat di dalam directory project. Selain itu kita juga bisa buat file package.json secara manual atau menggunakan auto generate secara otomatis menggunakan NPM. 18 | 19 |
20 | 21 | ## Menginstall NPM 22 | 23 |24 | Sebenarnya jika kita sudah menginstall Node JS maka secara otomatis node js tersebut sudah terinclude oleh NPM, jadi kita tidak perlu lagi untuk menginstall NPM. Nah untuk memastikannya kita dapat mengexecute perintah 25 | 26 | ``` 27 | npm -v 28 | ``` 29 | 30 |
31 | 32 |  33 | -------------------------------------------------------------------------------- /node-js-npm/01-Pengenalan-NPM/image-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Bahrul-Rozak/mastering-node-js/53e273f3ad4aed1e1977d34357805b0057d71559/node-js-npm/01-Pengenalan-NPM/image-1.png -------------------------------------------------------------------------------- /node-js-npm/01-Pengenalan-NPM/image.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Bahrul-Rozak/mastering-node-js/53e273f3ad4aed1e1977d34357805b0057d71559/node-js-npm/01-Pengenalan-NPM/image.png -------------------------------------------------------------------------------- /node-js-npm/02-Membuat-Project/README.md: -------------------------------------------------------------------------------- 1 |2 | Untuk dapat mengikuti series ini, silahkan anda buat satu buah folder bernama belajar-npm, kemudian letakkan dimanapun sesuka hati Anda. 3 | 4 |  5 | 6 | Kemudian lakukan inisialisasi project tersebut dengan NPM menggunakan perintah npm init. 7 | 8 |  9 | 10 |
11 | -------------------------------------------------------------------------------- /node-js-npm/02-Membuat-Project/image-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Bahrul-Rozak/mastering-node-js/53e273f3ad4aed1e1977d34357805b0057d71559/node-js-npm/02-Membuat-Project/image-1.png -------------------------------------------------------------------------------- /node-js-npm/02-Membuat-Project/image.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Bahrul-Rozak/mastering-node-js/53e273f3ad4aed1e1977d34357805b0057d71559/node-js-npm/02-Membuat-Project/image.png -------------------------------------------------------------------------------- /node-js-npm/03-Project-Configuration/README.md: -------------------------------------------------------------------------------- 1 |2 | Ketika kita jalankan perintah npm init, pada module sebelumnya maka kita akan mendapati inti dari project yaitu konfigurasi, konfigurasi ini tergenerate secara otomatis dari perintah npm init dalam bentuk file package.json terdiri dari author, version dan lain-lain. Untuk sementara anda bisa isi konfigurasi file package.json seperti ini 3 |
4 | 5 |  6 | 7 |8 | Maka seperti inilah isi dari file package.json 9 |
10 | 11 |  12 | -------------------------------------------------------------------------------- /node-js-npm/03-Project-Configuration/image-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Bahrul-Rozak/mastering-node-js/53e273f3ad4aed1e1977d34357805b0057d71559/node-js-npm/03-Project-Configuration/image-1.png -------------------------------------------------------------------------------- /node-js-npm/03-Project-Configuration/image.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Bahrul-Rozak/mastering-node-js/53e273f3ad4aed1e1977d34357805b0057d71559/node-js-npm/03-Project-Configuration/image.png -------------------------------------------------------------------------------- /node-js-npm/04-Menjalankan-Project/README.md: -------------------------------------------------------------------------------- 1 |2 | Untuk menjalankan project, sebenarnya caranya sama seperti kita menjalankan file dengan Node JS Kita bisa gunakan perintah node namaFile. Akan tetapi yang membedakan adalah Node JS sebelum menjalankan file nya, dia akan membaca konfigurasi dari package.json terlebih dahulu 3 |
4 | 5 | ```js 6 | function Sample(name) { 7 | console.log(`Selamat datang ${name}`); 8 | } 9 | 10 | const sample = new Sample("Rozak"); 11 | ``` 12 | 13 |  14 | -------------------------------------------------------------------------------- /node-js-npm/04-Menjalankan-Project/image.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Bahrul-Rozak/mastering-node-js/53e273f3ad4aed1e1977d34357805b0057d71559/node-js-npm/04-Menjalankan-Project/image.png -------------------------------------------------------------------------------- /node-js-npm/05-Project-Type/README.md: -------------------------------------------------------------------------------- 1 |2 | Secara default, saat kita membuat project Node JS, Node JS menggunakan commonjs. Oleh karena itu, ketika kita ingin menggunakan JavaScript Modules, kita harus mengubah file nya menjadi file mjs (.mjs). Namun, kita juga bisa mengubah default project type dari commonjs menjadi js modules, dengan cara mengubah type di package.json. Hal ini sangat direkomendasikan karena sekarang kita pasti akan sering menggunakan js modules dibandingkan commonjs, karena js modules sudah menjadi standard di JavaScript. 3 |
4 | 5 | ```json 6 | // package.json 7 | { 8 | "name": "belajar-npm", 9 | "version": "1.0.0", 10 | "description": "belajar npm", 11 | "main": "index.js", 12 | "scripts": { 13 | "test": "echo \"Error: no test specified\" && exit 1" 14 | }, 15 | "keywords": ["belajar", "npm"], 16 | "author": "bahrul-rozak", 17 | "license": "ISC", 18 | "type": "module" 19 | } 20 | ``` 21 | 22 |23 | Sebagai contoh disini kita akan membuat JS module yang memiliki fungsi untuk melakukan operasi penjumlahan dan pengurangan dan akan kita import fungsi tersebut pada entry point, dalam hal ini adalah main.js 24 |
25 | 26 | ```js 27 | // math.js 28 | const addition = (a, b) => { 29 | return a + b; 30 | }; 31 | 32 | const subtraction = (a, b) => { 33 | return a - b; 34 | }; 35 | 36 | export { addition, subtraction }; 37 | ``` 38 | 39 | ```js 40 | // main.js 41 | import { addition, subtraction } from "./math.js"; 42 | 43 | const additionResult = addition(10, 5); 44 | console.log(`Hasil penjumlahannya adalah`, additionResult); 45 | 46 | const subtractionResult = subtraction(10, 5); 47 | console.log(`Hasil pengurangannya adalah`, subtractionResult); 48 | ``` 49 | 50 |51 | Maka berhasil :D 52 |
53 | 54 |  55 | -------------------------------------------------------------------------------- /node-js-npm/05-Project-Type/image.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Bahrul-Rozak/mastering-node-js/53e273f3ad4aed1e1977d34357805b0057d71559/node-js-npm/05-Project-Type/image.png -------------------------------------------------------------------------------- /node-js-npm/README.md: -------------------------------------------------------------------------------- 1 |2 | Selamat datang di repository kedua dari series mastering Node JS, pada repository kedua ini Anda akan mempelajari beberapa topik menarik seputar NPM, diantaranya 3 |
4 | 5 | 1. [Pengenalan NPM]() 6 | 2. [Membuat Project]() 7 | 3. [Project Configuration]() 8 | 4. [Menjalankan Project]() 9 | 5. [Project Type]() 10 | 6. [Script]() 11 | 7. [Export Module]() 12 | 8. [Depedency Management]() 13 | 9. [Depedency Version]() 14 | 10. [Development Depedency]() 15 | 11. [Install Package]() 16 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "mastering-node", 3 | "version": "1.0.0", 4 | "description": "mastering node js", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "keywords": [ 10 | "mastering", 11 | "node", 12 | "js" 13 | ], 14 | "author": "bahrul-rozak", 15 | "license": "ISC" 16 | } 17 | --------------------------------------------------------------------------------