Typescript: --allowJs๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํฐ JS ํŒŒ์ผ์„ ๊ฐ€์ ธ์˜ฌ ๋•Œ ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์ค‘๋‹จ๋จ

์— ๋งŒ๋“  2017๋…„ 07์›” 08์ผ  ยท  3์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: microsoft/TypeScript

TypeScript ๋ฒ„์ „ : 2.4.1

Repro ํ”„๋กœ์ ํŠธ
ํฐ JS ํŒŒ์ผ (์ž‘๋™ํ•˜๋Š” ํŒŒ์„œ) (245KB commonjs ํ˜•์‹) ( --allowJs ์‚ฌ์šฉ)์„ ๊ฐ€์ ธ์˜ฌ ๋•Œ ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์˜์›ํžˆ ์ค‘๋‹จ๋ฉ๋‹ˆ๋‹ค. ์ œ๊ณต๋œ ์ตœ์†Œ ์žฌํ˜„ ํ”„๋กœ์ ํŠธ : tsc-hang-00

์˜ˆ์ƒ๋˜๋Š” ๋™์ž‘ :
์ปดํŒŒ์ผ์€ ์˜ค๋ฅ˜๊ฐ€ ์žˆ๊ฑฐ๋‚˜์—†์ด ๋๋‚ฉ๋‹ˆ๋‹ค.

์‹ค์ œ ํ–‰๋™ :
์ปดํŒŒ์ผ์€ ์˜์›ํžˆ ๋ฉˆ์ถ”๊ณ  CPU๋ฅผ ๊ณ„์† ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

์กฐ๊ฑด ํ…Œ์ŠคํŠธ

  • Windows 10, NodeJS 8.0, TS 2.4.1
  • Travis : Linux ์ปจํ…Œ์ด๋„ˆ, NodeJS 8.0, TS 2.4.1

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

Heya, https://github.com/filipesilva/tsc-allowjs-big-file ์—์„œ ๋˜ ๋‹ค๋ฅธ ๊ฐ„๋‹จํ•œ ์žฌํ˜„์ด ์žˆ๋‹ค๊ณ  ๋งํ•˜๊ณ  ์‹ถ์—ˆ์Šต๋‹ˆ๋‹ค @dzonatan์˜ ์ƒ์‹์— ์˜ํ•ด ์˜๊ฐ์„ํ–ˆ๋‹ค https://github.com/angular/angular-cli/issues/9636#issuecomment -390203543.

์ˆ˜์ฒœ ๊ฐœ์˜ ๋ฉ”์†Œ๋“œ๊ฐ€์žˆ๋Š” ํด๋ž˜์Šค ๋งŒ ์žˆ์Šต๋‹ˆ๋‹ค.

export class BigClass {
  myVar: any;

  method000() { return this.myVar; }
  method001() { return this.myVar; }
  // ...
  method999() { return this.myVar; }
}

ํ•ด๋‹น ์ €์žฅ์†Œ์—์„œ npm test ๋ฅผ ์‹คํ–‰ํ•˜๋ฉด์ด typescript ํŒŒ์ผ์„ javascript๋กœ ์ปดํŒŒ์ผ ํ•œ ๋‹ค์Œ ๊ฒฐ๊ณผ javascript ํŒŒ์ผ์„ --allowJs ๋กœ ์ปดํŒŒ์ผํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋ฉด TS 2.7.2 ๋ฐ 2.8.4์—์„œ RangeError: Maximum call stack size exceeded ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ TS 2.9.1์—์„œ๋Š” ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๊ณ  ์ปดํŒŒ์ผ์ด ์„ฑ๊ณตํ•ฉ๋‹ˆ๋‹ค.

๋ชจ๋“  3 ๋Œ“๊ธ€

