Typescript: "์ž…๋ ฅ ํŒŒ์ผ์„ ๋ฎ์–ด์“ฐ๋ฏ€๋กœ ... ํŒŒ์ผ์„ ์“ธ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค." ์˜ค๋ฅ˜

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

ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ๋ฒ„์ „: 2.2.1

Visual Studio 2015 ์—…๋ฐ์ดํŠธ 3์„ ์‚ฌ์šฉํ•  ๋•Œ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์˜ค๋ฅ˜ ๋ชฉ๋ก์— ์ˆ˜๋ฐฑ ๊ฐœ์˜ ์˜ค๋ฅ˜๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

์ž…๋ ฅ ํŒŒ์ผ์„ ๋ฎ์–ด์“ฐ๋ฏ€๋กœ 'C:/{{my-project}}/node_modules/buffer-shims/index.js' ํŒŒ์ผ์„ ์“ธ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

ํ•ญ์ƒ ์ด๋Ÿฐ ๋ชจ์Šต์ž…๋‹ˆ๋‹ค. ์‹ค์ œ๋กœ ๋นŒ๋“œ๋ฅผ ๋ฐฉํ•ดํ•˜์ง€ ์•Š์œผ๋ฉฐ ๋ชจ๋“  ๊ฒƒ์ด ์ž˜ ์ž‘๋™ํ•˜์ง€๋งŒ ์˜ค๋ฅ˜ ๋ชฉ๋ก์€ ์‚ฐ๋งŒํ•˜๊ณ  ๋ฐœ์ƒํ–ˆ์„ ๋•Œ "์‹ค์ œ" ์˜ค๋ฅ˜๋ฅผ ์ฐพ๊ธฐ๊ฐ€ ์–ด๋ ต์Šต๋‹ˆ๋‹ค.

Visual Studio Error List

๋‚ด tsconfig.json ํŒŒ์ผ

{
  "compileOnSave": true,
  "compilerOptions": {
    "baseUrl": ".",
    "module": "commonjs",
    "noImplicitAny": true,
    "removeComments": true,
    "sourceMap": true,
    "target": "ES5",
    "forceConsistentCasingInFileNames": true,
    "strictNullChecks": true,
    "allowUnreachableCode": false,
    "allowUnusedLabels": false,
    "noFallthroughCasesInSwitch": true,
    "noImplicitReturns": true,
    "noImplicitThis": true,
    "noUnusedLocals": true,
    "noUnusedParameters": true,

    "typeRoots": [],
    "types": [] //Explicitly specify an empty array so that the TS2 <strong i="17">@types</strong> modules are not acquired since we aren't ready for them yet.
  },
  "exclude": ["node_modules"]
}

์ด ๋ชจ๋“  ์˜ค๋ฅ˜๋ฅผ ์–ด๋–ป๊ฒŒ ์—†์•จ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

_(์•„์ง ๋‹ต๋ณ€์ด ์—†๋Š” StackOverflow์— ์ด ์งˆ๋ฌธ์„ ๊ฒŒ์‹œํ–ˆ์Šต๋‹ˆ๋‹ค. )_

Needs More Info

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

๋‚˜๋ฅผ ์œ„ํ•œ ํ•ด๊ฒฐ์ฑ…์„ ์ฐพ์•˜์Šต๋‹ˆ๋‹ค. ์ œ ๊ฒฝ์šฐ์—๋Š” files ๋ฐฐ์—ด์„ ์ง€์ •ํ•˜์ง€ ์•Š๊ณ  outDir ๋ฐ rootDir ๋ฅผ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค. outDir ์˜ ๊ฒฝ๋กœ๋ฅผ exclude ๋ฐฐ์—ด์— ์ถ”๊ฐ€ํ•˜๋ฉด ๋ชจ๋“  ๊ฒƒ์ด ์ •์ƒ์ ์œผ๋กœ ์ž‘๋™ํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

{
    "compilerOptions": {
        ...,
        "outDir": "./dist",
        "rootDir": "./src",
    },
    "exclude": [
        "node_modules",
        "dist" <-- I had to add this to fix the errors
    ]
}

์•„๋งˆ๋„ TypeScript๋Š” outDir ๋กœ ์„ค์ •๋˜์–ด ์žˆ์–ด๋„ dist ํด๋”์˜ ๋‚ด์šฉ์„ ๊ฐ์‹œํ•˜๊ณ  ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

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

๋‚˜๋Š” ๋˜ํ•œ ๊ฐ™์€ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

--allowjs ์„ค์ •๋˜์–ด ์žˆ์Šต๋‹ˆ๊นŒ? ํ”„๋กœ์ ํŠธ๋ฅผ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. ํ”„๋กœ์ ํŠธ๋ฅผ ๊ณต์œ ํ•  ์ˆ˜ ์—†์œผ๋ฉฐ ํ•ด๋‹น ํ”Œ๋ž˜๊ทธ๊ฐ€ ์„ค์ •๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ๋‚ด tsconfig.json ๋Š” ์œ„์— ์žˆ์œผ๋ฉฐ VS2015 ์—…๋ฐ์ดํŠธ 3๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด ์—…๋ฐ์ดํŠธ๋Š” MSBuild๋กœ ๋นŒ๋“œ๋ฅผ ์ •์ƒ์ ์œผ๋กœ ํŠธ๋ฆฌ๊ฑฐํ•ฉ๋‹ˆ๋‹ค.

๊ฐ™์€ ํ”„๋กœ์ ํŠธ์—์„œ ๊ฐ™์€ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๊ฒƒ์— ๋Œ€ํ•ด ๋ถˆํ‰ํ•˜๋Š” ํŒ€์›์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ๋˜ํ•œ ๋˜‘๊ฐ™์€ ๋ฌธ์ œ์™€ ๋™์ผํ•œ ์„ค์ •(TS 2.2.1, VS2015 U3 ๋“ฑ)์ด ์žˆ๋Š” ๋‹ค๋ฅธ ์ปดํ“จํ„ฐ์˜ ์ง‘์—์„œ ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

๋™์ผํ•œ ๊ตฌ์„ฑ์œผ๋กœ ๋ฒ ์–ด๋ณธ ํ”„๋กœ์ ํŠธ๋ฅผ ์ƒ์„ฑํ•˜๋ฉด ๋™์ผํ•œ ๋™์ž‘์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๊นŒ?

์œ ํ˜• ์ •์˜๊ฐ€ ์“ฐ๊ธฐ ์•ก์„ธ์Šค ๊ถŒํ•œ์ด ์žˆ์ง€๋งŒ https://github.com/wc-catalogue/blaze-elements/issues/299 ๊ฐ™์€ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

@Hotell "awesome-typescript-loader" ์—†์ด ์ด๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ๋‚˜์™€ ์žฌํ˜„ ๋‹จ๊ณ„๋ฅผ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

๋„ค, ๋ฌธ์ œ์—์„œ ๋ณผ ์ˆ˜ ์žˆ๋“ฏ์ด ์ถœ๋ ฅ์€ ์›์‹œ tsc ๋‘ ๋ฒˆ์งธ๋กœ ์‹คํ–‰ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

screen shot 2017-03-10 at 5 08 04 pm

https://github.com/wc-catalogue/blaze-elements ๋ฆฌํฌ์ง€ํ† ๋ฆฌ๋ฅผ ๋ณต์ œ

  • ๋ฃจํŠธ์—์„œ yarn ํžˆํŠธ
  • ํžˆํŠธ yarn tsc -> ์ฒ˜์Œ ์ปดํŒŒ์ผ(๋ชจ๋“  ๊ฒƒ์ด ์ •์ƒ) => ์ฒ˜์Œ definitions/ ํด๋” ์ƒ์„ฑ
  • yarn tsc ๋‹ค์‹œ ๋ˆ„๋ฅด๊ธฐ -> ์˜ค๋ฅ˜

๋น„์Šทํ•œ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋™์ผํ•œ ๋ฒ„์ „์˜ typescript(2.2.1)์™€ Visual Studio 2015(์—…๋ฐ์ดํŠธ 3)์ž…๋‹ˆ๋‹ค. ๋นŒ๋“œ๊ฐ€ ์ฒ˜์Œ ์‹คํ–‰๋  ๋•Œ๋Š” ์˜ค๋ฅ˜๊ฐ€ 0๊ฐœ ์žˆ์ง€๋งŒ ์ดํ›„์—๋Š” ์ˆ˜๋ฐฑ ๊ฐœ์˜ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

๋ชจ๋“  ์˜ค๋ฅ˜(์ €ํฌ์˜ ๊ฒฝ์šฐ)๋Š” "node_modules" ํด๋”์— ์žˆ๋Š” ๊ฒƒ์œผ๋กœ ๋ณด์ž…๋‹ˆ๋‹ค. ์ด ํด๋”๋Š” tsconfig.json ํŒŒ์ผ์—์„œ ์ œ์™ธํ•˜๋„๋ก ์„ค์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. -- ์œ ์‚ฌํ•œ ๋ฒ„๊ทธ๋ฅผ ๋ณด๋ฉด ์ด ๋ฒ„์ „์˜ typescript์—์„œ ์ œ์™ธ๊ฐ€ ๋™์ผํ•˜๊ฒŒ ์ทจ๊ธ‰๋˜์ง€ ์•Š๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๊นŒ?

tsconfig.json ํŒŒ์ผ:

{
  "compilerOptions": {
    "noImplicitAny": false,
    "noEmitOnError": true,
    "removeComments": false,
    "sourceMap": true,
    "target": "es5",
    "module": "commonjs",
    "moduleResolution": "node",
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true
  },
  "exclude": [
    "node_modules",
    "wwwroot",
    "aot",
    "AngularApp/main-aot.ts"

  ],
  "compileOnSave": true
}

์ผ๋ถ€ ์˜ค๋ฅ˜(๋ชจ๋‘ ๋™์ผํ•˜์ง€๋งŒ ๋‹ค๋ฅธ ํŒŒ์ผ):

Severity    Code    Description Project File    Line    Suppression State
Error   TS5055  Cannot write file 'C:/XYZ/Project.AppWeb/node_modules/zone.js/dist/zone.js' because it would overwrite input file.  TypeScript Virtual Projects     1   Active
Error   TS5055  Cannot write file 'C:/XYZ/Project.AppWeb/node_modules/events/events.js' because it would overwrite input file.  TypeScript Virtual Projects     1   Active
Error   TS5055  Cannot write file 'C:/XYZ/Project.AppWeb/node_modules/core-js/modules/_wks.js' because it would overwrite input file.   TypeScript Virtual Projects     1   Active
Error   TS5055  Cannot write file 'C:/XYZ/Project.AppWeb/node_modules/core-js/modules/_uid.js' because it would overwrite input file.   TypeScript Virtual Projects     1   Active
Error   TS5055  Cannot write file 'C:/XYZ/Project.AppWeb/node_modules/core-js/modules/_to-primitive.js' because it would overwrite input file.  TypeScript Virtual Projects     1   Active

๋‹ค์‹œ ๋งํ•˜์ง€๋งŒ, "node_modules" ํด๋”๋ฅผ ์‚ญ์ œํ•˜๋ฉด ๋นŒ๋“œ๊ฐ€ ํ•œ ๋ฒˆ ์ž‘๋™ํ•˜์ง€๋งŒ ๋‹ค์‹œ ์ƒ์„ฑ๋˜๋ฉด ๋‹ค์Œ ๋นŒ๋“œ์—์„œ ์‹คํŒจํ•ฉ๋‹ˆ๋‹ค.

@Hotell ๋กœ์ปฌ์—์„œ ์ด๊ฒƒ์„ ๋ณผ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ๋ฌด์—‡์„ ๋†“์น˜๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ?

c:\test\14538\blaze-elements>yarn tsc
yarn tsc v0.18.1
$ "c:\test\14538\blaze-elements\node_modules\.bin\tsc"
Done in 5.46s.

c:\test\14538\blaze-elements>yarn tsc
yarn tsc v0.18.1
$ "c:\test\14538\blaze-elements\node_modules\.bin\tsc"
Done in 5.87s.

c:\test\14538\blaze-elements>dir /B definitions
packages
polyfills.d.ts
styles.d.ts
test-helpers.d.ts
vendors.d.ts

c:\test\14538\blaze-elements>yarn tsc
yarn tsc v0.18.1
$ "c:\test\14538\blaze-elements\node_modules\.bin\tsc"
Done in 4.48s.

@BrainSlugs83 ์žฌํ˜„ ํ”„๋กœ์ ํŠธ๊ฐ€ ์žˆ๋‹ค๋ฉด ์‚ดํŽด๋ณด๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ๋˜ํ•œ ๊ฐ™์€ ๋ฌธ์ œ์— ์ง๋ฉดํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ์€ ์˜ค๋ฅ˜์ž…๋‹ˆ๋‹ค.
screen shot 2017-03-16 at 23 34 13
๊ทธ๋ฆฌ๊ณ  ์ด๊ฒƒ์€ ๋‚ด tsconfig.json์ž…๋‹ˆ๋‹ค.
screen shot 2017-03-16 at 23 34 25

์ €๋Š” typescript๋ฅผ ์ „ํ˜€ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ๋ฐฉ๊ธˆ ๋นŒ๋“œ๋ฅผ ๊ฑด๋„ˆ๋›ฐ๊ธฐ ์œ„ํ•ด tsconfig๋ฅผ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ target=ES6์„ ์„ ํƒํ•ด์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ๋‹ค๋ฅธ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.

