packmate
Version:
Your smart and friendly interactive assistant for dependency updates, security advisories, and cleanup.
278 lines (226 loc) โข 8.75 kB
Markdown
<h1 align="center">
<br>
<img src="https://github.com/ljlm0402/packmate/raw/images/logo.png" alt="Project Logo" width="600" />
<br>
<br>
PackMate
<br>
</h1>
<h4 align="center">๐ค ์ค๋งํธํ๊ณ ์น๊ทผํ ์์กด์ฑ ์
๋ฐ์ดํธ ๋ฐ ์ ๋ฆฌ CLI ๋๊ตฌ</h4>
<p align ="center">
<a href="https://nodei.co/npm/packmate" target="_blank">
<img src="https://nodei.co/npm/packmate.png" alt="npm Info" />
</a>
</p>
<p align="center">
<a href="http://npm.im/packmate" target="_blank">
<img src="https://img.shields.io/npm/v/packmate.svg" alt="npm Version" />
</a>
<a href="http://npm.im/packmate" target="_blank">
<img src="https://img.shields.io/github/v/release/ljlm0402/packmate" alt="npm Release Version" />
</a>
<a href="http://npm.im/packmate" target="_blank">
<img src="https://img.shields.io/npm/dm/packmate.svg" alt="npm Downloads" />
</a>
<a href="http://npm.im/packmate" target="_blank">
<img src="https://img.shields.io/npm/l/packmate.svg" alt="npm Package License" />
</a>
</p>
<p align="center">
<a href="https://github.com/ljlm0402/packmate/stargazers" target="_blank">
<img src="https://img.shields.io/github/stars/ljlm0402/packmate" alt="github Stars" />
</a>
<a href="https://github.com/ljlm0402/packmate/network/members" target="_blank">
<img src="https://img.shields.io/github/forks/ljlm0402/packmate" alt="github Forks" />
</a>
<a href="https://github.com/ljlm0402/packmate/stargazers" target="_blank">
<img src="https://img.shields.io/github/contributors/ljlm0402/packmate" alt="github Contributors" />
</a>
<a href="https://github.com/ljlm0402/packmate/issues" target="_blank">
<img src="https://img.shields.io/github/issues/ljlm0402/packmate" alt="github Issues" />
</a>
</p>
<p align="center">
<strong><a href="./README.md">English</a> ยท ํ๊ตญ์ด</strong>
</p>
---
Packmate๋ Node.js ํ๋ก์ ํธ ์์กด์ฑ์ ๊ด๋ฆฌ, ์
๋ฐ์ดํธ ๋ฐ ์ ๋ฆฌํ๋ ํ๋์ ์ธ CLI ๋๊ตฌ์
๋๋ค.
**npm**, **pnpm**, **yarn**์ ์ง์ํ๋ฉฐ, ์ง๊ด์ ์ธ ์ธํฐ๋ํฐ๋ธ UI์ ๊ฐ๋ ฅํ ์ฑ๋ฅ ์ต์ ํ๋ก ํ๋ก์ ํธ๋ฅผ ๋ ๋น ๋ฅด๊ณ ์์ ํ๊ฒ ์ต์ ์ํ๋ก ์ ์งํ ์ ์์ต๋๋ค.
## ๐ค ์ Packmate์ธ๊ฐ์?
- **โก ์ฑ๋ฅ**: ์บ์์ ๋ณ๋ ฌ ์ฒ๋ฆฌ๋ฅผ ํ์ฉํด ๋ฐ๋ณต ์คํ ์๋๋ฅผ ๊ฐ์
- **๐ฏ ์ ํ์ฑ**: ๊ฐ๋ฐ ๋๊ตฌ ์ธํ
๋ฆฌ์ ์ค์ ๊ต์ฐจ ๊ฒ์ฆ ๊ธฐ๋ฐ์ ๋ฏธ์ฌ์ฉ ํจํค์ง ํ์ง
- **๐ก๏ธ ์์ ์ฑ**: ํจํค์ง ๋งค๋์ ์ค๋งํธ ํด๋ฐฑ, ๋ฏธ์ฌ์ฉ ํจํค์ง๋ ์
๋ฐ์ดํธ ์ ์ธ
- **๐จ ๋ช
๋ฃ์ฑ**: ๊ทธ๋ฃน๋ณ UI ์ธ์
(Patch/Minor/Major) ๋ฐ ์์ ์ฝ๋ฉ ์
๋ฐ์ดํธ
- **๐ง ์ ์ฐ์ฑ**: `packmate.config.json`์ ํตํ ์์ ํ ์ค์ ์ง์
- **๐ ํ๋์ **: ๊น๋ํ๊ณ ์ ๋ฌธ์ ์ธ ์ธํฐํ์ด์ค์ ์ง๊ด์ ์ธ ์ํฌํ๋ก์ฐ
## ๐ ์ฃผ์ ๊ธฐ๋ฅ
### ์ฑ๋ฅ ๋ฐ ์ต์ ํ
- **3๋จ๊ณ ์บ์ฑ ์์คํ
**: ๋ฉ๋ชจ๋ฆฌ โ ๋์คํฌ (1์๊ฐ TTL) โ ๋คํธ์ํฌ
- ์ฒซ ์คํ: ํ์ค ์๋
- ๋ ๋ฒ์งธ ์คํ: ์บ์๋ ๋ ์ง์คํธ๋ฆฌ ๋ฐ์ดํฐ๋ก ๋ ๋น ๋ฅด๊ฒ ๋์
- **๋ณ๋ ฌ ์ฒ๋ฆฌ**: ํ์ผ ์ค์บ์ ์ํ ๋ฉํฐ์ฝ์ด CPU ํ์ฉ (**2-4๋ฐฐ ๋น ๋ฆ**)
- **์ ์ํ ๋์์ฑ**: CPU ์ฝ์ด ๊ธฐ๋ฐ ๋์ ์์ฒญ ์ ํ (8-16 ๋์ ์์ฒญ)
### ์ค๋งํธ ํ์ง
- **ํฅ์๋ ๋ฏธ์ฌ์ฉ ํจํค์ง ํ์ง**:
- ๋์ import ํ์ง: `import('module')`
- ์กฐ๊ฑด๋ถ require ํ์ง: `try-catch`, `if` ๋ธ๋ก
- DevDependencies ์ธํ
๋ฆฌ์ ์ค: ๋น๋ ๋๊ตฌ, ๋ฆฐํฐ, ํ์
์ ์ ์ธ์
- ๊ต์ฐจ ๊ฒ์ฆ: precinct + depcheck๋ก ๋์ ์ ๋ขฐ๋
- **์
๋ฐ์ดํธ ํ์ง**:
- Patch/Minor/Major๋ณ ๊ทธ๋ฃนํ ๋ฐ ์์ ์ฝ๋ฉ
- ๋ฏธ์ฌ์ฉ ํจํค์ง๋ฅผ ์
๋ฐ์ดํธ๋ณด๋ค ๋จผ์ ํ๋จ
- ๋ณด์ ๊ถ๊ณ ๊ฐ ์๋ direct ์์กด์ฑ ์
๋ฐ์ดํธ ํ๋ณด ํ์
- Semver ๊ธฐ๋ฐ ๋ฒ์ ๋น๊ต
- **์ค์น ํ์ง**: ์ ์ธ๋์์ง๋ง ์ค์น๋์ง ์์ ํจํค์ง ์ฐพ๊ธฐ
### ๋ฐ์ด๋ UI/UX
- **๊ทธ๋ฃน๋ณ UI ์ธ์
**:
- ๐น **Patch ์
๋ฐ์ดํธ** (๋
น์): ๋ฒ๊ทธ ์์ , ์์ ํ๊ฒ ์
๋ฐ์ดํธ
- ๐ธ **Minor ์
๋ฐ์ดํธ** (๋
ธ๋์): ์๋ก์ด ๊ธฐ๋ฅ, ํ์ ํธํ์ฑ ์ ์ง
- ๐ถ **Major ์
๋ฐ์ดํธ** (๋นจ๊ฐ์): ์ฃผ์ ๋ณ๊ฒฝ์ฌํญ, ๊ฒํ ํ์
- ๐๏ธ **๋ฏธ์ฌ์ฉ ํจํค์ง**: ๋์/์ค๊ฐ ์ ๋ขฐ๋ ๋ ๋ฒจ
- ๐ฅ **๋ฏธ์ค์น ํจํค์ง**: ๋๋ฝ๋ ์ ์ธ ์์กด์ฑ
- ๐ก๏ธ **๋ณด์ ๊ถ๊ณ **: direct/transitive ๊ถ๊ณ ๊ตฌ๋ถ
- **์์ ๊ธฐ๋ฅ**:
- Major ์
๋ฐ์ดํธ์ ๋ํ ํ์ธ ํ๋กฌํํธ
- ์ฃผ์ ๋ณ๊ฒฝ์ฌํญ ๊ฒฝ๊ณ
- ๋ช
ํํ ์์
์์ฝ
- **์๊ฐ์ ๊ฐ์ **:
- ์์ ์ฝ๋ฉ๋ ๋ฒ์ ๋ณ๊ฒฝ
- ๋ถ์ ์ค ๋ฉ์ถ ๊ฒ์ฒ๋ผ ๋ณด์ด์ง ์๋๋ก ์งํ ์ํ ํ์
- ๊ฐ๊ฒฐํ ๋ถ์ ์์ฝ๊ณผ ์ต์ข
์์
๊ฒํ
### ์ค์ ๋ฐ ์ ์ฐ์ฑ
- **์ค๋งํธ ํจํค์ง ๋งค๋์ ํ์ง**:
- ๋ฝ ํ์ผ์์ ์๋ ํ์ง (pnpm-lock.yaml, yarn.lock, package-lock.json)
- ์ค์น ์ํ ํ์ธ
- ์ฌ์ฉ ๊ฐ๋ฅํ ๋งค๋์ ๋ก ์๋ ํด๋ฐฑ ๋ฐ ์ ์ฉํ ํ ์ ๊ณต
- **์ค์ ์ต์
**:
- ์ปค์คํ
๋ฌด์ ํจํด (glob ์ง์)
- ๋ถ์ ๋ชจ๋ (conservative/moderate/aggressive)
- UI ์ปค์คํฐ๋ง์ด์ง (๊ธฐ๋ณธ ์ ํ, ์์ ์คํด)
- ์บ์ ์ค์ (๊ธฐ๊ฐ, ์์น)
## ๐พ ์ค์น
```sh
npm install -g packmate
# ๋๋
pnpm add -g packmate
# ๋๋
yarn global add packmate
```
์ฆ์ ์คํ:
```sh
npx packmate
```
## ๐ ์ฌ์ฉ๋ฒ
ํ๋ก์ ํธ ๋ฃจํธ ๋๋ ํ ๋ฆฌ์์ ์คํํ์ธ์:
```sh
packmate
```
**์ผ๋ฐ์ ์ธ ์ํฌํ๋ก์ฐ ์์:**
```sh
โ ๐ฆ Packmate: Dependency Updates & Cleanup
โ
โ Multiple lock files found. Which package manager should PackMate use?
โ pnpm
Analysis Summary
Category Count Details
Updates 7 Available package updates
Unused 1 Possible cleanup candidates
Missing 0 Declared but not installed
Current 9 Already up-to-date
Security 2 advisories 1 direct, 1 transitive
๐๏ธ Unused Packages (High Confidence: 1)
Likely safe to remove
โ
โ Select packages to remove:
โ none
Security Risk: High (1)
Update recommended
โ
โ Select security updates:
โ lodash 2 advisories
๐ถ Major Updates (3)
โ ๏ธ Breaking changes possible - Review carefully
โ
โ Select major updates (caution required):
โ none
Review Actions
Security updates (1)
- lodash (high)
Updates (2)
- fs-extra โ 11.3.5
- js-yaml โ 4.1.1
โ
โ Proceed with 3 action(s)?
โ No
โ
No changes were made.
โ
โ Packmate complete! ๐
```
## โ๏ธ ์๊ตฌ์ฌํญ
- Node.js v18 ์ด์
- npm, yarn, pnpm ์ง์
- Mac, Linux, Windows์์ ์๋
## ๐ CLI ์ต์
์ถ๊ฐ ์ต์
์์ด ํ๋ก์ ํธ ๋๋ ํ ๋ฆฌ์์ packmate๋ง ์คํํ๋ฉด ๋ฉ๋๋ค.
๋ชจ๋ ์ ํ(์
๋ฐ์ดํธ, ์ ๊ฑฐ, ์ค์น)์ ์ธํฐ๋ํฐ๋ธ๋ก ์ด๋ฃจ์ด์ง๋๋ค.
## โ๏ธ ์ค์
Packmate๋ `packmate.config.json` ๋๋ `package.json`์ `packmate` ํ๋๋ฅผ ํตํด ์ค์ ์ ์ง์ํฉ๋๋ค.
### `packmate.config.json` ์์:
```json
{
"ignorePatterns": ["@types/*", "eslint-*"],
"analysisMode": {
"unused": "moderate",
"devDeps": true
},
"ui": {
"groupSessions": true,
"colorScheme": "auto",
"defaultChecked": {
"updateAvailable": true,
"unused": false,
"notInstalled": true,
"latest": false
}
},
"detection": {
"dynamicImport": true,
"conditionalRequire": true,
"ignoreUnused": [
"eslint",
"prettier",
"jest",
"webpack"
]
}
}
```
### ์ค์ ์ต์
:
- **ignorePatterns**: ํจํค์ง ๋ฌด์๋ฅผ ์ํ glob ํจํด ๋ฐฐ์ด (์: `["@types/*"]`)
- **analysisMode.unused**: ํ์ง ๋ชจ๋ - `"conservative"` | `"moderate"` | `"aggressive"`
- **analysisMode.devDeps**: devDependencies๋ฅผ ๋ณ๋๋ก ๋ถ์ํ ์ง ์ฌ๋ถ
- **ui.groupSessions**: ๊ทธ๋ฃน๋ณ UI ์ธ์
ํ์ฑํ (Patch/Minor/Major)
- **ui.defaultChecked**: ๊ฐ ํจํค์ง ์ ํ์ ๊ธฐ๋ณธ ์ ํ ์ํ
- **detection.dynamicImport**: ๋์ import ํ์ง ํ์ฑํ
- **detection.conditionalRequire**: ์กฐ๊ฑด๋ถ require ํ์ง ํ์ฑํ
- **detection.ignoreUnused**: ๋ฏธ์ฌ์ฉ ํ์ง์์ ํญ์ ๋ฌด์ํ ํจํค์ง ๋ชฉ๋ก
### ์บ์ ๊ด๋ฆฌ
Packmate๋ ๋ ๋น ๋ฅธ ํ์ ์คํ์ ์ํด ๋ ์ง์คํธ๋ฆฌ ์๋ต์ ์๋์ผ๋ก ์บ์ํฉ๋๋ค. ํ์ํ ๊ฒฝ์ฐ ์บ์๋ฅผ ์ง์ธ ์ ์์ต๋๋ค:
```bash
# Windows
del /q %TEMP%\packmate-cache\*
# Linux/Mac
rm -rf /tmp/packmate-cache/*
```
์บ์ ์์น:
- Windows: `C:\Users\<user>\AppData\Local\Temp\packmate-cache`
- Linux/Mac: `/tmp/packmate-cache`
## ๐ค ๊ธฐ์ฌํ๊ธฐ
๊ธฐ์ฌ๋ ์ธ์ ๋ ํ์ํฉ๋๋ค! ์ด์๋ฅผ ์ด๊ฑฐ๋ ํ ๋ฆฌํ์คํธ๋ฅผ ์ ์ถํด ์ฃผ์ธ์.
## ๐ณ ๋ผ์ด์ ์ค
[MIT](LICENSE)
---
<p align="center">
Made with โค๏ธ by <a href="https://github.com/ljlm0402">AGUMON</a> ๐ฆ
</p>