Kelola Dependency dengan Claude Code: npm, pnpm, Yarn, dan CI
Gunakan Claude Code untuk update npm, pnpm, Yarn dengan lockfile, audit keamanan, PR otomatis, dan verifikasi CI.
Dependency management bukan sekadar mengejar versi terbaru
Project JavaScript dan TypeScript sering bergantung pada ratusan package. Di awal mungkin hanya ada React, Vite, TypeScript, ESLint, dan satu test runner. Setelah beberapa bulan, muncul SDK pembayaran, library UI, plugin build, analytics, date utility, dan banyak transitive dependency yang tidak kita tulis langsung di package.json.
Claude Code berguna untuk pekerjaan ini, tetapi bukan sebagai tombol untuk menjalankan npm install package@latest tanpa konteks. Cara yang lebih aman adalah meminta Claude Code membaca repo terlebih dahulu, mengenali package manager, menjaga lockfile, memisahkan update patch/minor/major, memahami hasil security audit, lalu meninjau PR dari Renovate atau Dependabot dengan bukti CI.
Lockfile adalah file yang menyimpan versi package yang benar-benar dipasang beserta integrity data. npm memakai package-lock.json, pnpm memakai pnpm-lock.yaml, dan Yarn memakai yarn.lock. package.json menjelaskan range yang boleh dipakai; lockfile menjelaskan hasil final. CI seharusnya memverifikasi lockfile itu, bukan memperbaikinya diam-diam.
Untuk desain pipeline yang lebih luas, baca juga Claude Code CI/CD setup. Jika repo kamu memakai workspace, lanjutkan dengan panduan pnpm workspace.
Alur kerja yang aman
Pecah dependency update menjadi lima langkah: inspeksi, rencana, update PR, CI, dan keputusan manusia.
flowchart LR
scan["Inspeksi\noutdated / audit"] --> plan["Rencana\npatch / minor / major"]
plan --> pr["Update PR\nRenovate / Dependabot"]
pr --> ci["CI\ninstall / test / build"]
ci --> review["Review Claude Code\nrisiko dan bukti"]
review --> merge["Keputusan manusia\nmerge atau tolak"]
Prompt pertama sebaiknya melarang perubahan file.
claude -p "
Inspect dependency management in this repository. Do not edit files yet.
Report package manager, lockfile, outdated direct dependencies,
security audit command, scripts that must pass, and risky major updates.
Return file paths and exact commands.
"
Dengan begitu, Claude Code bekerja sebagai reviewer dulu. Ia harus tahu repo ini memakai npm, pnpm, atau Yarn sebelum menyarankan update.
npm, pnpm, dan Yarn
Jangan mencampur package manager dalam satu repo. Setiap tool punya lockfile dan command CI yang berbeda.
| Tool | Lockfile | Install di CI | Cek outdated | Security audit |
|---|---|---|---|---|
| npm | package-lock.json | npm ci | npm outdated | npm audit --audit-level=high |
| pnpm | pnpm-lock.yaml | pnpm install --frozen-lockfile | pnpm outdated --format table | pnpm audit --audit-level high |
| Yarn modern | yarn.lock | yarn install --immutable | yarn up -i atau yarn up <pattern> | yarn npm audit --recursive --severity high |
Dokumentasi npm menjelaskan npm ci untuk environment otomatis dan akan gagal jika package.json tidak cocok dengan lockfile. pnpm memakai --frozen-lockfile, Yarn memakai --immutable. Prinsipnya sama: update PR boleh mengubah lockfile; CI membuktikan lockfile itu bisa dipasang ulang.
Script verifikasi siap pakai
Simpan sebagai scripts/verify-deps.mjs. Script ini mendeteksi npm, pnpm, atau Yarn, menjalankan frozen install, audit high severity, lalu menjalankan typecheck, test, dan build jika script tersebut ada.
#!/usr/bin/env node
import { existsSync, readFileSync } from "node:fs";
import { spawnSync } from "node:child_process";
function readPackageJson() {
return JSON.parse(readFileSync("package.json", "utf8"));
}
function detectPackageManager(pkg) {
const declared = pkg.packageManager || "";
if (declared.startsWith("pnpm@")) return "pnpm";
if (declared.startsWith("yarn@")) return "yarn";
if (declared.startsWith("npm@")) return "npm";
if (existsSync("pnpm-lock.yaml")) return "pnpm";
if (existsSync("yarn.lock")) return "yarn";
if (existsSync("package-lock.json")) return "npm";
throw new Error("No package manager or lockfile detected.");
}
function run(command, args) {
const label = [command, ...args].join(" ");
console.log(`\n$ ${label}`);
const result = spawnSync(command, args, {
stdio: "inherit",
shell: process.platform === "win32",
});
if (result.status !== 0) throw new Error(`Command failed: ${label}`);
}
const pkg = readPackageJson();
const manager = detectPackageManager(pkg);
const installCommands = {
npm: ["npm", ["ci"]],
pnpm: ["pnpm", ["install", "--frozen-lockfile"]],
yarn: ["yarn", ["install", "--immutable"]],
};
const auditCommands = {
npm: ["npm", ["audit", "--audit-level=high"]],
pnpm: ["pnpm", ["audit", "--audit-level", "high"]],
yarn: ["yarn", ["npm", "audit", "--recursive", "--severity", "high"]],
};
const scriptCommands = {
npm: (name) => ["npm", ["run", name]],
pnpm: (name) => ["pnpm", ["run", name]],
yarn: (name) => ["yarn", ["run", name]],
};
run(...installCommands[manager]);
run(...auditCommands[manager]);
for (const name of ["typecheck", "test", "build"]) {
if (pkg.scripts?.[name]) run(...scriptCommands[manager](name));
else console.log(`\n- skip ${name}: script not found`);
}
console.log(`\nDependency verification passed with ${manager}.`);
Tambahkan ke package.json:
{
"scripts": {
"deps:verify": "node scripts/verify-deps.mjs"
}
}
Script ini bukan updater. Ia adalah gerbang verifikasi yang sama untuk Claude Code, Renovate, Dependabot, dan perubahan manual.
Tiga use case praktis
Use case pertama: update patch/minor untuk dev tools. ESLint, Prettier, Vite, Vitest, Playwright, atau TypeScript patch dapat digabung. Major update jangan digabung karena sulit mencari penyebab jika CI gagal.
claude -p "
Prepare a dependency update plan for devDependencies only.
Group patch and minor updates for lint/test/build tools.
Do not update major versions.
Run the dependency verification script after changes.
"
Use case kedua: vulnerability audit. Jangan langsung menjalankan audit fix --force. Minta Claude Code membaca output JSON dan membedakan direct dependency, transitive dependency, versi terpasang, versi fixed, apakah lockfile-only cukup, dan apakah major update dibutuhkan.
npm audit --json
pnpm audit --json
yarn npm audit --recursive --json
Use case ketiga: workspace atau monorepo. Dependency management juga berarti menjaga boundary internal. packages/ui tidak boleh import dari apps/web, dan dependency internal sebaiknya memakai workspace:*.
claude -p "
Inspect this workspace before dependency updates.
Find packages/* importing from apps/*, internal dependencies not using workspace:*,
duplicated versions of react/typescript/eslint, and scripts that should use filters.
Do not edit files.
"
Renovate dan Dependabot
Renovate cocok jika kamu butuh aturan detail. Config ini membiarkan major update untuk review manusia, tetapi mengizinkan automerge untuk devDependencies patch/minor setelah CI hijau.
{
"$schema": "https://docs.renovatebot.com/renovate-schema.json",
"extends": ["config:recommended"],
"dependencyDashboard": true,
"lockFileMaintenance": {
"enabled": true,
"schedule": ["before 5am on monday"],
"automerge": true
},
"packageRules": [
{
"matchManagers": ["npm"],
"matchDepTypes": ["devDependencies"],
"matchUpdateTypes": ["patch", "minor"],
"automerge": true
},
{
"matchUpdateTypes": ["major"],
"labels": ["dependency", "major-update"],
"automerge": false
}
]
}
Dependabot cukup untuk banyak repo GitHub.
version: 2
updates:
- package-ecosystem: "npm"
directory: "/"
schedule:
interval: "weekly"
open-pull-requests-limit: 5
groups:
dev-tooling:
dependency-type: "development"
update-types:
- "minor"
- "patch"
- package-ecosystem: "github-actions"
directory: "/"
schedule:
interval: "monthly"
Masukkan GitHub Actions juga. Jika actions/setup-node atau actions/checkout sudah tua, workflow dependency update ikut menua.
CI verification
name: dependency-check
on:
pull_request:
push:
branches: [main]
jobs:
verify-dependencies:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 22
- run: corepack enable
- run: node scripts/verify-deps.mjs
Tambahkan cache setelah alur dasar stabil. Untuk debugging dependency, cache lama bisa menutupi penyebab sebenarnya.
Kesalahan yang sering terjadi
Pertama, memakai npm install di CI. Gunakan npm ci. Kedua, memakai audit fix --force sebelum membaca laporan. Ketiga, menggabungkan banyak major update dalam satu PR. Keempat, hanya melihat package.json dan mengabaikan diff lockfile. Kelima, menyamakan risiko devDependency dan dependency produksi. Keenam, pada content site, update MDX, CSS, atau build tool bisa merusak code block, iklan, atau CTA. Untuk itu, baca verification receipt workflow.
Prompt review PR
claude -p "
Review this dependency update PR.
Focus on package.json, lockfile, CI config, and test output.
Report updated packages, direct vs transitive changes, major updates,
peer dependency changes, commands that passed or failed, and manual checks.
Do not change files unless there is a blocking issue.
"
Review yang baik mencatat bukti: apa yang berubah, command apa yang lulus, apa yang gagal, dan bagian mana yang perlu dicek manusia.
Referensi dan langkah berikutnya
Gunakan referensi resmi: npm ci, npm audit, pnpm install, pnpm audit, yarn install, yarn npm audit, Claude Code CLI, Dependabot options, dan Renovate automerge.
Untuk menerapkannya dalam tim, lanjutkan ke Claude Code security audit dan CLAUDE.md best practices. Jika butuh aturan untuk repo nyata, halaman training dan konsultasi adalah langkah berikutnya.
Hasil saat dicoba
Perubahan paling berguna adalah memisahkan update generation dan verification. Claude Code bisa membuat rencana dan review, tetapi deps:verify dan diff lockfile yang menentukan apakah PR siap. Mengeluarkan major update dari automerge juga membuat kegagalan jauh lebih mudah ditelusuri.
PDF gratis: cheatsheet Claude Code
Masukkan email dan unduh satu halaman berisi command, kebiasaan review, dan workflow aman.
Kami menjaga datamu dan tidak mengirim spam.
Tentang penulis
Masa
Engineer yang berfokus pada workflow Claude Code praktis dan adopsi tim.
Artikel terkait
Permission safety ladder Claude Code: perluas akses tanpa kehilangan kontrol
Naik dari read-only ke edit terbatas, command bukti, dan cek deploy dengan kontrol yang jelas.
Claude Code Small PR Proof Pack: perubahan kecil yang mudah direview
Paket bukti untuk PR Claude Code: diff, check, URL publik, jalur CTA, dan rollback.
Review gate Claude Code sebelum commit: diff, test, URL publik, dan CTA
Cara memakai Claude Code sebelum commit: diff scope, build, URL publik, link Gumroad, CTA konsultasi, missing test, dan file tidak terkait.