tsconfig.json์ด ํ”„๋กœ์ ํŠธ์˜ ์ผ๋ถ€์ž…๋‹ˆ๊นŒ? ์ฝ˜ํ…์ธ  ์œ ํ˜•์ด "์ฝ˜ํ…์ธ "์ธ์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ๊ทธ๋ ‡๋‹ค๋ฉด ํ”„๋กœ์ ํŠธ๋ฅผ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

@mhegazy ์•ˆ๋…•ํ•˜์„ธ์š”, ์˜ˆ, tsconfig.json์ด ํ”„๋กœ์ ํŠธ์— ํฌํ•จ๋˜์–ด ์žˆ์Œ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

screen shot 2017-03-17 at 19 53 12

ํ•˜์ง€๋งŒ ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. ์–ด๋–ค "์ฝ˜ํ…์ธ  ์œ ํ˜•"์„ ๋ง์”€ํ•˜์‹œ๋Š”์ง€ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค. ๋ช…ํ™•ํžˆ ๋ง์”€ํ•ด ์ฃผ์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?

ํ”„๋กœ์ ํŠธ๋ฅผ ๊ณต์œ ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

๋‚ด ํ”„๋กœ์ ํŠธ์—์„œ tsconfig ํŒŒ์ผ์ด ํ”„๋กœ์ ํŠธ ํŒŒ์ผ์— ํฌํ•จ๋˜์–ด ์žˆ๊ณ  ์ฝ˜ํ…์ธ ๋กœ ๋‚˜์—ด๋˜์–ด ์žˆ์Œ์„ ํ™•์ธํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

@max-favilli ๋‚ด ์ƒ๊ฐ์— @mhegazy ๋Š” "์ฝ˜ํ…์ธ  ์œ ํ˜•"์— ๋Œ€ํ•ด ๋งํ•  ๋•Œ "๋นŒ๋“œ ์ž‘์—…"์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

์†”๋ฃจ์…˜ ํƒ์ƒ‰๊ธฐ์—์„œ tsconfig.json์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค. ์†์„ฑ ์ฐฝ์„ ๋ถˆ๋Ÿฌ์˜ต๋‹ˆ๋‹ค(๊ธฐ๋ณธ์ ์œผ๋กœ F4 ํ‚ค). Build Action ์†์„ฑ์ด ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค @kevindqc , @mhegazy yes "Build Action"์ด "content"๋กœ ์„ค์ •๋˜์—ˆ์Šต๋‹ˆ๋‹ค
screen shot 2017-03-18 at 11 21 28

๋‹ค์Œ์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•ด ๊ฐ€์ƒ ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ๋ฅผ ๋‚˜์™€ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

  • Tools > Options > Text Editor > TypeScript > Project ๋กœ ์ด๋™ํ•˜์—ฌ Display Virtual Projects when no Solution is loaded ;
  • VS๋ฅผ ๋‹ค์‹œ ์‹œ์ž‘ํ•˜๊ณ  ํ”„๋กœ์ ํŠธ์—์„œ ํŒŒ์ผ์„ ์—ฝ๋‹ˆ๋‹ค.
  • ์ด์ œ ์†”๋ฃจ์…˜ ํƒ์ƒ‰๊ธฐ์— TypeScript Virtual Project ๋ผ๋Š” ์ด๋ฆ„์˜ ์ƒˆ ๋…ธ๋“œ๊ฐ€ ํ‘œ์‹œ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

@mhegazy ์ด๋ ‡๊ฒŒ?

screen shot 2017-03-21 at 02 08 13

๋„์›€์„ ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

๋‚˜๋„ ๊ฐ™์€ ๋ฌธ์ œ๋ฅผ ์•ˆ๊ณ ์žˆ์–ด. ํ”„๋กœ์ ํŠธ๋ฅผ ๊ณต์œ ํ•  ์ˆ˜๋Š” ์—†์ง€๋งŒ ์ตœ๋Œ€ํ•œ ๋งŽ์€ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•˜๋„๋ก ๋…ธ๋ ฅํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

.csproj( <TypeScriptCompileBlocked>true</TypeScriptCompileBlocked> )์—์„œ typescript ์ปดํŒŒ์ผ์„ ๋น„ํ™œ์„ฑํ™”ํ–ˆ์Šต๋‹ˆ๋‹ค.
๋Œ€์‹  ๋นŒ๋“œ ์ด๋ฒคํŠธ์— ์žˆ๋Š” npm run build:prod ์˜ํ•ด ์ปดํŒŒ์ผ๋ฉ๋‹ˆ๋‹ค.

์˜ค๋ฅ˜๊ฐ€ ํ•ญ์ƒ ์žˆ๋Š” ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค. ๋‚˜๋Š” ๊ทธ๊ฒƒ๋“ค์„ ๋‚˜ํƒ€๋‚˜๊ฒŒํ•˜๋ ค๊ณ  ๋…ธ๋ ฅํ–ˆ์Šต๋‹ˆ๋‹ค (VS์— ํ‘œ์‹œ๋˜์—ˆ์œผ๋ฏ€๋กœ VS๋ฅผ ๋‹ค์‹œ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค). typescript ํ”„๋กœ์ ํŠธ๋ฅผ ๋นŒ๋“œํ•˜๊ณ , ์†”๋ฃจ์…˜์„ ๋นŒ๋“œํ•˜๊ณ , ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ•˜๊ณ , ์ฝ”๋“œ ๋ถ„์„์„ ์‹คํ–‰ํ•˜๊ณ , ์ฝ”๋“œ ์ ์šฉ ๋ฒ”์œ„๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๋“ฑ์˜ ์ž‘์—…์„ ์‹œ๋„ํ–ˆ์ง€๋งŒ ์•„๋ฌด ๊ฒƒ๋„ ํŠธ๋ฆฌ๊ฑฐํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‹ค๊ฐ€ ๋งˆ์ง€๋ง‰ ๋ฌธ์žฅ์„ ์“ฐ๋‹ค๋ณด๋‹ˆ ์˜ค๋ฅ˜๊ฐ€ ๋–ด๋‹ค. ๊ทธ๋ž˜์„œ ๊ทธ๊ฒƒ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ช‡ ๊ฐ€์ง€ ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์ž‘์—…์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๊นŒ? ๋นŒ๋“œ๋ฅผ ์‹œ์ž‘ํ•œ์ง€ โ€‹โ€‹2๋ถ„์ •๋„ ํ›„์— ๋ฐœ์ƒํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค(์ตœ์†Œ 2~3ํšŒ ์‹œ๋„)

ํƒ€์ž„๋ผ์ธ:
1:37:20 - ๋น„์ฃผ์–ผ ์ŠคํŠœ๋””์˜ค ์˜คํ”ˆ
1:37:30 - ์†”๋ฃจ์…˜ ๋นŒ๋“œ ์‹œ์ž‘
1:38:20 - ๋นŒ๋“œ ์™„๋ฃŒ
1:39:39 - ์˜ค๋ฅ˜๊ฐ€ ๋‚˜ํƒ€๋‚จ

๋‚ด ํ”„๋กœ์ ํŠธ๊ฐ€ ์—ฌ์ „ํžˆ v2.0.3 Microsoft.TypeScript.Compiler ๋ฐ Microsoft.TypeScript.MSBuild ๋„ˆ๊ฒŸ ํŒจํ‚ค์ง€๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Œ์„ ์•Œ์•˜์Šต๋‹ˆ๋‹ค. v2.2.1๋กœ ์—…๋ฐ์ดํŠธํ–ˆ์Šต๋‹ˆ๋‹ค. ์ง€๊ธˆ๊นŒ์ง€๋Š” ์˜ค๋ฅ˜๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ์˜ค๋ฅ˜๊ฐ€ ๋‹ค์‹œ ํ‘œ์‹œ๋˜๋ฉด ์—…๋ฐ์ดํŠธํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. (ํŽธ์ง‘: VS๋ฅผ ์—ด ๋•Œ ๋นŒ๋“œ ์™ธ์—๋Š” ์•„๋ฌด ๊ฒƒ๋„ ํ•˜์ง€ ์•Š๊ณ  ~5๋ถ„ ์ •๋„ ๋” ์˜ค๋ž˜ ๊ฑธ๋ ธ์ง€๋งŒ ์˜ค๋ฅ˜๊ฐ€ ๋‹ค์‹œ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ์‹ค์ œ๋กœ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๊ธฐ ์œ„ํ•ด ๋นŒ๋“œํ•  ํ•„์š”๋„ ์—†์Šต๋‹ˆ๋‹ค. ํ”„๋กœ์ ํŠธ ๋ฐ ๋ช‡ ๋ถ„ ๊ธฐ๋‹ค๋ฆฌ๋ฉด ์˜ค๋ฅ˜๊ฐ€ ํ‘œ์‹œ๋จ)

๊ทธ ์˜ค๋ž˜๋œ nuget ํŒจํ‚ค์ง€์— ๋Œ€ํ•ด ์ •์ƒ์ž…๋‹ˆ๊นŒ? ์ƒˆ ๋ฒ„์ „์˜ typescript๋ฅผ ์„ค์น˜ํ•  ๋•Œ ํ”„๋กœ์ ํŠธ typescript ๋„๊ตฌ๋ฅผ ์—…๊ทธ๋ ˆ์ด๋“œํ•˜๋ผ๋Š” ํŒ์—…์ด ํ‘œ์‹œ๋˜๋Š” ๊ฒƒ ๊ฐ™์€๋ฐ <TypeScriptToolsVersion>2.2</TypeScriptToolsVersion> ๋งŒ ์—…๋ฐ์ดํŠธ๋œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋„ˆ๊ฒŸ ํŒจํ‚ค์ง€๋„ ์—…๋ฐ์ดํŠธํ•˜์ง€ ์•Š์•„์•ผ ํ•ฉ๋‹ˆ๊นŒ?

๋ฐฉ๊ธˆ Typescript 2.2.1๋กœ ์—…๋ฐ์ดํŠธํ–ˆ๋Š”๋ฐ ๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ชจ๋“  node_modules์— ํ”Œ๋ž˜๊ทธ๋ฅผ ์ง€์ •ํ•˜์ง€๋งŒ tsc ์ปดํŒŒ์ผ๋Ÿฌ๋Š” ๋ฌธ์ œ ์—†์ด ์™„๋ฃŒ๋ฉ๋‹ˆ๋‹ค.

@mhegazy

@Hotell ๋กœ์ปฌ์—์„œ ์ด๊ฒƒ์„ ๋ณผ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ๋ฌด์—‡์„ ๋†“์น˜๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ?

๋งž์Šต๋‹ˆ๋‹ค, ๊ทธ๊ฒƒ์€ https://github.com/wc-catalogue/blaze-elements/commit/cdb94bf8feb3a1ad7e21e6fce243e3322c1334cc์— ์˜ํ•ด ์ˆ˜์ •๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์ง€์—ฐ๋œ ๋‹ต๋ณ€๊ณผ thx 4 ๋„์›€์„ ์š”์ฒญํ•˜์‹ญ์‹œ์˜ค!

@Hotell @mhegazy ๋‚˜๋ฅผ ์œ„ํ•ด ์ž‘๋™ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.
"definitions" ํด๋”์— d.ts ํŒŒ์ผ์ด ์žˆ์œผ๋ฉด ์ž‘๋™ํ• ๊นŒ์š”?
๊ทธ๋Ÿฌ๋‚˜ ๋‚˜๋Š” ๊ทธ๊ฒƒ์„ ๊ฐ€์ง€๊ณ  ์žˆ์ง€ ์•Š๋‹ค. ๋‚˜๋Š” inheritedly ์ œ์™ธํ•ด์•ผ "node_modules"์•„๋ž˜ @types ์žˆ๋‚˜์š”?

@chrismbarr ์•„์ง ํ•ด๊ฒฐ ๊ฐ”๊ณ  @Hotell์—์„œ ์ œ์•ˆํ•œ ์ˆ˜์ • ์‚ฌํ•ญ๋„ ๋ช‡ ๊ฐœ ์˜ฌ๋ ธ์ง€๋งŒ Visual Studios์—์„œ ์—ฌ์ „ํžˆ ์ด๋Ÿฌํ•œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ๋“ค์€ ๋ชจ๋‘ node_modules ํด๋”์—์„œ ์˜ค๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์ž์„ธํ•œ ๋กœ๊น…์„ ํ™œ์„ฑํ™”ํ•˜๊ณ  ๊ฒฐ๊ณผ๋ฅผ ๋ณด๋‚ด ์ฃผ์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ? ์‹œ์Šคํ…œ ํ™˜๊ฒฝ ๋ณ€์ˆ˜ TSS_LOG ๋ฅผ -file C:/temp/logs/tsserver.log -level verbose ์™€ ๊ฐ™์€ ๊ฐ’์œผ๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค(๋กœ๊ทธ ํด๋”๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธ). ๊ทธ๋Ÿฐ ๋‹ค์Œ ๋ฌธ์ œ๋ฅผ ์žฌํ˜„ํ•œ ํ›„ ๋ถ„์„์„ ์œ„ํ•ด ๋กœ๊ทธ๋ฅผ ์ „์†ก/์ฒจ๋ถ€ํ•ฉ๋‹ˆ๋‹ค. (์ฐธ๊ณ : ์—ฌ๊ธฐ์—๋Š” ํŒŒ์ผ ๊ฒฝ๋กœ ๋ฐ ์™„์„ฑ ๋ชฉ๋ก๊ณผ ๊ฐ™์€ ๋ฐ์ดํ„ฐ๊ฐ€ ํฌํ•จ๋  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ๊ณต์œ ํ•˜๊ณ  ์‹ถ์ง€ ์•Š์€ ๋ฐ์ดํ„ฐ๊ฐ€ ์—†๋Š”์ง€ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค.)

