Masih Bingung Alpha, Beta, RC? Ini Workflow Release yang Benar

Agung Dirgantara
By -
0

Membuat package JavaScript lalu meng-upload-nya ke NPM memang mudah, namun membuat workflow release yang aman, profesional, mudah dipahami user, dan tidak merusak production environment, itu cerita yang berbeda.

Banyak developer baru mulai sadar pentingnya:

  • semantic versioning,
  • dist-tag,
  • alpha/beta/rc release,
  • dan strategi publish,

setelah mengalami masalah seperti:

  • versi beta terinstall di production,
  • breaking changes tanpa warning,
  • dependency conflict,
  • atau user bingung harus install versi yang mana.

Di artikel ini kita akan membahas:

  • apa itu semantic versioning,
  • perbedaan alpha, beta, rc, dan stable,
  • cara kerja dist-tag di NPM,
  • apa itu package scope,
  • perbedaan package scoped vs unscoped,
  • serta workflow release yang biasa digunakan maintainer open-source professional.

Apa Itu Package NPM?

Package NPM adalah modul JavaScript/TypeScript yang dipublish ke registry NPM agar bisa digunakan project lain.

Contoh package tanpa scope:

```text id="3cqv4z" express lodash axios


Contoh package dengan scope:

```text id="qj3r8x"
@nestjs/common
@prisma/client
@myscope/mypackage

Apa Itu Scope di NPM?

Scope adalah namespace untuk package.

Formatnya:

```text id="j9x5ow" @scope/package-name


Contoh:

```text id="2s0zfh"
@myscope/mypackage

Di sini:

  • myscope → nama organisasi/user
  • mypackage → nama package

Kenapa Menggunakan Scope Itu Penting?

Scope membantu:

  • menghindari bentrok nama package,
  • mengelompokkan package dalam satu organisasi,
  • membuat branding package lebih profesional.

Misalnya:

```text id="4j1t0k" storage


Nama ini sangat generic dan mungkin sudah dipakai.

Dengan scope:

```text id="u4k7ye"
@myscope/storage

nama menjadi unik.


Scoped vs Unscoped Package

Unscoped Package

Contoh:

```text id="5j2k6q" mypackage


### Kelebihan

* nama lebih pendek
* lebih simpel

### Kekurangan

* rawan bentrok nama
* sulit branding
* banyak nama populer sudah dipakai

---

## Scoped Package

Contoh:

```text id="q1n8wx"
@myscope/mypackage

Kelebihan

  • namespace unik
  • lebih profesional
  • cocok untuk organisasi/team
  • ideal untuk ecosystem package

Kekurangan

  • penulisan sedikit lebih panjang

Apa Itu Semantic Versioning?

Mayoritas package modern menggunakan format:

```text id="2f5m7z" MAJOR.MINOR.PATCH


Contoh:

```text id="6r8w2q"
1.4.2

Artinya:

  • 1 → MAJOR → breaking changes
  • 4 → MINOR → fitur baru tanpa breaking
  • 2 → PATCH → bugfix kecil

Lalu Apa Itu Alpha, Beta, dan RC?

Sebelum package dianggap stable, biasanya ada beberapa fase release.


1. Alpha Release

Contoh:

```text id="m2p9kq" 1.0.0-alpha.0


## Karakteristik

* masih experimental
* API bisa berubah drastis
* banyak bug mungkin muncul
* belum cocok untuk production

Biasanya digunakan:

* internal testing
* proof of concept
* early experimentation

---

## Publish Alpha

```bash id="1r7m5x"
npm publish --tag alpha --access public

Install Alpha

```bash id="4k6x1v" npm install @myscope/mypackage@alpha


---

# 2. Beta Release

Contoh:

```text id="1v4m8x"
1.0.0-beta.0

Karakteristik

  • fitur utama sudah tersedia
  • API mulai stabil
  • testing publik dimulai
  • masih mungkin ada bug

Biasanya beta digunakan untuk:

  • mendapatkan feedback community
  • compatibility testing
  • validasi API design

Publish Beta

```bash id="0x9w3j" npm publish --tag beta --access public


---

## Install Beta

```bash id="2m8k1w"
npm install @myscope/mypackage@beta

3. RC (Release Candidate)

Contoh:

```text id="9j4m6v" 1.0.0-rc.0


## Karakteristik

* hampir final
* API sudah stabil
* fokus bug fixing kecil
* siap menjadi stable release

Jika tidak ada masalah besar, RC biasanya akan dipromosikan menjadi stable version.

---

## Publish RC

```bash id="4q8w2x"
npm publish --tag rc --access public

Install RC

```bash id="5w1m9x" npm install @myscope/mypackage@rc


---

# 4. Stable Release (`latest`)

Contoh:

```text id="6x2m4p"
1.0.0

Ini adalah versi production-ready.

Saat user menjalankan:

