dwkim 0.0.16 → 0.0.18

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 ADDED
@@ -0,0 +1,315 @@
1
+ # NPM 패키지 배포 가이드
2
+
3
+ 이 문서는 [Blazing Fast Tips: Publishing to NPM](https://youtu.be/eh89VE3Mk5g?si=oXgStRKeVp8GBl7c) 영상의 최신 TypeScript 라이브러리 개발 및 NPM 배포 워크플로우를 실습 중심으로 정리한 것입니다.
4
+
5
+ ## TL;DR
6
+
7
+ 빠른 NPM 패키지 배포를 위한 주요 커맨드 요약:
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 할때마다)
156
+
157
+ ```bash
158
+ pnpm exec changeset # 변경점 기록(md 파일 생성)
159
+ ```
160
+
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
+ ---
309
+
310
+ ## 참고
311
+
312
+ - [예제 저장소 ↗]
313
+ - [Changesets 공식 문서 ↗]
314
+ - [tsup 공식문서 ↗]
315
+ - [pnpm 공식문서 ↗]
@@ -0,0 +1,5 @@
1
+ #!/usr/bin/env node
2
+ declare function multiply(a: number, b: number): number;
3
+ declare function identitiy<T>(arg: T): T;
4
+
5
+ export { identitiy, multiply };
@@ -0,0 +1,5 @@
1
+ #!/usr/bin/env node
2
+ declare function multiply(a: number, b: number): number;
3
+ declare function identitiy<T>(arg: T): T;
4
+
5
+ export { identitiy, multiply };