ํ…Œ์ŠคํŠธ์—์„œ ํ”„๋กœ์ ํŠธ ์‹œ์Šคํ…œ์ด ์ž˜๋ชป๋œ ํŒŒ์ผ์ด ํฌํ•จ๋œ ํ”„๋กœ์ ํŠธ ๋ณด๊ธฐ๋ฅผ ๊ตฌ์„ฑํ•˜์—ฌ ์˜ˆ๊ธฐ์น˜ ์•Š์€ ์‹œ๊ฐ„์— ๊ฐ„ํ—์ ์ธ ์˜ค๋ฅ˜๋ฅผ ์ผ์œผํ‚ค๋Š” ๊ฒƒ์„ ๊ฐ€๋” ๋ณด์•˜์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์— ์›์ธ์ด ์žˆ๋Š”์ง€ ์•Œ๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

ํŒŒ์ผ์„ ์—…๋กœ๋“œํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ์ง์ ‘ ๋ณด๋‚ด๋ ค๋ฉด ๋‚ด ์ด๋ฉ”์ผ ์ฃผ์†Œ๋ฅผ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(microsoft dot com์˜ billti). ๊ฐ์‚ฌ ํ•ด์š”.

@johnlee ์•„๋‹ˆ์š”,

@billti ๋ณ€์ˆ˜๊ฐ€ ์ถ”๊ฐ€๋˜๊ณ  Visual Studio(2017)๊ฐ€ ๋‹ค์‹œ ์‹œ์ž‘๋˜๊ณ  ์†”๋ฃจ์…˜์ด ๋‹ค์‹œ

ํ™•์‹คํžˆ ์‹œ์Šคํ…œ ํ™˜๊ฒฝ ๋ณ€์ˆ˜์ž…๋‹ˆ๊นŒ(์ฆ‰, ์ƒˆ ๋ช…๋ น ํ”„๋กฌํ”„ํŠธ๋ฅผ ์—ด๊ณ  SET TSS ๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ์„ค์ •์ด ๋‚˜์—ด๋จ)? ๊ทธ๋ ‡์ง€ ์•Š์€ ๊ฒฝ์šฐ ๋กœ๊ทธ๊ฐ€ ๊ธฐ๋ก๋  ํด๋”๊ฐ€ ์ด๋ฏธ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค(๋กœ๊ฑฐ๋Š” ์กด์žฌํ•˜์ง€ ์•Š๋Š” ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ์ƒ์„ฑํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค). ๊ทธ ์™ธ์—๋„ ๊ฒฝ๋กœ์— ๋ฐฑ์Šฌ๋ž˜์‹œ๋ณด๋‹ค ์Šฌ๋ž˜์‹œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๋” ์•ˆ์ „ํ•ฉ๋‹ˆ๋‹ค.

typescripterrors
:(

@billti ์ข‹์•„, ๋ฐฉ๊ธˆ ํ™•์ธํ–ˆ๊ณ  ๋กœ๊ทธ ํŒŒ์ผ์ด ์ด์ œ ๊ฑฐ๊ธฐ์— ์žˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์— ์ฒจ๋ถ€๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.
tss-log.zip

๊ฐ์‚ฌ ํ•ด์š”. ๋‚˜๋Š” ๊ทธ ๋กœ๊ทธ๋ฅผ ์‚ดํŽด๋ณด์•˜๊ณ  ๊ทธ ์•ˆ์— ์žˆ๋Š” ์–ด๋–ค ํ˜ธ์ถœ์—์„œ๋„ ๋ณด๊ณ ๋œ ์˜ค๋ฅ˜๋ฅผ ๋ณด์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด ๋กœ๊ทธ๊ฐ€ ๋‹ค๋ฃจ๋Š” ์‹œ๊ฐ„ ํ”„๋ ˆ์ž„์— ์˜ค๋ฅ˜๊ฐ€ ํ™•์‹คํžˆ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๊นŒ?

@billti ์˜ˆ, ์˜ค๋ฅ˜๊ฐ€ ํ•ญ์ƒ ๋ฐœ์ƒํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
screen shot 2017-04-11 at 01 25 24

๊ทธ๋“ค์€ ์˜๊ตฌ์ ์œผ๋กœ ๊ฑฐ๊ธฐ์— ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋ชจ๋“  ๋‹จ์ผ ๋นŒ๋“œ์—์„œ ์ƒˆ๋กœ ๊ณ ์ณ์กŒ์Šต๋‹ˆ๋‹ค.

์ž˜๋ชป๋œ ๋ณ€์ˆ˜ ์„ ์–ธ๊ณผ ๊ด€๋ จ๋œ ๋ชจ๋“  ์˜ค๋ฅ˜(๋‹ค์Œ ๋ฆด๋ฆฌ์Šค์— ๋Œ€ํ•ด ์ด๋ฏธ ์ˆ˜์ •๋œ ๋ณ„๋„์˜ ๋ฌธ์ œ). ์ด ๋ฌธ์ œ๋Š” ์œ„์˜ ์ œ๋ชฉ๊ณผ ์Šคํฌ๋ฆฐ์ƒท๋‹น ์•ฝ Cannot write file... ์ž…๋‹ˆ๋‹ค. Cannot write file... ๋ฌธ์ œ๊ฐ€ ์—†๋‚˜์š”?

@billti ๋‚ด ์ด์ „ ๋ฉ”์‹œ์ง€๋ฅผ ๊ฒŒ์‹œํ•œ ํ›„(๋‚ด ์–ด๋ฆฌ์„์Œ์˜ ์‹œ์—ฐ์œผ๋กœ ๋‚จ๊ฒจ๋‘”) ์˜ค๋ฅ˜๊ฐ€ ๋‹ค๋ฅธ ์ข…๋ฅ˜๋ผ๋Š” ๊ฒƒ์„ ๊นจ๋‹ฌ์•˜์Šต๋‹ˆ๋‹ค. ๋ฉฐ์น  ์ „์— ์„ค์น˜ํ•œ Visual Studio ์—…๋ฐ์ดํŠธ๊ฐ€ ์›๋ž˜ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ–ˆ๋Š”์ง€ ์ถ”์ธกํ•  ๋ฟ์ž…๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ํ™•์‹คํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
@types์—์„œ ์œ ํ˜•์„ ์ œ๊ฑฐํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด ์ด์ „ ๋ฉ”์‹œ์ง€์—์„œ ์ด๋Ÿฌํ•œ ์˜ค๋ฅ˜๋ฅผ ์ œ๊ฑฐํ–ˆ์Šต๋‹ˆ๋‹ค.
์ •๋ง ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

@billti ๋ณด๋‚ด๋“œ๋ฆด ๋กœ๊ทธ๊ฐ€ ๋ช‡ ๊ฐœ ์žˆ์ง€๋งŒ ์ƒ์„ฑ๋œ ๋กœ๊ทธ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ๋‚ด ์‹œ์Šคํ…œ(์‚ฌ์šฉ์ž ์•„๋‹˜) ๋ณ€์ˆ˜์—์„œ TSS_LOG ๋ฅผ -file C:/temp/logs/tsserver.log -level verbose ํ–ˆ์Šต๋‹ˆ๋‹ค.

C:\temp\logs ์ด ์กด์žฌํ•˜๊ณ  Everyone ๋ชจ๋“  ๊ถŒํ•œ์„ ๋ถ€์—ฌํ–ˆ์Šต๋‹ˆ๋‹ค.

VS2015๋ฅผ ๋‹ค์‹œ ์‹œ์ž‘ํ•˜๋ฉด Cannot write file... ์˜ค๋ฅ˜๊ฐ€ ๋ชจ๋‘ ๋ฐœ์ƒํ•œ ํ›„์—๋„ C:\temp\logs ์•ˆ์— ์•„๋ฌด ๊ฒƒ๋„ ์ƒ์„ฑ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ƒˆ ๋ช…๋ น ํ”„๋กฌํ”„ํŠธ์— node node_modules\typescript\lib\tsserver.js (๊ทธ๋ฆฌ๊ณ  ์ฆ‰์‹œ CTRL+C)๋ฅผ ์ž…๋ ฅํ•˜๋ ค๊ณ  ํ•˜๋ฉด ๋‘ ๊ฐœ์˜ ๋กœ๊ทธ ํŒŒ์ผ์ด ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค.

@kevindqc ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. VS 2015๋ฅผ ์‚ฌ์šฉ ์ค‘์ธ์ง€ ๋ชฐ๋ž์Šต๋‹ˆ๋‹ค. ํ•ด๋‹น ๋กœ๊น…์€ VS 2017์—๋งŒ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค(ํ˜„์žฌ ์–ธ์–ด ์„œ๋น„์Šค์—์„œ tsserver.js๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์Œ).

๋Œ์•„๊ฐ€์„œ ๋ฌธ์ œ๋ฅผ ์‚ดํŽด๋ณด๋ฉด ์˜ค๋ฅ˜ ๋ชฉ๋ก์ด ๋ฌด์ž‘์œ„๋กœ ๋ณ€๊ฒฝ๋˜๋Š” ๊ฒฝ์šฐ @zhengbli ๊ฐ€ https://github.com/Microsoft/TypeScript/pull/15080 ์—์„œ ๋ฐฉ๊ธˆ ์ˆ˜์ •ํ•œ ๊ฒƒ๊ณผ ๋™์ผํ•œ ๋ฌธ์ œ๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

@billti np. ์ด ๋ฌธ์ œ๋Š” VS2015์—์„œ๋งŒ ๋ฐœ์ƒํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. VS2017์„ ์‚ฌ์šฉํ•˜๋Š” ๋ฐ ๋ฌธ์ œ๊ฐ€ ์žˆ๋Š” ์œ ์ผํ•œ ์‚ฌ์šฉ์ž๋Š” ์ž…๋ ฅ๊ณผ ๊ด€๋ จ๋œ ๋‹ค๋ฅธ ์˜ค๋ฅ˜๊ฐ€ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. VS2015์—์„œ VS2017๋กœ ์ „ํ™˜ํ•œ ์‚ฌ๋žŒ์€ ๋ฌธ์ œ๊ฐ€ ์‚ฌ๋ผ์กŒ๋‹ค๊ณ  ๋งํ–ˆ์Šต๋‹ˆ๋‹ค.

๋˜ํ•œ ์˜ค๋ฅ˜ ๋ชฉ๋ก์€ ์ž„์˜๋กœ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ์˜ ์›์ธ์ด ๋˜๋Š” ๋ชจ๋“  "Cannot write .." ์˜ค๋ฅ˜์™€ ํ•จ๊ป˜ ์ž„์˜์˜ ์‹œ๊ฐ„์— ํ•œ ๋ฒˆ ์ฑ„์›Œ์ง‘๋‹ˆ๋‹ค. #15080์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•œ๋‹ค๊ณ  ํ™•์‹ ํ•ฉ๋‹ˆ๊นŒ? ์–ด์ œ ์–ธ๊ธ‰ํ•œ ๋‚ด์šฉ ์™ธ์—๋Š” ์ด ๋ฌธ์ œ์— ๋Œ€ํ•ด ์•„๋ฌด ๊ฒƒ๋„ ๋ณผ ์ˆ˜ ์—†์Šต๋‹ˆ๊นŒ? ์–ด๋–ป๊ฒŒ ํ…Œ์ŠคํŠธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? 2.3 RC๊ฐ€ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ์ง€๋งŒ 2์ผ ์ „์— ์ˆ˜์ • ์‚ฌํ•ญ์ด ๋ณ‘ํ•ฉ๋œ ๋™์•ˆ 9์ผ ์ „์— ๋ฆด๋ฆฌ์Šค๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

๋˜ํ•œ ์†”๋ฃจ์…˜์„ ๋‹ซ์€ ํ›„์—๋„ ์˜ค๋ฅ˜๊ฐ€ ๋‚ด ์˜ค๋ฅ˜ ๋ชฉ๋ก์— ๋‚จ์•„ ์žˆ์Œ์„ ์•Œ์•˜์Šต๋‹ˆ๋‹ค.

๋˜ํ•œ ์ž์‹ ์˜ typescript ๊ฐ€์ƒ ํ”„๋กœ์ ํŠธ๋ฅผ ๊ฒŒ์‹œํ•œ ์‚ฌ๋žŒ์ด ๋‹ค๋ฅธ ์˜ค๋ฅ˜๋ฅผ ๊ฐ€์ง„ ์‚ฌ๋žŒ์ด์—ˆ์œผ๋ฏ€๋กœ ๋„์›€์ด ๋˜์ง€ ์•Š์•˜์œผ๋ฆฌ๋ผ ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ ๋‚ด ๊ฒƒ์ž…๋‹ˆ๋‹ค:
image

node_modules ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๊นŒ? ๋‚ด tsconfig ์ œ์™ธ์— ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚ด ๋ฌผ๋ฆฌ์  node_modules ํด๋”์— ์žˆ๋Š” ๋ชจ๋“  ํ•ญ๋ชฉ์ด ํฌํ•จ๋˜์–ด ์žˆ์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค(๋‚ด node_modules ํด๋”์˜ 14๊ฐœ ํ•˜์œ„ ํด๋” ๋Œ€ 854๊ฐœ ํ•˜์œ„ ํด๋”).

{
  "compilerOptions": {
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    "module": "commonjs",
    "moduleResolution": "node",
    "noImplicitAny": true,
    "removeComments": false,
    "sourceMap": true,
    "suppressImplicitAnyIndexErrors": true,
    "target": "es5",
    "baseUrl": "./src",
    "skipLibCheck": true,
    "paths": {
    },
    "typeRoots": [
      "node_modules/@types"
    ]
  },
  "exclude": [
    "node_modules",
    "dist",
    "typings"
  ],
  "types": [
    "core-js",
    "jasmine",
    "lodash",
    "node",
    "webpack"
  ],
  "awesomeTypescriptLoaderOptions": {
    "forkChecker": true,
    "useWebpackText": true
  }
}

TS2.3 ๋„๊ตฌ๋กœ ์—…๊ทธ๋ ˆ์ด๋“œํ•œ ํ›„ ์ง€๊ธˆ๊นŒ์ง€ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ๊ฐ์‚ฌ ํ•ด์š”!
ํŽธ์ง‘: ์•„๋‹™๋‹ˆ๋‹ค. ์˜ค๋ฅ˜๋Š” ์—ฌ์ „ํžˆ ์กด์žฌํ•˜๋ฉฐ ํ‘œ์‹œ๋˜๋Š” ๋ฐ ์‹œ๊ฐ„์ด ๋” ์˜ค๋ž˜ ๊ฑธ๋ ธ์Šต๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ์™€ ๊ด€๋ จ๋œ ๊ฒƒ์œผ๋กœ ๋ณด์ธ๋‹ค ์ด ๋ฌธ์ œ . ์žฌํ˜„ํ•  ์ƒ˜ํ”Œ ์†”๋ฃจ์…˜ - ์—…๋กœ๋“œ๋จ.

๋‚˜๋ฅผ ์œ„ํ•œ ํ•ด๊ฒฐ์ฑ…์„ ์ฐพ์•˜์Šต๋‹ˆ๋‹ค. ์ œ ๊ฒฝ์šฐ์—๋Š” files ๋ฐฐ์—ด์„ ์ง€์ •ํ•˜์ง€ ์•Š๊ณ  outDir ๋ฐ rootDir ๋ฅผ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค. outDir ์˜ ๊ฒฝ๋กœ๋ฅผ exclude ๋ฐฐ์—ด์— ์ถ”๊ฐ€ํ•˜๋ฉด ๋ชจ๋“  ๊ฒƒ์ด ์ •์ƒ์ ์œผ๋กœ ์ž‘๋™ํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

{
    "compilerOptions": {
        ...,
        "outDir": "./dist",
        "rootDir": "./src",
    },
    "exclude": [
        "node_modules",
        "dist" <-- I had to add this to fix the errors
    ]
}

์•„๋งˆ๋„ TypeScript๋Š” outDir ๋กœ ์„ค์ •๋˜์–ด ์žˆ์–ด๋„ dist ํด๋”์˜ ๋‚ด์šฉ์„ ๊ฐ์‹œํ•˜๊ณ  ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

ํ”„๋กœ์ ํŠธ ๋ฃจํŠธ ์•„๋ž˜์— outDir ๊ฐ€ ์žˆ๊ณ  ๋ฃจํŠธ ์•„๋ž˜์— ๋ชจ๋“  ๊ฒƒ์„ ํฌํ•จํ•˜๋Š” ๊ฒฝ์šฐ ์˜ˆ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ํ”„๋กœ์ ํŠธ ์†Œ์Šค ํด๋”๊ฐ€ ์•„๋‹Œ ๋‹ค๋ฅธ ์œ„์น˜์—์„œ ๋นŒ๋“œ ์ถœ๋ ฅ์„ ์›ํ•ฉ๋‹ˆ๋‹ค.

์œ„์˜ ๋ชจ๋“  ๋ฌธ์ œ๋Š” ์ด ์Šค๋ ˆ๋“œ ๋˜๋Š” ์—ฐ๊ฒฐ๋œ ๋ฌธ์ œ์—์„œ ํ•ด๊ฒฐ๋œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์€ ๊ฒฝ์šฐ ์•Œ๋ ค์ฃผ์‹œ๋ฉด ๋‹ค์‹œ ์—ด๊ฒ ์Šต๋‹ˆ๋‹ค. ๊ฐ์‚ฌ ํ•ด์š”!

@billti ๊ท€ํ•˜์˜ ์˜๊ฒฌ์ด ๋‚ด ์ด์ „ ์˜๊ฒฌ์— ๋Œ€ํ•œ ์‘๋‹ต์ด๋ผ๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๊นŒ? ๊ทธ๋ ‡๋‹ค๋ฉด ๋ช…ํ™•ํžˆ ํ•ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ rootDir ์ง€์ •ํ•  ๋•Œ ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ํ•ด๋‹น ํŠน์ • ํด๋”๋งŒ ๊ฐ์‹œํ•˜๊ณ  ๋‹ค๋ฅธ ๋ชจ๋“  ๊ฒƒ์„ ์ œ์™ธํ•  ๊ฒƒ์ด๋ผ๊ณ  ๊ฐ€์ •ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ฌธ์ œ๊ฐ€ ๋” ๋ช…ํ™•ํ•ด์กŒ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ํ˜„์žฌ์˜ ํ–‰๋™์€ ์˜๋ฏธ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฐ€์žฅ ์ข‹์€ ์†”๋ฃจ์…˜์€ borislemke ์—์„œ ์ œ๊ณตํ•˜๋Š”
{ "compilerOptions": { ..., "outDir": "./dist", "rootDir": "./src", }, "exclude": [ "node_modules", "dist" <-- I had to add this to fix the errors ] }

๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜์—ฌ ๋‚ด ๊ฐ€์ ธ์˜ค๊ธฐ ์ค‘ ํ•˜๋‚˜๊ฐ€ ๋‚ด dist ํด๋” EG์˜ ํด๋ž˜์Šค๋ฅผ ์ž˜๋ชป ์ฐธ์กฐํ•˜๊ณ  ์žˆ์Œ์„ ๋ฐœ๊ฒฌํ–ˆ์Šต๋‹ˆ๋‹ค.
"../../dist/ClassName"์—์„œ {ClassName} ๊ฐ€์ ธ์˜ค๊ธฐ;

๊ฐ€์ ธ์˜ค๊ธฐ ํด๋ž˜์Šค๊ฐ€ ๋™์ผํ•œ ํด๋”์— ์žˆ์œผ๋ฏ€๋กœ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ณ€๊ฒฝํ–ˆ์Šต๋‹ˆ๋‹ค.
"./ClassName"์—์„œ {ClassName} ๊ฐ€์ ธ์˜ค๊ธฐ;

๋ชจ๋“  ๊ฒƒ์ด ๋‹ค์‹œ ์ปดํŒŒ์ผ๋ฉ๋‹ˆ๋‹ค. :)