์—ฌ๊ธฐ์„œ ๋ฌด์Šจ ์ผ์ด ์ผ์–ด๋‚˜๊ณ  ์žˆ๋Š”์ง€๋ฅผ ํ”„๋กœํŒŒ์ผ ๋งํ•˜๋ ค๊ณ  ์‹œ๋„ํ–ˆ๊ณ  ์ž„์˜์˜ ์‹œ๊ฐ„ (1 ์ดˆ๋ผ๋„) ๋™์•ˆ CPU ํ”„๋กœํŒŒ์ผ์„ ์บก์ฒ˜ํ•˜๋ ค๊ณ ํ•˜๋ฉด CPU ํ”„๋กœํŒŒ์ผ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋™์•ˆ Chrome ํ”„๋กœํŒŒ์ผ ๋Ÿฌ๊ฐ€ ์ถฉ๋Œ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ”„๋กœํŒŒ์ผ ๋ง์€ 245k ํŒŒ์ผ์— ์œ ์šฉํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ๋ฒ„๊ทธ ๋˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์„ฑ๋Šฅ ๋ฌธ์ œ์ด๋ฉฐ, ๋‘˜ ๋‹ค ์ผ๋ฐ˜์  ์œผ๋กœ ๋งค์šฐ ๊นŠ์€ ์Šคํƒ

'์œ„์น˜'์—๋Š” ๋‘ ๊ฐ€์ง€ ๊ด€๋ จ ์˜๋ฏธ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ํ˜„์žฌ ํ™•์ธ์ค‘์ธ ๋…ธ๋“œ์™€ ๋””๋ฒ„๊น…์ด ์ผ์‹œ ์ค‘์ง€๋˜์—ˆ์„ ๋•Œ ๋ช…๋ น ํฌ์ธํ„ฐ๊ฐ€์žˆ๋Š” ์œ„์น˜์ž…๋‹ˆ๋‹ค.

Heya, https://github.com/filipesilva/tsc-allowjs-big-file ์—์„œ ๋˜ ๋‹ค๋ฅธ ๊ฐ„๋‹จํ•œ ์žฌํ˜„์ด ์žˆ๋‹ค๊ณ  ๋งํ•˜๊ณ  ์‹ถ์—ˆ์Šต๋‹ˆ๋‹ค @dzonatan์˜ ์ƒ์‹์— ์˜ํ•ด ์˜๊ฐ์„ํ–ˆ๋‹ค https://github.com/angular/angular-cli/issues/9636#issuecomment -390203543.

์ˆ˜์ฒœ ๊ฐœ์˜ ๋ฉ”์†Œ๋“œ๊ฐ€์žˆ๋Š” ํด๋ž˜์Šค ๋งŒ ์žˆ์Šต๋‹ˆ๋‹ค.

export class BigClass {
  myVar: any;

  method000() { return this.myVar; }
  method001() { return this.myVar; }
  // ...
  method999() { return this.myVar; }
}

ํ•ด๋‹น ์ €์žฅ์†Œ์—์„œ npm test ๋ฅผ ์‹คํ–‰ํ•˜๋ฉด์ด typescript ํŒŒ์ผ์„ javascript๋กœ ์ปดํŒŒ์ผ ํ•œ ๋‹ค์Œ ๊ฒฐ๊ณผ javascript ํŒŒ์ผ์„ --allowJs ๋กœ ์ปดํŒŒ์ผํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋ฉด TS 2.7.2 ๋ฐ 2.8.4์—์„œ RangeError: Maximum call stack size exceeded ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ TS 2.9.1์—์„œ๋Š” ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๊ณ  ์ปดํŒŒ์ผ์ด ์„ฑ๊ณตํ•ฉ๋‹ˆ๋‹ค.

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰

๊ด€๋ จ ๋ฌธ์ œ

CyrusNajmabadi picture CyrusNajmabadi  ยท  3์ฝ”๋ฉ˜ํŠธ

manekinekko picture manekinekko  ยท  3์ฝ”๋ฉ˜ํŠธ

Antony-Jones picture Antony-Jones  ยท  3์ฝ”๋ฉ˜ํŠธ

kyasbal-1994 picture kyasbal-1994  ยท  3์ฝ”๋ฉ˜ํŠธ

blendsdk picture blendsdk  ยท  3์ฝ”๋ฉ˜ํŠธ