```bash id="5m1q8r" npm install @myscope/mypackage


NPM otomatis mengambil versi dengan tag:

```text id="9v2x4m"
latest

Apa Itu Dist-Tag di NPM?

Dist-tag adalah label yang menunjuk ke versi tertentu di registry NPM.

Contoh:

```json id="6k4w1x" { "latest": "1.0.0", "beta": "1.1.0-beta.2", "rc": "1.1.0-rc.0" }


Artinya:

* install biasa → mendapatkan stable release
* install `@beta` → mendapatkan beta terbaru
* install `@rc` → mendapatkan RC terbaru

---

# Kenapa Dist-Tag Sangat Penting?

Tanpa dist-tag, user production bisa tidak sengaja menginstall versi unstable.

Contoh kesalahan umum:

```bash id="3m7v1x"
npm publish

Padahal versi package:

```text id="8q1m6p" 1.0.0-beta.0


Karena default publish menggunakan tag `latest`,
maka semua user baru akan mendapatkan versi beta.

Ini adalah kesalahan yang cukup sering terjadi pada maintainer package baru.

---

# Studi Kasus Workflow Release

Misalkan kita sedang membangun package:

```text id="0v8m2q"
@myscope/mypackage

Package ini masih dalam tahap development.


Tahap 1 — Alpha

Versi awal:

```text id="4x2m8q" 0.1.0-alpha.0


Publish:

```bash id="9m2w4x"
npm publish --tag alpha --access public

Tujuan:

  • testing internal
  • eksperimen API
  • validasi architecture

Tahap 2 — Beta

Setelah fitur utama selesai:

```text id="5w8m2v" 0.2.0-beta.0


Publish:

```bash id="6m4q1x"
npm publish --tag beta --access public

Community mulai mencoba package:

```bash id="1x5m8q" npm install @myscope/mypackage@beta


Mulai muncul feedback:

* bug tertentu
* edge case
* compatibility issue
* API naming improvement

---

# Tahap 3 — RC

Semua fitur utama dianggap selesai.

Versi:

```text id="2m6q8w"
1.0.0-rc.0

Publish:

```bash id="8q2m5x" npm publish --tag rc --access public


Fokus utama:

* bug fixing
* dokumentasi
* performance
* backward compatibility

---

# Tahap 4 — Stable

Setelah RC dianggap aman:

```text id="6m1w8q"
1.0.0

Publish:

```bash id="7q5m2x" npm publish --access public


atau:

```bash id="3x9m2q"
npm publish --tag latest --access public

Sekarang user biasa akan mendapatkan stable release secara default.


Cara Mengecek Dist-Tag Package

Gunakan command berikut:

```bash id="8m2q4x" npm view @myscope/mypackage dist-tags


Contoh output:

```json id="4q8m2x"
{
  "latest": "1.0.0",
  "beta": "1.1.0-beta.2",
  "rc": "1.1.0-rc.0"
}

Cara Mengubah Tag latest

Kadang kita ingin mempromosikan versi tertentu tanpa publish ulang.

Contoh:

```bash id="9x2m4q" npm dist-tag add @myscope/mypackage@1.0.0 latest


---

# Workflow Release yang Direkomendasikan

## Alpha Phase

```bash id="7m2q5x"
npm version prerelease --preid=alpha
npm publish --tag alpha

Beta Phase

```bash id="5x8m2q" npm version prerelease --preid=beta npm publish --tag beta


---

## RC Phase

```bash id="2q4m8x"
npm version prerelease --preid=rc
npm publish --tag rc

Stable Release

```bash id="4m8q2x" npm version major npm publish


---

# Kesalahan Umum Saat Publish Package

## 1. Beta Tidak Sengaja Menjadi `latest`

Penyebab:

```bash id="8m4q2x"
npm publish

tanpa --tag beta


2. Tidak Memahami Peer Dependency

Dependency optional seperti:

  • database driver,
  • cloud SDK,
  • storage adapter,

sering menyebabkan runtime error jika tidak didokumentasikan dengan benar.


3. Semua Versi Langsung Stable

Tanpa:

  • alpha,
  • beta,
  • atau RC,

developer kehilangan kesempatan mendapatkan feedback sebelum production release.


Penutup

Merilis package ke NPM bukan hanya soal menjalankan:

bash id="6q2m8x" npm publish

Versioning dan release workflow adalah bagian penting dari software engineering modern.

Dengan memahami:

  • semantic versioning,
  • dist-tag,
  • alpha/beta/rc release,
  • dan strategi publish,

kamu bisa membuat package yang:

  • lebih stabil,
  • lebih aman digunakan,
  • dan terasa jauh lebih profesional.

Baik kamu membuat:

  • utility kecil,
  • NestJS module,
  • React library,
  • atau ecosystem package besar,

workflow release yang baik akan membantu menjaga kualitas package dalam jangka panjang.

Posting Komentar

0Komentar

Posting Komentar (0)