์•ฑ์— ๋ฏธ๋ฆฌ ์ •์˜๋œ 'dist' ํด๋”๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์„ ์‚ญ์ œํ•˜๋ฉด ๋‚˜๋ฅผ ์œ„ํ•ด ๊ณ ์ณค์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์ด ๊ทผ๋ณธ์ ์ธ ๋ฌธ์ œ๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค(๋งˆ์ง€๋ง‰ Windows Creators Update).
visual-studio-2015-deletes-file-on-save-cordova-solution

tsconfig.json์˜ ์ œ์™ธ ๋ชฉ๋ก์— "dist" ํด๋”๋ฅผ ์ถ”๊ฐ€ํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.
์ „:
"์ œ์™ธ": ["๋…ธ๋“œ ๋ชจ๋“ˆ", "๊ฑฐ๋ฆฌ"]

Include ์„น์…˜์„ ์ถ”๊ฐ€ํ•˜์—ฌ ์ด๊ฒƒ์„ ์ˆ˜์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.

"include": [ "*.ts", ], "exclude": [ "node_modules" ]

๋‚ด ์†Œ์Šค ๋””๋ ‰ํ† ๋ฆฌ ์•„๋ž˜์— ์žˆ๋Š” outDir ๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ๋„ ์ด ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.

typescript ์ปดํŒŒ์ผ๋Ÿฌ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ outDir ์—์„œ ์ปดํŒŒ์ผ์„ ์‹œ๋„ํ•˜์ง€ ์•Š์•„์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ์ง€ ๋ชปํ•ฉ๋‹ˆ๊นŒ? ์ด์ƒํ•œ ๊ฒƒ ๊ฐ™๋‹ค. ์ œ์™ธ ๋ชฉ๋ก์— outdir์„ ์ถ”๊ฐ€ํ•˜๋ฉด ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

netbeans lol ๐Ÿ‘Ž์— ์ด ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

foo.ts ๋ฐ foo.tsx ๋‘ ํŒŒ์ผ์ด ์žˆ์„ ๋•Œ๋„ ์ด ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‘˜ ๋‹ค ๋ถ„๋ช…ํžˆ foo.js ์ปดํŒŒ์ผ๋ฉ๋‹ˆ๋‹ค.

  "compilerOptions": {
    "noEmit": true 
  }

๋‚˜๋ฅผ ์œ„ํ•ด ๊ทธ๊ฒƒ์„ ๊ณ ์ณค๋‹ค.

noEmit ์‚ฌ์šฉ์ž๊ฐ€ ์ƒ์„ฑ ํ•œ ํ•  ๊ฒฝ์šฐ ๋” ๋‚˜์€ ์†”๋ฃจ์…˜์ž…๋‹ˆ๋‹ค *.js ๋ถ„์„ ํ•  ํŒŒ์ผ์„. ๊ฒฐ๊ตญ tsc ์ƒ์„ฑ๋˜๋Š” ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค.

