# Mengatasi pnpm install yang Gagal Berulang Karena Jaringan Tidak Stabil

Saat development modern menggunakan React, Next.js, Express, NestJS, atau monorepo besar, proses:

```bash
pnpm install
```

bisa menjadi sangat menyebalkan ketika jaringan internet tidak stabil.

Gejala yang umum terjadi:

*   install berhenti di tengah jalan
    
*   package download mengulang terus
    
*   timeout
    
*   `ECONNRESET`
    
*   `ERR_SOCKET_TIMEOUT`
    
*   stuck pada resolving/fetching
    
*   download package besar sangat lama
    
*   install berjalan lalu rollback lagi
    

Masalah ini cukup sering terjadi di:

*   WiFi ISP yang routing internasionalnya buruk
    
*   hotspot mobile
    
*   jaringan dengan packet loss tinggi
    
*   koneksi yang sering reconnect
    
*   VPS dengan limit koneksi
    

* * *

# Kenapa `pnpm` Terlihat Lebih Sensitif?

Sebenarnya bukan karena `pnpm` jelek.

Justru `pnpm`:

*   lebih cepat
    
*   lebih hemat storage
    
*   lebih efisien dibanding npm
    

Tetapi:

*   `pnpm` sangat agresif dalam parallel download
    
*   menggunakan symlink store
    
*   melakukan banyak request metadata
    

Pada jaringan buruk, hal ini membuat:

*   koneksi mudah timeout
    
*   retry terjadi terus menerus
    
*   install terlihat “looping”
    

* * *

# Kesalahan yang Sering Dilakukan

Banyak developer mencoba:

```bash
pnpm install --child-concurrency=1
```

Tetapi download tetap banyak.

Karena:

| Parameter | Fungsi |
| --- | --- |
| `child-concurrency` | membatasi proses build/postinstall |
| `network-concurrency` | membatasi download package |

Jadi:

*   `child-concurrency` ≠ download concurrency
    

* * *

# Solusi yang Benar

## 1\. Batasi Parallel Download

Gunakan:

```bash
pnpm install --network-concurrency=1
```

atau:

```bash
pnpm install --network-concurrency=2
```

Ini adalah solusi paling penting.

Karena:

*   semakin banyak koneksi paralel
    
*   semakin mudah jaringan buruk mengalami packet loss dan timeout
    

Untuk koneksi tidak stabil:

*   concurrency kecil justru lebih cepat selesai
    

* * *

# 2\. Perbesar Retry dan Timeout

Default timeout kadang terlalu pendek untuk jaringan buruk.

Gunakan:

```bash
pnpm install \
  --network-concurrency=1 \
  --fetch-retries=20 \
  --fetch-timeout=600000
```

Penjelasan:

| Parameter | Fungsi |
| --- | --- |
| `fetch-retries` | jumlah retry download |
| `fetch-timeout` | batas timeout download |
| `network-concurrency` | jumlah koneksi download bersamaan |

* * *

# 3\. Gunakan `prefer-offline`

```bash
pnpm install --prefer-offline
```

Artinya:

*   pnpm akan lebih mengutamakan cache lokal
    
*   mengurangi request internet
    

Sangat membantu jika:

*   package pernah terdownload sebelumnya
    

* * *

# 4\. Gunakan Mode Full Offline

Jika dependency sudah pernah terdownload:

```bash
pnpm install --offline
```

Keuntungan:

*   tidak ada download ulang
    
*   install sangat cepat
    
*   tidak tergantung internet
    

* * *

# 5\. Gunakan `pnpm fetch`

Ini adalah fitur yang sering tidak diketahui developer.

## Download dependency terlebih dahulu

Saat internet bagus:

```bash
pnpm fetch
```

Ini hanya:

*   download package ke store
    
*   tanpa install project
    

Nanti saat internet buruk:

```bash
pnpm install --offline
```

Strategi ini sangat efektif untuk:

*   monorepo besar
    
*   CI/CD
    
*   project enterprise
    
*   koneksi tidak stabil
    

* * *

# 6\. Ganti Registry NPM

Kadang masalah bukan internet lokal, tetapi routing ke registry npm.

Coba gunakan mirror:

```bash
pnpm config set registry https://registry.npmmirror.com
```

Atau kembali ke official:

```bash
pnpm config set registry https://registry.npmjs.org
```

Tes koneksi:

```bash
pnpm ping
```

* * *

# 7\. Gunakan DNS yang Lebih Stabil

Kadang DNS ISP bermasalah.

Gunakan:

## Cloudflare

```text
1.1.1.1
1.0.0.1
```

## Google

```text
8.8.8.8
8.8.4.4
```

* * *

# 8\. Masalah IPv6

Beberapa ISP memiliki routing IPv6 buruk.

Akibatnya:

*   request npm timeout
    
*   koneksi reset
    
*   download gagal acak
    

Coba paksa IPv4:

## Linux / macOS

```bash
export NODE_OPTIONS="--dns-result-order=ipv4first"
```

## Windows

```powershell
setx NODE_OPTIONS "--dns-result-order=ipv4first"
```

* * *

# 9\. Native Module Sering Jadi Penyebab

Kadang gagal bukan download package, tetapi build native module.

Contoh:

*   `sharp`
    
*   `prisma`
    
*   `esbuild`
    
*   `node-gyp`
    
*   `better-sqlite3`
    

Coba:

```bash
pnpm install --ignore-scripts
```

Lalu:

```bash
pnpm rebuild
```

* * *

# 10\. Solusi Professional: Local Registry Cache

Untuk team atau project besar, gunakan:

[Verdaccio](https://verdaccio.org?utm_source=chatgpt.com)

Verdaccio adalah:

*   local npm registry
    
*   cache package internal
    
*   proxy npm
    

Keuntungan:

*   dependency hanya download sekali
    
*   install berikutnya lokal
    
*   sangat cepat
    
*   hemat bandwidth
    
*   stabil untuk kantor/tim
    

* * *

# Konfigurasi yang Direkomendasikan

## Untuk Jaringan Tidak Stabil

```bash
pnpm config set network-concurrency 1
pnpm config set fetch-retries 20
pnpm config set fetch-timeout 600000
```

Lalu install:

```bash
pnpm install --prefer-offline
```

* * *

# Kesimpulan

Masalah `pnpm install` berulang bukan selalu karena:

*   package rusak
    
*   pnpm bermasalah
    
*   project error
    

Sering kali penyebab utamanya:

*   jaringan tidak stabil
    
*   terlalu banyak parallel connection
    
*   DNS/IPv6 bermasalah
    
*   registry timeout
    

Dengan mengurangi `network-concurrency`, memperbesar retry, dan memanfaatkan cache offline, proses install biasanya menjadi jauh lebih stabil bahkan pada koneksi internet yang buruk.
