dwkim 0.0.21 → 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +11 -305
- package/dist/index.d.mts +0 -4
- package/dist/index.d.ts +0 -4
- package/dist/index.js +1593 -22
- package/dist/index.mjs +1725 -13
- package/package.json +3 -1
package/README.md
CHANGED
|
@@ -1,315 +1,21 @@
|
|
|
1
|
-
#
|
|
1
|
+
# dwkim
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
`dwkim` is a simple introduction for dwkim.
|
|
4
4
|
|
|
5
|
-
##
|
|
5
|
+
## Installation & Usage
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
- 프로젝트 초기화:
|
|
10
|
-
`npm init -y`
|
|
11
|
-
- Git 초기화:
|
|
12
|
-
`git init`
|
|
13
|
-
- TypeScript 설정:
|
|
14
|
-
`pnpm add -D typescript`
|
|
15
|
-
`pnpm exec tsc --init`
|
|
16
|
-
|
|
17
|
-
- 빌드 도구(tsup) 설치:
|
|
18
|
-
`pnpm add -D tsup`
|
|
19
|
-
- 빌드:
|
|
20
|
-
`pnpm run build`
|
|
21
|
-
- 타입 검사:
|
|
22
|
-
`pnpm run lint`
|
|
23
|
-
- Changesets 설치/초기화:
|
|
24
|
-
`pnpm add -D @changesets/cli`
|
|
25
|
-
`pnpm exec changeset init`
|
|
26
|
-
- 변경점 기록:
|
|
27
|
-
`pnpm exec changeset`
|
|
28
|
-
- NPM 배포(수동):
|
|
29
|
-
`pnpm publish`
|
|
30
|
-
|
|
31
|
-
---
|
|
32
|
-
|
|
33
|
-
## 1. 프로젝트 초기화
|
|
34
|
-
|
|
35
|
-
```bash
|
|
36
|
-
npm init # 또는 npm init -y (기본값 자동입력)
|
|
37
|
-
```
|
|
38
|
-
|
|
39
|
-
- `package.json`에서 `"name"`, `"license"` 등 기본 정보 지정
|
|
40
|
-
- 예시
|
|
41
|
-
```json
|
|
42
|
-
{
|
|
43
|
-
"name": "dwkim",
|
|
44
|
-
"version": "0.0.1",
|
|
45
|
-
"description": "this",
|
|
46
|
-
"license": "MIT",
|
|
47
|
-
"author": "dannyworks102@gmail.com",
|
|
48
|
-
"type": "commonjs",
|
|
49
|
-
"main": "src/index.ts"
|
|
50
|
-
}
|
|
51
|
-
```
|
|
52
|
-
|
|
53
|
-
---
|
|
54
|
-
|
|
55
|
-
## 2. Git 초기화 및 .gitignore 작성
|
|
56
|
-
|
|
57
|
-
```bash
|
|
58
|
-
git init
|
|
59
|
-
```
|
|
60
|
-
|
|
61
|
-
- `.gitignore` 파일 생성:
|
|
62
|
-
|
|
63
|
-
```
|
|
64
|
-
node_modules
|
|
65
|
-
dist
|
|
66
|
-
```
|
|
67
|
-
|
|
68
|
-
---
|
|
69
|
-
|
|
70
|
-
## 3. TypeScript 설치 및 설정
|
|
71
|
-
|
|
72
|
-
```bash
|
|
73
|
-
pnpm add -D typescript
|
|
74
|
-
pnpm exec tsc --init
|
|
75
|
-
```
|
|
76
|
-
|
|
77
|
-
- `tsconfig.json`에 아래 옵션 추가/수정:
|
|
78
|
-
|
|
79
|
-
```json
|
|
80
|
-
{
|
|
81
|
-
"compilerOptions": {
|
|
82
|
-
"noUncheckedIndexedAccess": true,
|
|
83
|
-
"noEmit": true
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
```
|
|
87
|
-
|
|
88
|
-
---
|
|
89
|
-
|
|
90
|
-
## 4. 소스 코드 작성
|
|
91
|
-
|
|
92
|
-
예시: `src/index.ts`
|
|
93
|
-
|
|
94
|
-
```typescript
|
|
95
|
-
export function add(a: number, b: number): number {
|
|
96
|
-
return a + b;
|
|
97
|
-
}
|
|
98
|
-
```
|
|
99
|
-
|
|
100
|
-
---
|
|
101
|
-
|
|
102
|
-
## 5. 빌드 도구(tsup) 설치 및 빌드 스크립트 추가
|
|
103
|
-
|
|
104
|
-
```bash
|
|
105
|
-
pnpm add -D tsup
|
|
106
|
-
```
|
|
107
|
-
|
|
108
|
-
- `package.json`에 빌드 스크립트 추가:
|
|
109
|
-
|
|
110
|
-
```json
|
|
111
|
-
{
|
|
112
|
-
"scripts": {
|
|
113
|
-
"build": "tsup src/index.ts --format cjs,esm",
|
|
114
|
-
"lint": "tsc"
|
|
115
|
-
}
|
|
116
|
-
}
|
|
117
|
-
```
|
|
118
|
-
|
|
119
|
-
```bash
|
|
120
|
-
pnpm run build
|
|
121
|
-
```
|
|
122
|
-
|
|
123
|
-
- 결과: `dist/index.js`, `dist/index.mjs`, `dist/index.d.ts` 등 생성
|
|
124
|
-
|
|
125
|
-
---
|
|
126
|
-
|
|
127
|
-
## 6. package.json 진입점 지정
|
|
128
|
-
|
|
129
|
-
```json
|
|
130
|
-
{
|
|
131
|
-
"main": "dist/index.js",
|
|
132
|
-
"module": "dist/index.mjs",
|
|
133
|
-
"types": "dist/index.d.ts"
|
|
134
|
-
}
|
|
135
|
-
```
|
|
136
|
-
|
|
137
|
-
---
|
|
138
|
-
|
|
139
|
-
## 7. 타입 검사
|
|
140
|
-
|
|
141
|
-
```bash
|
|
142
|
-
pnpm run lint
|
|
143
|
-
```
|
|
144
|
-
|
|
145
|
-
---
|
|
146
|
-
|
|
147
|
-
## 8. Changesets로 버전/릴리즈 노트 관리 (실무 워크플로우)
|
|
148
|
-
|
|
149
|
-
```bash
|
|
150
|
-
pnpm add -D @changesets/cli
|
|
151
|
-
pnpm exec changeset init
|
|
152
|
-
```
|
|
153
|
-
|
|
154
|
-
- `.changeset/` 폴더는 반드시 **git에 커밋**해야 합니다. (gitignore에 추가하면 안 됨)
|
|
155
|
-
- 변경사항이 있을 때마다 아래 명령어로 변경점(md 파일)을 기록합니다 (e.g. PR 할때마다)
|
|
7
|
+
### 1) Run directly with npx
|
|
156
8
|
|
|
157
9
|
```bash
|
|
158
|
-
|
|
10
|
+
npx dwkim
|
|
159
11
|
```
|
|
160
12
|
|
|
161
|
-
- 릴리즈(버전 업데이트) 준비 시 (c.f. main 브랜치에서)
|
|
162
|
-
|
|
163
|
-
```bash
|
|
164
|
-
pnpm exec changeset version # package.json, CHANGELOG.md 자동 업데이트
|
|
165
|
-
```
|
|
166
|
-
|
|
167
|
-
- 배포(수동) (c.f. main 브랜치에서)
|
|
168
|
-
|
|
169
|
-
```bash
|
|
170
|
-
pnpm exec changeset publish
|
|
171
|
-
```
|
|
172
|
-
|
|
173
|
-
> **실무 워크플로우 요약**
|
|
174
|
-
>
|
|
175
|
-
> - PR마다 `pnpm exec changeset`으로 변경점만 기록
|
|
176
|
-
> - main 브랜치에서 `changeset version` & `changeset publish`를 실행하거나,
|
|
177
|
-
> - GitHub Actions에서 자동화(merge → version/publish)하는 것이 일반적입니다.
|
|
178
|
-
|
|
179
|
-
---
|
|
180
|
-
|
|
181
|
-
## 9. GitHub Actions로 CI/CD 자동화
|
|
182
|
-
|
|
183
|
-
### `.github/workflows/main.yml` (테스트/빌드)
|
|
184
|
-
|
|
185
|
-
```yaml
|
|
186
|
-
name: CI
|
|
187
|
-
on: [push]
|
|
188
|
-
jobs:
|
|
189
|
-
build:
|
|
190
|
-
runs-on: ubuntu-latest
|
|
191
|
-
steps:
|
|
192
|
-
- uses: actions/checkout@v4
|
|
193
|
-
- uses: pnpm/action-setup@v3
|
|
194
|
-
with:
|
|
195
|
-
version: 8
|
|
196
|
-
- uses: actions/setup-node@v4
|
|
197
|
-
with:
|
|
198
|
-
node-version: 20
|
|
199
|
-
- run: pnpm install --frozen-lockfile
|
|
200
|
-
- run: pnpm run lint
|
|
201
|
-
- run: pnpm run build
|
|
202
|
-
```
|
|
203
|
-
|
|
204
|
-
### `.github/workflows/publish.yml` (배포)
|
|
205
|
-
|
|
206
|
-
```yaml
|
|
207
|
-
name: Release
|
|
208
|
-
on:
|
|
209
|
-
push:
|
|
210
|
-
branches: [main]
|
|
211
|
-
jobs:
|
|
212
|
-
release:
|
|
213
|
-
runs-on: ubuntu-latest
|
|
214
|
-
concurrency: release
|
|
215
|
-
steps:
|
|
216
|
-
- uses: actions/checkout@v4
|
|
217
|
-
- uses: pnpm/action-setup@v3
|
|
218
|
-
with:
|
|
219
|
-
version: 8
|
|
220
|
-
- uses: actions/setup-node@v4
|
|
221
|
-
with:
|
|
222
|
-
node-version: 20
|
|
223
|
-
registry-url: 'https://registry.npmjs.org'
|
|
224
|
-
- run: pnpm install --frozen-lockfile
|
|
225
|
-
- run: pnpm run build
|
|
226
|
-
- uses: changesets/action@v1
|
|
227
|
-
with:
|
|
228
|
-
publish: pnpm publish --no-git-checks
|
|
229
|
-
env:
|
|
230
|
-
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
|
|
231
|
-
```
|
|
232
|
-
|
|
233
|
-
- NPM_TOKEN은 GitHub 레포지토리의 Secrets에 등록 필요
|
|
234
|
-
|
|
235
|
-
---
|
|
236
|
-
|
|
237
|
-
## 10. NPM 배포 (자동화/수동 워크플로우)
|
|
238
|
-
|
|
239
|
-
- **자동화:**
|
|
240
|
-
|
|
241
|
-
1. PR마다 `pnpm exec changeset`으로 변경점 기록
|
|
242
|
-
2. main 브랜치 머지 → GitHub Actions가 자동으로 `changeset version` & `changeset publish` 실행
|
|
243
|
-
3. NPM에 자동 배포
|
|
244
|
-
|
|
245
|
-
- **수동:**
|
|
246
|
-
1. 변경점 기록 후,
|
|
247
|
-
2. `pnpm exec changeset version`
|
|
248
|
-
3. `pnpm exec changeset publish`
|
|
249
|
-
|
|
250
|
-
---
|
|
251
|
-
|
|
252
|
-
## 11. NPM 배포 시 꼭 알아야 할 실무 팁
|
|
253
|
-
|
|
254
|
-
### 1. dist만 NPM에 포함시키기
|
|
255
|
-
|
|
256
|
-
- `package.json`에 아래처럼 **files 필드**를 추가하면, NPM 배포 시 dist 폴더만 포함됩니다.
|
|
257
|
-
|
|
258
|
-
```json
|
|
259
|
-
"files": [
|
|
260
|
-
"dist"
|
|
261
|
-
]
|
|
262
|
-
```
|
|
263
|
-
|
|
264
|
-
- 또는, `.npmignore` 파일을 만들어 불필요한 파일/폴더를 명시적으로 제외할 수 있습니다.
|
|
265
|
-
(단, files 필드가 있으면 files가 우선 적용됨)
|
|
266
|
-
|
|
267
|
-
예시:
|
|
268
|
-
|
|
269
|
-
```
|
|
270
|
-
src/
|
|
271
|
-
test/
|
|
272
|
-
.github/
|
|
273
|
-
.vscode/
|
|
274
|
-
*.ts
|
|
275
|
-
*.md
|
|
276
|
-
!dist/
|
|
277
|
-
```
|
|
278
|
-
|
|
279
|
-
### 2. bin 필드와 shebang
|
|
280
|
-
|
|
281
|
-
- CLI로 실행하려면 `package.json`에 아래처럼 **bin 필드**를 추가해야 합니다.
|
|
282
|
-
|
|
283
|
-
```json
|
|
284
|
-
"bin": {
|
|
285
|
-
"dwkim": "dist/index.js"
|
|
286
|
-
}
|
|
287
|
-
```
|
|
288
|
-
|
|
289
|
-
- 그리고 `src/index.ts`의 맨 위에 아래와 같이 **shebang**을 추가해야 합니다.
|
|
290
|
-
|
|
291
|
-
```typescript
|
|
292
|
-
#!/usr/bin/env node
|
|
293
|
-
```
|
|
294
|
-
|
|
295
|
-
- 빌드 후(`dist/index.js`)에도 이 줄이 남아 있어야 하며, 실행 권한도 확인하세요.
|
|
296
|
-
|
|
297
|
-
### 3. 빌드 후 배포
|
|
298
|
-
|
|
299
|
-
- 반드시 `pnpm run build`로 dist 폴더가 생성된 후에 배포해야 합니다.
|
|
300
|
-
- release 스크립트에 build가 포함되어 있는지 확인하세요.
|
|
301
|
-
|
|
302
|
-
### 4. .gitignore vs .npmignore
|
|
303
|
-
|
|
304
|
-
- `.gitignore`: git에 포함하지 않을 파일
|
|
305
|
-
- `.npmignore`: npm publish 시 포함하지 않을 파일 (없으면 .gitignore를 참고)
|
|
306
|
-
- **files 필드가 있으면 files가 최우선 적용**
|
|
307
|
-
|
|
308
13
|
---
|
|
309
14
|
|
|
310
|
-
##
|
|
15
|
+
## Dependencies
|
|
311
16
|
|
|
312
|
-
-
|
|
313
|
-
-
|
|
314
|
-
-
|
|
315
|
-
-
|
|
17
|
+
- TypeScript
|
|
18
|
+
- Node.js
|
|
19
|
+
- boxen
|
|
20
|
+
- chalk
|
|
21
|
+
- pnpm
|
package/dist/index.d.mts
CHANGED