์ œ ๊ฒฝ์šฐ์—๋Š” Ream.js๊ฐ€ .ream/**.js ๋ฅผ ์ƒ์„ฑํ•œ ๋‹ค์Œ ๋‚ด ์ฝ”๋“œ์—์„œ import XXX from '#out/yyy' ๋กœ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค(์ž‘๋™ํ•˜์ง€๋งŒ VS Code์—์„œ "Cannot write file..."๋ผ๋Š” ๊ฒฝ๊ณ ๊ฐ€ ์ƒ์„ฑ๋จ).

๊ธฐ๋ณธ์ ์œผ๋กœ "noEmit": false ๊ฐ€ ์žˆ๋Š” ์œ ์ผํ•œ ์ด์œ ๋Š” ์›์‹œ tsc ๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ์ž…๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ๋ชจ๋“  ํ™˜๊ฒฝ( ts-node / ts-node-dev , webpack, ๋กค์—…)์˜ ๊ฒฝ์šฐ ํ™œ์„ฑํ™”ํ•˜๋Š” ๊ฒƒ์ด ๋” ์•ˆ์ „ํ•ฉ๋‹ˆ๋‹ค.

@uglycoyote ์ฒ˜๋Ÿผ ๋‚˜๋ฅผ ์œ„ํ•ด ์ผํ•œ ๊ฒƒ์€ ์ œ์™ธ ๋ฐฐ์—ด์— outdir ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ด์—ˆ์Šต๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ์ œ์•ˆ์€ ํšจ๊ณผ๊ฐ€ ์—†์—ˆ์Šต๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ๋Š” ๋‹ค์Œ๊ณผ ๊ด€๋ จ์ด ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ ์„ค์ • ๋•Œ๋ฌธ์— ๋ฌธ์ œ๊ฐ€ ๋‚˜์—๊ฒŒ ๋ฌด์Šจ ์ผ์ด ์ผ์–ด๋‚˜๊ณ  "declaration": true ์—์„œ tsconfig.json ๊ฐ€ ํ™”๊ฐ€ ์–ป๋Š”๋‹ค, ๊ทธ๋ž˜์„œ d.ts ๋””๋ ‰ํ† ๋ฆฌ๊ฐ€ ๋ฐ–์—์„œ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ , ๋นŒ๋“œ ํด๋”์—์žˆ๋Š” ํŒŒ์ผ ๋ฟŒ๋ฆฌ. ๋ฌธ์ œ๊ฐ€ ์—†๋Š” ์ƒˆ ๋นŒ๋“œ๋ฅผ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ๊ทธ ์ดํ›„์˜ ๋นŒ๋“œ๋Š” Cannot write file ... because it would overwrite input file. ํ•ฉ๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ๋‹ค๋ฅธ ์ด์•ผ๊ธฐ์—์„œ ๋ณผ ์ˆ˜ ์žˆ์—ˆ๋˜ ๊ฒƒ์—์„œ, ์ด๊ฒƒ์€ ๋‹ค๋ฅธ ๋ฒ„์ „์—์„œ ์ž‘๋™ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜์—ˆ์ง€๋งŒ ๋ฌด์–ธ๊ฐ€๊ฐ€ ๋ณ€๊ฒฝ๋˜์—ˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

test.ts ํŒŒ์ผ์ด rootDir ์™ธ๋ถ€์— ์žˆ๋‹ค๋Š” ๋ฌธ์ œ๋ฅผ ์ˆ˜์ •ํ•œ ๊ฒƒ์ฒ˜๋Ÿผ tsconfig.json ๋‹ค์Œ์„ ์ถ”๊ฐ€ํ•ด์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค.

"exclude:" [ "./build" ]

์ด๊ฒƒ์€ ๊ตฌ์„ฑ ์ƒ์†์—์„œ๋„ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ ๊ตฌ์„ฑ์€ outDir ๋ณ„๋„๋กœ ์ง€์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. outDir ์˜ ๊ฒฝ๋กœ๋Š” ์ ˆ๋Œ€์ ์œผ๋กœ ํ•ด๊ฒฐ๋œ ๊ฒƒ์œผ๋กœ ๋ณด์ž…๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž์˜ ๊ด€์ ์—์„œ ๋ณด๋ฉด ๋ฒ„๊ทธ์ผ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

{
  "extends": "../../base/tsconfig.json",
  "compilerOptions": {
    "outDir": "myOutDir"  // <--- Don't forget this
  }
}

package.json ์—์„œ "outDir"์— ๋Œ€ํ•œ ์ž˜๋ชป๋œ ์ฐธ์กฐ๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ์—๋„ ํ™•์ธํ•  ๊ฐ€์น˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

"main": "lib/index.js",
  "typings": "lib/__types__",      <-------
  "devDependencies": {
    "@types/lodash.mapvalues": "^4.6.4",
    "@types/node": "^10.12.18",
    "@types/winston": "^2.4.4"
  }

ํ”„๋กœ์ ํŠธ ์ฐธ์กฐ๊ฐ€ ์žˆ๋Š” ํ”„๋กœ์ ํŠธ์—์„œ ์ด๊ฒƒ์„ ๊ฒฝํ—˜ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ œ์™ธ ํ•ญ๋ชฉ์€ ์ค‘์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. @elmpp๊ฐ€ ์•”์‹œํ•˜๋Š” typings ํ•ญ๋ชฉ์ด ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

๋”ฐ๋ผ์„œ ํ”„๋กœ์ ํŠธ ์ฐธ์กฐ monorepo์—์„œ TS5055: Cannot write file because it would overwrite input file ๊ฐ€ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.

  "main": "lib/cjs/index.js",
  "module": "lib/esm/index.js",
  "typings": "lib/cjs/index.ts",

๊ทธ๋Ÿฌ๋‚˜ ์ด๊ฒƒ์€ ์˜ค๋ฅ˜๋ฅผ ๋ณด๊ณ ํ•˜์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค:

  "main": "lib/cjs/index.js",
  "module": "lib/esm/index.js",
  "typings": "src/index.ts",

๋”ฐ๋ผ์„œ ๋ถ„๋ช…ํžˆ ์ด ์‚ฌ์ „ ๊ฒŒ์‹œ๋ฅผ ์กฐ์ž‘ํ•˜๊ฑฐ๋‚˜ ํŒจํ‚ค์ง€์— src๋ฅผ ๊ฒŒ์‹œํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

ํ™˜๊ฒฝ:

"exclude": [
    "node_modules",
    "dist"
  ]

๋‚˜๋ฅผ ์œ„ํ•ด ๊ณ ์ณค์Šต๋‹ˆ๋‹ค (๋‚ด outputDir ๋Š” dist ).

tsc --watch ๋Œ€ํ•ด ๊ธฐ๋ณธ์ ์œผ๋กœ ์ถœ๋ ฅ dir์ด ์ œ์™ธ๋˜๋ฉด ๊ต‰์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚˜์ค‘์— ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ๋„๋ก ์ž์ฒด ๋‚ด์—์„œ ๋ชจ๋“ˆ์„ ๊ฐ€์ ธ์˜ค๋ฉด ์ด ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ mymodule ๋‚ด๋ถ€์—์„œ import x from 'mymodule ํ•˜๋ฉด ์ด๋ฅผ ํŠธ๋ฆฌ๊ฑฐํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ ๋งค์šฐ ๋น„๋ฐ€์Šค๋Ÿฝ๊ณ  ์•„๋งˆ๋„ ์ˆ˜์ •๋˜์–ด์•ผ ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค!

์œ ์‚ฌํ•˜๊ฒŒ, export * from './foo' ์™€ ๊ฐ™์€ ํ–‰์ด ๋งŽ์€ index.ts ๊ฐ€ ์žˆ๊ณ  ํ•ด๋‹น ํŒŒ์ผ ์ค‘ ํ•˜๋‚˜์—์„œ import foo from '.' ์•„๋‹Œ import foo from './foo' ๋‚ด๋ณด๋‚ธ ํŒŒ์ผ ์ค‘ ํ•˜๋‚˜์—

index.ts ์‚ญ์ œํ•˜๊ณ  ๊ฐ€์ ธ์˜ค๊ธฐ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•  ๋•Œ๊นŒ์ง€ ์ง€๋‚œ ์ดํ‹€ ๋™์•ˆ ์ด๊ฒƒ์— ๋Œ€ํ•ด ๋จธ๋ฆฌ๋ฅผ ๋ถ€๋”ช์ณค์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ ๋งค์šฐ ๋ถ„๋ช…ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ ๋ฌธ์ œ๋Š” ๊ฐ™์€ ์ €์žฅ์†Œ์— 2๊ฐœ์˜ ts ํ”„๋กœ์ ํŠธ๊ฐ€ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ( Angular & Nestjs ), ๋ ˆ๋ฒจ 1 ํด๋”์˜ tsconfig.json์—์„œ ์ด ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ๊ณต๊ฐœ์ ์œผ๋กœ ์ž์ฒด tsconfig.json์ด ์žˆ๋Š” ๋‚ด Angular ์ฝ”๋“œ์ธ exclude "public" ์„ ๋„ฃ์–ด ์ˆ˜์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.

ts-node ์ด ์ž‘๋™ํ•˜์ง€ ์•Š๋Š” ์ด์œ ๋ฅผ ํ™•์‹ ํ•  ์ˆ˜ ์—†์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ ๋ฌธ์ œ๊ฐ€ TypeScript์ธ์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด tsc ํ–ˆ์Šต๋‹ˆ๋‹ค. tsc ์˜ ๊ฒฐ๊ณผ๋กœ ์ด์ œ git status ์‹คํ–‰ํ•˜์—ฌ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋Š” ts ์™€ ํ•จ๊ป˜ ์ˆ˜์‹ญ ๊ฐœ์˜ .js ํŒŒ์ผ์„ ๊ฐ–๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

image

ํ•ด๊ฒฐ์ฑ…์€ git clean -f ์ด์—ˆ์Šต๋‹ˆ๋‹ค.

๋‚ด ๊ฒฝ์šฐ, VS ์ฝ”๋“œ ์ž๋™์ฐจ๊ฐ€์—์„œ ํŒŒ์ผ ๊ฐ€์ ธ ์˜ค๊ธฐ ํ•œ ๊ฒƒ์œผ๋กœ ๋ณด์ธ๋‹ค dist ํด๋” ๋Œ€์‹ ์—์„œ src ํด๋”์— ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์„ ์ˆ˜์ •ํ•˜๋ฉด ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ์‹ค์ œ๋กœ ๋‹ซํžˆ์ง€ ์•Š์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค. typescript๋Š” ๋ฌด์Šจ ์ผ์ด ์ผ์–ด๋‚˜๊ณ  ์žˆ๋Š”์ง€ ์•Œ๋ ค์ฃผ๋Š” ์˜ค๋ฅ˜๋ฅผ ์ถœ๋ ฅํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํ˜„์žฌ๋กœ์„œ๋Š” ํŒŒ์•…ํ•˜๊ธฐ๊ฐ€ ๊ฑฐ์˜ ๋ถˆ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ์™œ ๊ทธ๋ ‡๊ฒŒ ์ž์ฃผ ๋ฐœ์ƒํ•˜๋Š”์ง€ ์ž˜ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค. VSCode๊ฐ€ ์‹ค์ˆ˜๋กœ tsconfig.json ์ฐธ์กฐ๋ฅผ ์—…๋ฐ์ดํŠธํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ๋ชจ๋“  ๊ฒƒ์ด ๋Š๋ ค์ง€๊ณ  ๋งค๋ฒˆ ๋””๋ฒ„๊ทธํ•˜๋Š” ๊ฒƒ์ด ์‰ฝ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

Vue ํ”„๋กœ์ ํŠธ์˜ ๋ฃจํŠธ์—์„œ ์ด๊ฒƒ์€ ์ €์—๊ฒŒ ํšจ๊ณผ์ ์ด์—ˆ์Šต๋‹ˆ๋‹ค.

// tsconfig.json
{
    "include": ["./src/**/*"],
    "exclude": ["node_modules", "dist", "public"],
    "compilerOptions": {
      "module": "es2015",
      "outDir": "",
      "moduleResolution": "node",
      "target": "es5",
      "allowJs": true,
      "checkJs": true, // Type checking
    }
}

๋‚ด๊ฐ€ ์ถ”๊ฐ€ํ•œ ํ›„
"outDir": "",
๋ฌธ์ œ๊ฐ€ ์‚ฌ๋ผ์กŒ์Šต๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์„œ ๋‚ด ๋ชฉํ‘œ๋Š” .js/vue ํŒŒ์ผ์—์„œ ts ์ธํ…”๋ฆฌ์ „์Šค๊ฐ€ ์ž‘๋™ํ•˜๋„๋ก ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ฐ™์€ ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€๊ฐ€ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๋ฌธ์ œ๋Š” ๊ฐ™์€ ํด๋”์— ์ด๋ฆ„์€ ๊ฐ™์ง€๋งŒ ํ™•์žฅ์ž๊ฐ€ ๋‹ค๋ฅธ ๋‘ ๊ฐœ์˜ ํŒŒ์ผ์ด ์žˆ์œผ๋ฏ€๋กœ .js ํ™•์žฅ์ž๋ฅผ ๊ฐ€์ง„ ํŒŒ์ผ์„ ์ œ๊ฑฐํ•˜๋ฉด ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ฐ™์€ ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€๊ฐ€ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๋ฌธ์ œ๋Š” ๊ฐ™์€ ํด๋”์— ์ด๋ฆ„์€ ๊ฐ™์ง€๋งŒ ํ™•์žฅ์ž๊ฐ€ ๋‹ค๋ฅธ ๋‘ ๊ฐœ์˜ ํŒŒ์ผ์ด ์žˆ์œผ๋ฏ€๋กœ .js ํ™•์žฅ์ž๋ฅผ ๊ฐ€์ง„ ํŒŒ์ผ์„ ์ œ๊ฑฐํ•˜๋ฉด ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์˜ˆ, ๋‚˜๋Š” ๊ฐ™์€ ๋ฌธ์ œ๊ฐ€์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. VS-Code๊ฐ€ ์œ ์šฉํ•˜๊ฒŒ ๋‹ค์‹œ ๋งŒ๋“  .tsx ํŒŒ์ผ์˜ ์ด๋ฆ„์„ .ts ๋ณ€๊ฒฝํ•˜์—ฌ ๋ฌธ์ œ๋ฅผ ์ผ์œผ์ผฐ์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์„ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ž˜ ๋ชจ๋ฅด๊ฒ ์ง€๋งŒ ์ œ ๊ฒฝ์šฐ์—๋Š” tsconfig.json์—์„œ "declaration": true ๋ฅผ ์ œ๊ฑฐํ–ˆ์Šต๋‹ˆ๋‹ค. D.ts ํŒŒ์ผ์€ ์ƒ์„ฑ๋˜์ง€ ์•Š์ง€๋งŒ ์–ด์จŒ๋“  ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋น„์Šทํ•œ ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€๋ฅผ ๊ฒ€์ƒ‰ํ•˜์—ฌ ์—ฌ๊ธฐ์— ์˜จ ์‚ฌ๋žŒ์—๊ฒŒ ๋‚ด ๋ฐœ๊ฒฌ์„ ๊ณต์œ ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

  1. ์ฝ์„ ์ˆ˜ ์žˆ๋“ฏ์ด ์ด ์˜ค๋ฅ˜๋Š” TypeScript ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ .js ํŒŒ์ผ์„ ๋™์ผํ•œ ๊ฒฝ๋กœ๋กœ ์ปดํŒŒ์ผํ•˜๋ ค๊ณ  ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.
  2. ๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ .js ํŒŒ์ผ์„ ์ปดํŒŒ์ผํ•˜๊ณ  ์‹ถ์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ฐ€๋Šฅํ•˜๋ฉด tsconfig.json์—์„œ allowJs: true ๋ฅผ ์ œ๊ฑฐํ•˜๊ฑฐ๋‚˜ CLI ์˜ต์…˜์—์„œ --allow-js ์ œ๊ฑฐํ•˜์‹ญ์‹œ์˜ค.
  3. ํ™•์‹คํžˆ ํ•„์š”ํ•œ ๊ฒฝ์šฐ ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€์— ์–ธ๊ธ‰๋œ ํŒŒ์ผ์„ ์ปดํŒŒ์ผ์—์„œ ์ œ์™ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์Šค๋ ˆ๋“œ์˜ ์ผ๋ถ€ ์‚ฌ๋žŒ๋“ค์€ exclude: ... ๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ (์•„๋งˆ๋„ ๋ˆˆ์น˜์ฑ„์ง€ ๋ชปํ•œ ์ฑ„) ๊ทธ๋ ‡๊ฒŒ ํ–ˆ์Šต๋‹ˆ๋‹ค.

    • compilerOptions ์•„๋ž˜ ์— 'exclude'๋ฅผ ์ถ”๊ฐ€ํ•˜์ง€ ์•Š๋„๋ก ์ฃผ์˜ํ•˜์‹ญ์‹œ์˜ค.

