λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
πŸ‘¨‍πŸ’» web.dev/js.ts

[TypeScript] js.map νŒŒμΌμ€ λ¬΄μ—‡μΌκΉŒ?

by HandHand 2022. 3. 7.

TypeScript 컴파일 μ‹œ μƒμ„±λ˜λŠ” js.map 파일

πŸ“Œ js.map 파일?

νƒ€μž…μŠ€ν¬λ¦½νŠΈλ‘œ μž‘μ„±λœ νŒŒμΌμ„ μ‹€ν–‰μ‹œν‚€κΈ° μœ„ν•΄μ„œλŠ” λ¨Όμ € tsc 둜 μ»΄νŒŒμΌμ„ ν•΄μ•Όν•˜λŠ”λ°

μ΄λ•Œ tsconfig.json 에 source-map 섀정을 ν–ˆλ‹€λ©΄ js.map μ΄λΌλŠ” νŒŒμΌλ„ ν•¨κ»˜ μƒμ„±λ©λ‹ˆλ‹€.

 

λ¨Όμ € tsconfig.json 에 λ‹€μŒκ³Ό 같이 source map 섀정을 ν•©λ‹ˆλ‹€.

 

"compilerOptions": {
    "sourceMap": true,
},

 

그리고 λ‹€μŒκ³Ό 같은 νƒ€μž…μŠ€ν¬λ¦½νŠΈ μ˜ˆμ‹œ μ½”λ“œλ₯Ό μž‘μ„±ν•©λ‹ˆλ‹€.

interface Animal {
  name: string;
}

function callAnimal(animal: Animal) {
  console.log(animal);
}

const animal: Animal = { name: "aa" };
debugger;
callAnimal(animal);

 

λ§ˆμ§€λ§‰μœΌλ‘œ tsc 둜 컴파일 ν•˜λ©΄ λ‹€μŒκ³Ό 같이

index.js 와 index.js.map 두 개의 파일이 μƒμ„±λ˜λŠ” 것을 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.

/dist
γ„΄ index.js
γ„΄ index.js.map

 

그럼 μ—¬κΈ°μ„œ js.map 파일의 μš©λ„λŠ” λ¬΄μ—‡μΌκΉŒμš”?

 

πŸ“Œ js.map 파일의 ꡬ성 및 μš©λ„

μ–΄λ–»κ²Œ κ΅¬μ„±λœ νŒŒμΌμΈκ°€μš”?

λ¨Όμ € js.map 파일이 μ–΄λ–»κ²Œ κ΅¬μ„±λ˜μ–΄μžˆλŠ”μ§€ ν™•μΈν•΄λ³΄κ² μŠ΅λ‹ˆλ‹€.

{
  "version": 3,
  "file": "index.js",
  "sourceRoot": "",
  "sources": [
    "../src/index.ts"
  ],
  "names": [],
  "mappings": ";AAIA,SAAS,UAAU,CAAC,MAAc;IAChC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;AACtB,CAAC;AAED,MAAM,MAAM,GAAW,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AACtC,QAAQ,CAAC;AACT,UAAU,CAAC,MAAM,CAAC,CAAC"
}

JSON ν˜•μ‹μœΌλ‘œ μž‘μ„±λœ js.map 파일의 각 속성별 μš©λ„λŠ” λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

 

  • version : μ‚¬μš©λœ source map 의 μŠ€νŽ™ λ²„μ „μž…λ‹ˆλ‹€.
  • file : ν•΄λ‹Ή map 파일이 μ°Έμ‘°ν•˜κ³  μžˆλŠ” JS νŒŒμΌμž…λ‹ˆλ‹€.
  • sourceRoot : μ»΄νŒŒμΌν•œ TS νŒŒμΌλ“€μ˜ 루트 디렉토리λ₯Ό μ§€μ •ν•©λ‹ˆλ‹€.
  • sources : μ»΄νŒŒμΌν•œ TS νŒŒμΌλ“€μ˜ λͺ©λ‘μž…λ‹ˆλ‹€.
  • names : 컴파일 ν›„ output μ—μ„œ μ œκ±°λ˜κ±°λ‚˜ λ³€κ²½λœ μ‹λ³„μžμ— λŒ€ν•œ 정보λ₯Ό λ‹΄κ³  μžˆμŠ΅λ‹ˆλ‹€.
  • mappings : base64 μΈμ½”λ”©λœ λ¬Έμžμ—΄λ‘œ TS 파일과 JS 파일 μ‚¬μ΄μ˜ 맀핑 정보λ₯Ό λ‹΄κ³  μžˆμŠ΅λ‹ˆλ‹€.

 

그럼 이 파일이 μ™œ ν•„μš”ν•œ κ²ƒμΈκ°€μš”?

 

1

 

컴파일된 μžλ°”μŠ€ν¬λ¦½νŠΈ μ½”λ“œλŠ” minify 와 uglify λ“±μ˜ 과정을 거쳐 읽기 νž˜λ“  ν˜•νƒœλ‘œ μ‘΄μž¬ν•©λ‹ˆλ‹€.

이 경우 디버깅을 ν•  μ‹œ 해석 λΆˆκ°€λŠ₯ν•œ μ½”λ“œ λ•Œλ¬Έμ— 어렀움이 μ‘΄μž¬ν•˜κΈ° λ•Œλ¬Έμ— 개발 μ‹œ νŽΈμ˜μ„±μ„ μœ„ν•΄

컴파일 되기 μ „μ˜ νƒ€μž…μŠ€ν¬λ¦½νŠΈ μ½”λ“œμ™€μ˜ 맀핑 파일이 μ‘΄μž¬ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€.

 

πŸ“Œ μ°Έκ³  자료

What is a TypeScript Map file?

Emitting TypeScript Source Maps

An Introduction to Source Maps [Article] | Treehouse Blog

What is TypeScript Map file ? - GeeksforGeeks

λ°˜μ‘ν˜•

πŸ’¬ λŒ“κΈ€