๋„์›€์ด ๋˜๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค๐Ÿ™

๋‚ด ๋นŒ๋“œ lib/ ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ์ˆ˜๋™์œผ๋กœ ์ œ์™ธํ•ด์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค.

์ผ๋ถ€ ์˜ต์…˜์„ ํ˜ธํ™˜๋˜์ง€ ์•Š๊ฒŒ ๋งŒ๋“œ๋Š” ๋ฒ„๊ทธ๊ฐ€ ์žˆ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ๊ทธ๊ฒƒ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ์•Œ์•˜๋‹ค.
allowJS true +
rootDir + outDir : ํ™•์ธ
rootDir + outFile : NOK : rootDir ๊ณ ๋ ค๋˜์ง€ ์•Š์Œ : dir ๋ฐ subdir์˜ ๋ชจ๋“  ํŒŒ์ผ์ด ์ปดํŒŒ์ผ๋˜๊ณ  ์ž ์žฌ์ ์œผ๋กœ ๋ฎ์–ด์“ฐ๋„๋ก ์„ค์ •๋ฉ๋‹ˆ๋‹ค.
์ผ๋ถ€ ๋‹ค๋ฅธ ์˜ต์…˜ ์กฐํ•ฉ์€ ๊ธˆ์ง€๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

"allowJs": true
"noEmit": true
๋‚˜๋ฅผ ์œ„ํ•ด ์ผํ•˜์‹ญ์‹œ์˜ค.

Vue ํ”„๋กœ์ ํŠธ์˜ ๋ฃจํŠธ์—์„œ ์ด๊ฒƒ์€ ์ €์—๊ฒŒ ํšจ๊ณผ์ ์ด์—ˆ์Šต๋‹ˆ๋‹ค.

// tsconfig.json
{
    "include": ["./src/**/*"],
    "exclude": ["node_modules", "dist", "public"],
    "compilerOptions": {
      "module": "es2015",
      "outDir": "",
      "moduleResolution": "node",
      "target": "es5",
      "allowJs": true,
      "checkJs": true, // Type checking
    }
}

๋‚ด๊ฐ€ ์ถ”๊ฐ€ํ•œ ํ›„
"outDir": "",
๋ฌธ์ œ๊ฐ€ ์‚ฌ๋ผ์กŒ์Šต๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์„œ ๋‚ด ๋ชฉํ‘œ๋Š” .js/vue ํŒŒ์ผ์—์„œ ts ์ธํ…”๋ฆฌ์ „์Šค๊ฐ€ ์ž‘๋™ํ•˜๋„๋ก ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

thx, ๊ทธ๊ฒƒ์€ ๋‚˜๋ฅผ ์œ„ํ•ด ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

์œ ํ˜• ๊ฒ€์‚ฌ (์ปดํŒŒ์ผ ์—†์Œ)์šฉ์œผ๋กœ .js ํŒŒ์ผ์— ํ•„์š”ํ•œ ๊ฒฝ์šฐ @guaizi149 ์†”๋ฃจ์…˜์„ ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค.

"compilerOptions": {
  "allowJS": true,
  "noEmit": true
}

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด TS์— ์ปดํŒŒ์ผ์— ๋Œ€ํ•ด ๊ฑฑ์ •ํ•  ํ•„์š”๊ฐ€ ์—†์œผ๋ฏ€๋กœ ํŒŒ์ผ์„ ๋ฎ์–ด์“ฐ์ง€ ์•Š๊ณ  ๊ฒฝ๊ณ ๊ฐ€ ํŠธ๋ฆฌ๊ฑฐ๋˜์ง€ ์•Š์Œ์„ ์•Œ๋ฆฝ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ outDir: "" ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋” ๋‚˜์€ ์†”๋ฃจ์…˜์ž…๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ๊ตฌ์„ฑ ์ƒ์†์—์„œ๋„ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ ๊ตฌ์„ฑ์€ outDir ๋ณ„๋„๋กœ ์ง€์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. outDir ์˜ ๊ฒฝ๋กœ๋Š” ์ ˆ๋Œ€์ ์œผ๋กœ ํ•ด๊ฒฐ๋œ ๊ฒƒ์œผ๋กœ ๋ณด์ž…๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž์˜ ๊ด€์ ์—์„œ ๋ณด๋ฉด ๋ฒ„๊ทธ์ผ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

{
  "extends": "../../base/tsconfig.json",
  "compilerOptions": {
    "outDir": "myOutDir"  // <--- Don't forget this
  }
}

์ด ์†”๋ฃจ์…˜์€ ์ €์—๊ฒŒ ๋งค๋ ฅ์ฒ˜๋Ÿผ ๋ณด์˜€์Šต๋‹ˆ๋‹ค! ๋‚ด tsconfig.json ๋Š” ์ด์ œ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

{
  "compilerOptions": {
    "allowJs": true,
    "baseUrl": "../node_modules",
    "types": ["cypress"],
    "outDir": "myOutDir"
  },
  "include": ["**/*.*"]
}

"allowJs": true
"noEmit": true
๋‚˜๋ฅผ ์œ„ํ•ด ์ผํ•˜์‹ญ์‹œ์˜ค.

@guaizi149 ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ๊ท€ํ•˜์˜ ์†”๋ฃจ์…˜์ด ์ €์—๊ฒŒ ํšจ๊ณผ์ ์ž…๋‹ˆ๋‹ค ๐Ÿ‘

ํ•ด๊ฒฐ - ๋‚ด tsc ๋นŒ๋“œ์— dist ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ํฌํ•จํ–ˆ์Šต๋‹ˆ๋‹ค.

"exclude": [
    "node_modules"
  ]

--- ๋กœ ์ด๋™

"exclude": [
    "node_modules",
    "dist"
  ]

dist ๊ฐ€ ๋นŒ๋“œ ํด๋”์ž…๋‹ˆ๊นŒ?

outDir ์ œ์™ธํ•ด๋„ ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜์ง€ ์•Š์œผ๋ฉด ๊ฒฝ๋กœ์™€ ํŒŒ์ผ ์ด๋ฆ„์€ ๊ฐ™์ง€๋งŒ ํ™•์žฅ์ž๊ฐ€ ๋‹ค๋ฅธ ์ค‘๋ณต ํŒŒ์ผ์ด ์žˆ๋Š”์ง€ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค.

์ด๋Š” ์„ ์–ธ ํŒŒ์ผ์ด ๋นŒ๋“œ์—์„œ ์ œ์™ธ๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ์— ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ๋•Œ๋งˆ๋‹ค ๋นŒ๋”๋Š” ๊ธฐ์กด ".d.ts" ํŒŒ์ผ์„ ๋นŒ๋“œํ•˜๊ณ  ๋™์ผํ•œ ํŒŒ์ผ ์ด๋ฆ„์œผ๋กœ ๋ฐ”๊พธ๋ ค๊ณ  ์‹œ๋„ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ Cannot write file ... because it would overwrite input file. ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

์ด๋ฅผ ๋ฐฉ์ง€ํ•˜๋ ค๋ฉด jour tsconfig.json ํŒŒ์ผ์—์„œ "outDir":"build" ๋ฅผ ์ œ์™ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

"exclude": [
    "build",
    ....
]

๋˜๋Š” outDir์ด ์ •์˜๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ ์ œ์™ธ ๋ชจ๋“  d.ts . ํ™•์žฅ ํŒŒ์ผ:

"exclude": [
    "**/*.d.ts"
    .....
]

๋„์›€์ด ๋˜์—ˆ๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค

@Abadii : ์•„๋งˆ๋„ ์ปดํŒŒ์ผํ•˜๋Š” ๋™์•ˆ -b ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์ผ ์ˆ˜ ์žˆ์ง€๋งŒ ์ด๋Ÿฌํ•œ ์ ‘๊ทผ ๋ฐฉ์‹ ์ค‘ ์–ด๋Š ๊ฒƒ๋„ ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

@Abadii : ์•„๋งˆ๋„ ์ปดํŒŒ์ผํ•˜๋Š” ๋™์•ˆ -b ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์ผ ์ˆ˜ ์žˆ์ง€๋งŒ ์ด๋Ÿฌํ•œ ์ ‘๊ทผ ๋ฐฉ์‹ ์ค‘ ์–ด๋Š ๊ฒƒ๋„ ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

tsconfig.json ํŒŒ์ผ๊ณผ tsc ๋ฒ„์ „์„ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

@Abadii : ์—ฌ๊ธฐ ์žˆ์Šต๋‹ˆ๋‹ค(์—…๋ฐ์ดํŠธ๋œ ์ œ์™ธ ์ œ์™ธ ์—†์Œ). tsc ์˜ ๋ฒ„์ „์€ 3.8.3์ž…๋‹ˆ๋‹ค.

{
    "compilerOptions": {
        "importHelpers": true,
        "target": "es6",
        "module": "CommonJS",
        "lib": ["es2018"],
        "downlevelIteration": true,
        "skipLibCheck": true,
        "strict": true,
        "moduleResolution": "node",
        "esModuleInterop": true,
        "experimentalDecorators": true,
        "outDir": "../lib",
        "sourceMap": true,
        "declaration": true
    },
    "exclude": ["node_modules"]
}

@Abadii : ์—ฌ๊ธฐ ์žˆ์Šต๋‹ˆ๋‹ค(์—…๋ฐ์ดํŠธ๋œ ์ œ์™ธ ์ œ์™ธ ์—†์Œ). tsc ์˜ ๋ฒ„์ „์€ 3.8.3์ž…๋‹ˆ๋‹ค.

{
    "compilerOptions": {
        "importHelpers": true,
        "target": "es6",
        "module": "CommonJS",
        "lib": ["es2018"],
        "downlevelIteration": true,
        "skipLibCheck": true,
        "strict": true,
        "moduleResolution": "node",
        "esModuleInterop": true,
        "experimentalDecorators": true,
        "outDir": "../lib",
        "sourceMap": true,
        "declaration": true
    },
    "exclude": ["node_modules"]
}

๋‹ค์Œ repo๋ฅผ ์‚ดํŽด๋ณด์‹ญ์‹œ์˜ค. ์˜ค๋ฅ˜๋ฅผ ์žฌ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•ด tsconfig.json์„ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค.

https://github.com/Abadii/tsconfig

์ถ”์‹  ../lib ํด๋”๋ฅผ ์‚ญ์ œํ•˜๋ฉด ์–ด๋–ป๊ฒŒ ๋ฉ๋‹ˆ๊นŒ? ๊ตฌ์ถ•๋ ๊นŒ์š”?

@Abadii : ๋‚ด๊ฐ€ ๋นŒ๋“œ ํด๋”๋ฅผ ์ œ๊ฑฐํ•˜๋ฉด ๊ทธ๊ฒƒ์€ ๋งŒ๋“ค ๊ฒƒ์ด๋‹ค (๋‚˜๋Š” / ์ œ๊ฑฐ ๋นŒ๋“œ ํด๋”๋ฅผ ๋น„์šธ ๊ฒฝ์šฐ ์‹ค์ œ๋กœ๋Š” ๋งŒ๋“ค ๊ฒƒ์ด๋‹ค). ์ด๊ฒƒ์€ exclude ์„ ์–ธ ํŒŒ์ผ๊ณผ ๋นŒ๋“œ ํด๋”์˜ ๊ฒฝ์šฐ์—๋„ ๋งˆ์ฐฌ๊ฐ€์ง€์ž…๋‹ˆ๋‹ค.
์ฐธ๊ณ ๋กœ ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

project\
  lib\
    session.d.ts
    session.js
  src\
    session.ts
    tsconfig.json
  package.json 

tsc -p ./src/tsconfig.json ๋นŒ๋“œํ•ฉ๋‹ˆ๋‹ค.
(์‚ฌ์‹ค ๋ณดํ†ต์€ rm -rf ./lib && tsc -p src/tsconfig.json ๋นŒ๋“œํ•˜์ง€๋งŒ ๊ทธ๊ฒƒ์ด ๋‚ด๊ฐ€ ์ˆ˜์ •ํ•˜๊ธฐ ์œ„ํ•ด ์˜จ ๊ฒƒ์ž…๋‹ˆ๋‹ค ;) )

@Abadii : ๋‚ด๊ฐ€ ๋นŒ๋“œ ํด๋”๋ฅผ ์ œ๊ฑฐํ•˜๋ฉด ๊ทธ๊ฒƒ์€ ๋งŒ๋“ค ๊ฒƒ์ด๋‹ค (๋‚˜๋Š” / ์ œ๊ฑฐ ๋นŒ๋“œ ํด๋”๋ฅผ ๋น„์šธ ๊ฒฝ์šฐ ์‹ค์ œ๋กœ๋Š” ๋งŒ๋“ค ๊ฒƒ์ด๋‹ค). ์ด๊ฒƒ์€ exclude ์„ ์–ธ ํŒŒ์ผ๊ณผ ๋นŒ๋“œ ํด๋”์˜ ๊ฒฝ์šฐ์—๋„ ๋งˆ์ฐฌ๊ฐ€์ง€์ž…๋‹ˆ๋‹ค.

์ด์ œ ๋นŒ๋“œ ํด๋”๊ฐ€ ๋ฌธ์ œ์˜ ์›์ธ์ž„์„ ์•Œ๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์–ด์จŒ๋“  tsc ๋นŒ๋“œ๋Š” ๋นŒ๋“œ ํด๋”๋ฅผ ์ œ์™ธํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ œ์™ธ์—์„œ ์ ˆ๋Œ€ ๊ฒฝ๋กœ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๋˜ํ•œ ๋นŒ๋“œ ํด๋”๊ฐ€ ../lib ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚ฌ๋‹ค๋Š” ์‚ฌ์‹ค๋„ ํ™•์ธํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ฐฐ์ œํ•˜์ง€ ์•Š๋Š” ์ด์œ ์ด๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค. ./lib ๋ฅผ outDir๋กœ ์‹œ๋„ํ•˜์—ฌ ๋™์ž‘์ด ๋ณ€๊ฒฝ๋˜๋Š”์ง€ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค.
Windows ์‚ฌ์šฉ์ž์ธ ๊ฒฝ์šฐ ์ •์˜๋œ ์ ˆ๋Œ€ ๊ฒฝ๋กœ๊ฐ€ ์˜ฌ๋ฐ”๋ฅธ์ง€ ๋‹ค์‹œ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค.

@Abadii : ๊ณ ๋ง™์ง€๋งŒ ์—ฌ๋Ÿฌ ์ปดํ“จํ„ฐ์—์„œ ํ”„๋กœ์ ํŠธ๋ฅผ ์ž‘์—…ํ•˜๊ณ  ๋ชจ๋“  ์ปดํ“จํ„ฐ์—์„œ ๋™์ผํ•œ ํด๋” ๊ตฌ์กฐ๋ฅผ ๋ณด์žฅํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— ์ ˆ๋Œ€ ๊ฒฝ๋กœ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋‚˜์—๊ฒŒ ์ด๊ฒƒ์€ ๋ฒ„๊ทธ์ฒ˜๋Ÿผ ๋ณด์ž…๋‹ˆ๋‹ค. tsconfig์— ํด๋”์™€ ์„ ์–ธ ํŒŒ์ผ์„ ๋ชจ๋‘ ์ œ์™ธํ•˜๋„๋ก ์ง€์‹œํ•˜์ง€๋งŒ ๊ทธ๋ ‡์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด๊ฑฐ ๋‹ค์‹œ ์—ด์–ด์•ผ ํ•˜๋‚˜?

@Abadii : ๊ณ ๋ง™์ง€๋งŒ ์—ฌ๋Ÿฌ ์ปดํ“จํ„ฐ์—์„œ ํ”„๋กœ์ ํŠธ๋ฅผ ์ž‘์—…ํ•˜๊ณ  ๋ชจ๋“  ์ปดํ“จํ„ฐ์—์„œ ๋™์ผํ•œ ํด๋” ๊ตฌ์กฐ๋ฅผ ๋ณด์žฅํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— ์ ˆ๋Œ€ ๊ฒฝ๋กœ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋‚˜์—๊ฒŒ ์ด๊ฒƒ์€ ๋ฒ„๊ทธ์ฒ˜๋Ÿผ ๋ณด์ž…๋‹ˆ๋‹ค. tsconfig์— ํด๋”์™€ ์„ ์–ธ ํŒŒ์ผ์„ ๋ชจ๋‘ ์ œ์™ธํ•˜๋„๋ก ์ง€์‹œํ•˜์ง€๋งŒ ๊ทธ๋ ‡์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด๊ฑฐ ๋‹ค์‹œ ์—ด์–ด์•ผ ํ•˜๋‚˜?

์•„๋งˆ๋„ ๋งˆ์ง€๋ง‰์œผ๋กœ ์‹œ๋„ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์€ project/tsconfig.json tsconfig ํŒŒ์ผ์„ ๋„ฃ๊ณ  ๊ฒฝ๋กœ๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‚˜๋Š” ๋˜ํ•œ ๊ทธ๊ฒƒ์ด ์ž‘๋™ํ•˜์ง€ ์•Š์„ ๊ฒฝ์šฐ ์˜ต์…˜์—์„œ ๋ฒ—์–ด๋‚ฉ๋‹ˆ๋‹ค.

์‹œํ—˜์„ ๋งˆ์นœ:

  1. outDir -> ์•„๋‹ˆ์š”.
  2. allowJs: false -> ์•„๋‹ˆ์š”.
  3. .d.ts ์ œ์™ธ -> ์•„๋‹™๋‹ˆ๋‹ค.
  4. noEmit: true -> ์•„๋‹™๋‹ˆ๋‹ค.

์ด ์Šค๋ ˆ๋“œ์˜ ๋ชจ๋“  ์ œ์•ˆ์„ ์‹œ๋„ํ–ˆ์Šต๋‹ˆ๋‹ค. VSCode ์˜ค๋ฅ˜๊ฐ€ ๊ณ„์†๋  ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋” ์ด์ƒ ์กด์žฌํ•˜์ง€ ์•Š๋Š” ํŒŒ์ผ์„ ์ฐธ์กฐํ•ฉ๋‹ˆ๋‹ค. ๐Ÿคทโ€โ™‚๏ธ

์‹œํ—˜์„ ๋งˆ์นœ:

  1. outDir -> ์•„๋‹ˆ์š”.
  2. allowJs: false -> ์•„๋‹ˆ์š”.
  3. .d.ts ์ œ์™ธ -> ์•„๋‹™๋‹ˆ๋‹ค.
  4. noEmit: true -> ์•„๋‹™๋‹ˆ๋‹ค.

์ด ์Šค๋ ˆ๋“œ์˜ ๋ชจ๋“  ์ œ์•ˆ์„ ์‹œ๋„ํ–ˆ์Šต๋‹ˆ๋‹ค. VSCode ์˜ค๋ฅ˜๊ฐ€ ๊ณ„์†๋  ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋” ์ด์ƒ ์กด์žฌํ•˜์ง€ ์•Š๋Š” ํŒŒ์ผ์„ ์ฐธ์กฐํ•ฉ๋‹ˆ๋‹ค.

ํ„ฐ๋ฏธ๋„์„ ํ†ตํ•ด ์ง์ ‘ ๋นŒ๋“œํ•˜๋ ค๊ณ  ํ•˜๋ฉด ์–ด๋–ป๊ฒŒ ๋ฉ๋‹ˆ๊นŒ?

outDir์„ ์„ค์ •ํ•˜๊ณ  ๋นŒ๋“œํ•˜๊ธฐ ์ „์— ๋น„์›Œ ๋‘์‹ญ์‹œ์˜ค.

@Abadii ๊ทธ๋ž˜์„œ.... ์ด๋Ÿฐ ์ผ์ด ๋ฐœ์ƒํ•œ ์ด์œ ๋Š” JS ํŒŒ์ผ์ด ํฌํ•จ๋˜์ง€ ์•Š์•˜์Œ์—๋„ CommonJS ๋ชจ๋“ˆ์ด๊ธฐ ๋•Œ๋ฌธ์— ์‹คํŒจํ–ˆ๊ธฐ ๋•Œ๋ฌธ์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.... ๐Ÿค” ....

์ฆ‰, ๋ชจ๋“  ๊ฒƒ์ด ์ ์ ˆํ•œ ๊ฐ€์ ธ์˜ค๊ธฐ/๋‚ด๋ณด๋‚ด๊ธฐ๋ฅผ ํ•˜๋ฉด ์ด ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ด ์Šค๋ ˆ๋“œ์˜ ์˜๊ฒฌ๊ณผ ์ˆ˜์ • ์‚ฌํ•ญ์˜ ์ˆœ์ „ํžˆ ์ˆ˜๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜์—ฌ ์ด๊ฒƒ์ด ๋ถ‰์€ ์ฒญ์–ด ์˜ค๋ฅ˜ ์ค‘ ํ•˜๋‚˜๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ X ์œ ํ˜•์˜ JS/Intellisense/์ปดํŒŒ์ผ ๋ฌธ์ œ๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ VSCode์—์„œ ์ด Cannot write file ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ œ ๊ฒฝ์šฐ์—๋Š” ์ด ์Šค๋ ˆ๋“œ์—์„œ ์ œ๊ณต๋˜๋Š” ์ˆ˜๋งŽ์€ ์†”๋ฃจ์…˜์ด ์•„๋‹Œ ๋‹ค๋ฅธ ์†”๋ฃจ์…˜์œผ๋กœ ํ•ด๊ฒฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๐Ÿคทโ€โ™‚๏ธ ๊ทธ๋ฆฌ๊ณ  ๋‹ค์‹œ _์กด์žฌํ•˜์ง€ ์•Š๋Š”_ ๊ทธ๋ฆฌ๊ณ  _๋Œ€์ฒด๋  ์ˆ˜ ์—†๋Š”_ ํŒŒ์ผ์— ์ด ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์˜ค๋ฅ˜๊ฐ€ ์บ์‹ฑ๋˜๊ณ  ์•Œ ์ˆ˜ ์—†๋Š” ์˜ค๋ฅ˜๊ฐ€ ์บ์‹œ๋œ ์˜ค๋ฅ˜๋ฅผ ๋˜์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ๊ทธ๋Ÿฐ ๊ฒƒ? ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ์ด ํŠน์ • ์˜ค๋ฅ˜์™€ ๊ด€๋ จ๋œ ์ฝ”๋“œ๋ฅผ ๊ฒ€์‚ฌํ•ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๋‚ด Google ๊ฒ€์ƒ‰์—์„œ ๊ฐ€์žฅ ๋จผ์ € ๋‚˜์˜จ ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— ์—ฌ๊ธฐ์— ๋Œ“๊ธ€์„ ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋‚˜๋„์ด ๋ฌธ์ œ์— ๋ถ€๋”ช์ณค๋‹ค. ์ปดํŒŒ์ผ ํ”„๋กœ์„ธ์Šค์˜ ์ผ๋ถ€๊ฐ€ ์ œ์™ธ๋œ ๋””๋ ‰ํ† ๋ฆฌ ์•ˆ์— ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์ธ์‹ํ•˜์ง€ ๋ชปํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๋ฌธ์ œ๊ฐ€ ๋ณด์ด์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

  "exclude": ["**/*.d.ts", "dist", "node_modules"]

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๋ฌธ์ œ ๊ฐ€ ๋ณด์ž…๋‹ˆ๋‹ค.

  "exclude": ["dist/**/*.d.ts", "dist", "node_modules"]

์•„๋‹ˆ๋ฉด ์ด๊ฑฐ:

  "exclude": ["**/dist/**/*.d.ts", "dist", "node_modules"]

๋ถˆํ‰ํ•˜๋Š” ํŒŒ์ผ์ด dist ์•ˆ์— ๋ถ„๋ช…ํžˆ ์žˆ์Œ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

error TS5055: Cannot write file '/Users/leila/dev/wip/jest-fp-ts/dist/index.d.ts' because it would overwrite input file.
error TS5055: Cannot write file '/Users/leila/dev/wip/jest-fp-ts/dist/matchers/index.d.ts' because it would overwrite input file.

์ œ ๊ฒฝ์šฐ์—๋Š” src/index.ts ์—์„œ src/matchers/index.ts ๋ฅผ ๊ฐ€์ ธ์˜ค๊ณ  ๋‹ค์‹œ ๋‚ด๋ณด๋‚ด๋Š” ๊ฐ€์ ธ์˜ค๊ธฐ๋ฅผ ์„ค์ •ํ–ˆ์œผ๋ฉฐ, src/matchers/eitherMatchers/index.ts ์—์„œ ์ฐจ๋ก€๋กœ ๊ฐ€์ ธ์˜ค๊ณ  ๋‹ค์‹œ ๋‚ด๋ณด๋‚ด๊ธฐํ•ฉ๋‹ˆ๋‹ค.

์ฒ˜์Œ ๋‘ ํŒŒ์ผ์€ ์ปดํŒŒ์ผ ์˜ค๋ฅ˜๋ฅผ ์ผ์œผํ‚ค๋Š” ํŒŒ์ผ์ž…๋‹ˆ๋‹ค. ์„ธ ๋ฒˆ์งธ ํŒŒ์ผ์€ ๊ดœ์ฐฎ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๊ฐ€์ ธ์˜ค๊ธฐ/๋‚ด๋ณด๋‚ด๊ธฐ ํŠธ๋ฆฌ๊ฐ€ ์ปดํŒŒ์ผ์— ๋ฏธ์น˜๋Š” ์˜ํ–ฅ๊ณผ ๊ด€๋ จ์ด ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ๊ฐ™์€ ๋ฌธ์ œ๊ฐ€์žˆ๋Š” ๋™์•ˆ์ด ๋ฌธ์ œ๋ฅผ ์šฐ์—ฐํžˆ ๋ฐœ๊ฒฌํ–ˆ์œผ๋ฉฐ ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์ด ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ์šฐ์—ฐํžˆ ๋ฐœ๊ฒฌํ•˜๋Š” ๊ฒฝ์šฐ๋ฅผ ๋Œ€๋น„ํ•˜์—ฌ ๋‚ด ๊ฒƒ์ด ๋ฌด์—‡์ธ์ง€ ์ถ”๊ฐ€ ํ•  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค.

์ œ ๊ฒฝ์šฐ์—๋Š” ๊ธฐ๋ณธ tsconfig์—์„œ ํ™•์žฅ๋˜๋Š” ๊ฐ ํŒจํ‚ค์ง€์— ๋Œ€ํ•ด ๋ณ„๋„์˜ tsconfig ํŒŒ์ผ์ด ์žˆ๋Š” monorepo๊ฐ€ โ€‹โ€‹์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ ํŒจํ‚ค์ง€ ๊ตฌ์„ฑ์—๋Š” ์˜์กดํ•˜๋Š” ํŒจํ‚ค์ง€์˜ ๊ฒฝ๋กœ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” references ํ•ญ๋ชฉ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ files: [] ํ•˜๊ณ  ๋ชจ๋“  ํŒจํ‚ค์ง€ ๋””๋ ‰ํ† ๋ฆฌ์— ๋Œ€ํ•œ ์ฐธ์กฐ๊ฐ€ ์žˆ๋Š” ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์˜ ๋ฃจํŠธ์— tsconfig.json์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๋ฃจํŠธ์—์„œ tsc -b --watch ๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ์ „์ฒด ํ”„๋กœ์ ํŠธ์˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์— ๋”ฐ๋ผ ๋‹ค์‹œ ๋นŒ๋“œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ๊ฝค ์˜ค๋žซ๋™์•ˆ ์ž˜ ์ž‘๋™ํ–ˆ์ง€๋งŒ ๊ตฌ์„ฑ์ด ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์•˜์Œ์—๋„ ๊ฐ‘์ž๊ธฐ ์ด ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๊ธฐ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ๋งˆ์นจ๋‚ด ์ „์ฒด ํ”„๋กœ์ ํŠธ๋ฅผ ๋นŒ๋“œํ•˜๊ธฐ ๋ณด๋‹ค๋Š” ์ž์ฒด์ ์œผ๋กœ ์˜ค๋ฅ˜์—์„œ ๋ณด๊ณ ๋˜์—ˆ๋˜ ํ•˜๋‚˜์˜ ํŒจํ‚ค์ง€๋ฅผ ๋นŒ๋“œํ•˜๋ ค๊ณ  ์‹œ๋„ํ•˜์—ฌ ๊ทธ๊ฒƒ์„ ์ถ”์ ํ–ˆ์Šต๋‹ˆ๋‹ค.

๋ฌธ์ œ๋Š” ๋‚ด๊ฐ€ ํ”„๋กœ์ ํŠธ ์ž์ฒด๋ฅผ ๊ฐ€์ ธ์˜ค๋„๋ก ์‹œ๋„ํ–ˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํŒจํ‚ค์ง€ ์ด๋ฆ„์€ @my-project/utils ์ด์—ˆ๊ณ  ๋‹ค๋ฅธ ํŒจํ‚ค์ง€์˜ ์ผ๋ถ€ ์ฝ”๋“œ๋ฅผ utils ํŒจํ‚ค์ง€์˜ ํŒŒ์ผ๋กœ ์ด๋™ํ•  ๋•Œ๊นŒ์ง€ ์ œ๋Œ€๋กœ ์ž‘๋™ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ ์ฝ”๋“œ์—๋Š” import stuff from '@my-project/utils'; ํฌํ•จ๋˜์–ด ์žˆ์—ˆ๊ณ  ์ด๊ฒƒ์ด ์˜ค๋ฅ˜์˜ ์›์ธ์ด์—ˆ์Šต๋‹ˆ๋‹ค. ๋Œ€์‹  import stuff from '.'; ๋กœ ๋ณ€๊ฒฝํ•˜๋ฉด ์˜ค๋ฅ˜๊ฐ€ ์‚ฌ๋ผ์กŒ์Šต๋‹ˆ๋‹ค.

@jasonk ์ด๊ฒƒ์€ ์•„๋งˆ๋„ ๋‚ด ๋ฌด์ง€๋ฅผ ๋“œ๋Ÿฌ๋‚ด๋Š” ๊ฒƒ์ผ ์ˆ˜ ์žˆ์ง€๋งŒ ๋ชจ๋“  ๊ฐ€์ ธ์˜ค๊ธฐ(์˜ˆ: webpack)๋ฅผ ํ•ด๊ฒฐํ•  ๋ฌด์–ธ๊ฐ€์— ์˜ํ•ด ๋ชจ๋…ธ๋ ˆํฌ๊ฐ€ ํ•จ๊ป˜ ๋ฒˆ๋“ค๋กœ ์ œ๊ณต๋˜๋Š” ๊ฒฝ์šฐ์—๋งŒ ์ž‘๋™ํ•˜์ง€ ์•Š์„๊นŒ์š”? ๋ชจ๋…ธ๋ ˆํฌ๊ฐ€ ๊ฒŒ์‹œ ๋ฐ ๋…๋ฆฝ์ ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“ˆ๋กœ ๊ตฌ์„ฑ๋œ ๊ฒฝ์šฐ ์ƒ๋Œ€์  ๊ฐ€์ ธ์˜ค๊ธฐ๋กœ ๋ณ€๊ฒฝํ•˜๋ฉด ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์Šต๋‹ˆ๊นŒ?

@Ghirigoro ์•„๋‹ˆ์š”, ๋ฌธ์ œ๋Š” ํŒจํ‚ค์ง€ ๊ฒฝ๋กœ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ํŒจํ‚ค์ง€ ๊ฒฝ๋กœ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํŒจํ‚ค์ง€๋ฅผ ์ž์ฒด ๋‚ด์—์„œ ๊ฐ€์ ธ์˜ค๊ณ  ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. Typescript๊ฐ€ ์—†์–ด๋„ ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๊ธฐ๋ณธ์ ์œผ๋กœ ๋‚ด๊ฐ€ ํ•œ ์ผ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

$ mkdir problem
$ cd problem
$ npm init -y
$ echo 'console.log( "WORKED!" );' > index.js
$ echo 'require( "problem" );' > test.js

๊ทธ๋Ÿฐ ๋‹ค์Œ ๋…ธ๋“œ๋กœ ์‹คํ–‰ํ•˜๋ ค๊ณ  ํ•˜๋ฉด:

$ node ./test.js
internal/modules/cjs/loader.js:985
  throw err;
  ^

Error: Cannot find module '/Users/jasonk/problem/test.js'
    at Function.Module._resolveFilename (internal/modules/cjs/loader.js:982:15)
    at Function.Module._load (internal/modules/cjs/loader.js:864:27)
    at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:74:12)
    at internal/main/run_main_module.js:18:47 {
  code: 'MODULE_NOT_FOUND',
  requireStack: []
}

ํŒจํ‚ค์ง€ ์ด๋ฆ„์„ ๋ฐ”๊พธ๋ฉด ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

$ echo 'require( "." );' > test.js
$ node ./test.js
WORKED!

๋‚ด๊ฐ€ ๋ฌด์Šจ ์ผํ•˜๋Š” ๋นŒ๋“œ๋ฅผ ์‹คํ–‰ํ•  ๋•Œ,์—์„œ ์ˆ˜์ž… ๋œ ๋‹ค๋ฅธ ํŒจํ‚ค์ง€์˜ ๋ชจ๋“  ๊ฒƒ์ด ์—ˆ์Šต๋‹ˆ๋‹ค ์˜์‹ฌ @my-project/utils ๊ฐ€์ ธ๊ฐ€ ํ•ด๊ฒฐ ๋œ ๊ฒƒ์„ํ–ˆ๋‹ค packages/utils (๊ทธ๋“ค์€์—์„œ ์˜ฌ๋ฐ”๋ฅธ ํ•ญ๋ชฉ์ด ์žˆ์—ˆ๊ธฐ ๋•Œ๋ฌธ์— references array in tsconfig), ๋”ฐ๋ผ์„œ ์ •์ƒ์ ์œผ๋กœ ๋นŒ๋“œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ํ•ด๋‹น ํŒจํ‚ค์ง€๊ฐ€ ์ž์ฒด์ ์œผ๋กœ ๊ฐ€์ ธ์˜ค๊ธฐ๋กœ ๋˜์–ด ์žˆ์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ€์ ธ์˜ค๊ธฐ๊ฐ€ node_modules/@my-project/utils ํ•ด๊ฒฐ๋˜์—ˆ์œผ๋ฉฐ ์ด๋Š” packages/utils ์— ๋Œ€ํ•œ ์‹ฌ๋ณผ๋ฆญ ๋งํฌ์˜€์ง€๋งŒ TypeScript๋Š” ์‹ค์ œ๋กœ ๋™์ผํ•œ ํ”„๋กœ์ ํŠธ์ž„์„ ๊ฐ์ง€ํ•˜์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‘ ๋ฒˆ ๋นŒ๋“œ๋ฅผ ์‹œ๋„ํ–ˆ์ง€๋งŒ ๋‘ ๋นŒ๋“œ ๋ชจ๋‘ ๋™์ผํ•œ ์ถœ๋ ฅ ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.

์ด๋Š” ์„ ์–ธ ํŒŒ์ผ์ด ๋นŒ๋“œ์—์„œ ์ œ์™ธ๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ์— ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ๋•Œ๋งˆ๋‹ค ๋นŒ๋”๋Š” ๊ธฐ์กด ".d.ts" ํŒŒ์ผ์„ ๋นŒ๋“œํ•˜๊ณ  ๋™์ผํ•œ ํŒŒ์ผ ์ด๋ฆ„์œผ๋กœ ๋ฐ”๊พธ๋ ค๊ณ  ์‹œ๋„ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ Cannot write file ... because it would overwrite input file. ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

์ด๋ฅผ ๋ฐฉ์ง€ํ•˜๋ ค๋ฉด jour tsconfig.json ํŒŒ์ผ์—์„œ "outDir":"build" ๋ฅผ ์ œ์™ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

"exclude": [
    "build",
    ....
]

๋˜๋Š” outDir์ด ์ •์˜๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ ์ œ์™ธ ๋ชจ๋“  d.ts . ํ™•์žฅ ํŒŒ์ผ:

"exclude": [
    "**/*.d.ts"
    .....
]

๋„์›€์ด ๋˜์—ˆ๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค

๋‚ด ๋นŒ๋“œ ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ์ œ์™ธํ•˜๋ฉด ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์•„๋งˆ๋„ ์ด๊ฒƒ์€ ๋‘ ๊ฐœ์˜ ๋…ธ๋“œ๊ฐ€ ์žˆ๋Š” ํ•˜๋‚˜์˜ ํ”„๋กœ์ ํŠธ๋ฅผ ์‹คํ–‰ํ•˜๋ ค๊ณ  ํ•  ๋•Œ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.
์ด ๊ฐ€์„ค์˜ ๊ฒฝ์šฐ ๋นŒ๋“œ๋ฅผ ์‹คํ–‰ํ•œ ํ›„ "๋…ธ๋“œ"๋ผ๋Š” ์ปดํ“จํ„ฐ์˜ ํ”„๋กœ์„ธ์Šค ์ˆ˜๋ฅผ ํ…Œ์ŠคํŠธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๋‚ด๊ฐ€ ํ•œ ์ผ:
1 ๋‹จ๊ณ„.
๋น„๊ตํ•˜๋‹ค
node -v
๊ทธ๋ฆฌ๊ณ 
nvm -ls , ์‚ฌ์šฉ ์ค‘์ธ ๋ฒ„์ „์ž…๋‹ˆ๋‹ค.
ํ„ฐ๋ฏธ๋„์—์„œ ํ˜„์žฌ ๋…ธ๋“œ ๋ฒ„์ „ ์„ค์ •:
nvm use {neededVersion}
์›์น™์ ์œผ๋กœ nvm์—์„œ ๋ถˆํ•„์š”ํ•œ ๋ฒ„์ „์˜ ๋…ธ๋“œ๋ฅผ ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค(์ด๋ ‡๊ฒŒ ํ•˜๋ฉด IDE์—์„œ ๋…ธ๋“œ์˜ ์ผ๋ฐ˜ ๋ฒ„์ „์„ ์ž๋™์œผ๋กœ ๊ฒฐ์ •ํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค).
2 ๋‹จ๊ณ„.
IDE์—์„œ ํ˜„์žฌ ๋…ธ๋“œ๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, WebStorm์—์„œ:
๊ธฐ๋ณธ ์„ค์ • -> ์–ธ์–ด ๋ฐ ํ”„๋ ˆ์ž„์›Œํฌ -> Node.js ๋ฐ NPM: ๋…ธ๋“œ ์ธํ„ฐํ”„๋ฆฌํ„ฐ - ํ•„์š”ํ•œ ๋ฒ„์ „์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
(๋˜ํ•œ ๊ฐ ํ•ญ๋ชฉ์— ๋Œ€ํ•œ ๋…ธ๋“œ์˜ ๋ฒ„์ „์„ ์–ด๋””์„œ๋‚˜ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(Typescript))

๋˜ํ•œ ์ด ๋ฌธ์ œ๋Š” npm ํŒจํ‚ค์ง€ ๋˜๋Š” git ํ•˜์œ„ ๋ชจ๋“ˆ์ด ๋‚ด๋ถ€์— ์ž์ฒด ๋…ธ๋“œ๋ฅผ ์‚ฌ์šฉํ•œ ๊ฒฝ์šฐ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Webdriver IO/WDIO ํ”„๋กœ์ ํŠธ์—์„œ ์ด ๋ฌธ์ œ์— ์ง๋ฉดํ–ˆ์Šต๋‹ˆ๋‹ค. tsconfig.json์˜ "include"์—์„œ "wdio.config.js"๋ฅผ ์ œ๊ฑฐํ•˜๋ฉด ํ•ด๊ฒฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

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