ํ์ ์คํฌ๋ฆฝํธ: 2.0.0
.ts
ํ์ผ์ด ํฌํจ๋ fixtures
ํด๋๊ฐ ์์ต๋๋ค. ๋ด tsconfig.json
rootDir
๋ฅผ src
์ฌ๊ธฐ์๋ ๋ชจ๋ ์์ค ์ฝ๋(ํ
์คํธ ํฌํจ)๊ฐ ํฌํจ๋์ด ์์ต๋๋ค.
ํฝ์ค์ฒ ํ์ผ์ ํ ์คํธ ์ผ์ด์ค์ฉ์ ๋๋ค. tsc๋ ์์ ์ ์กด์ฌ๋ฅผ ๋ถํํ๊ณ ์ปดํ์ผ์ ์คํจํด์๋ ์ ๋ฉ๋๋ค.
์ฐํํ๊ธฐ ์ํด tsconfig.json
์ "์ ์ธ"๋ฅผ ๋ค์ ์ถ๊ฐํฉ๋๋ค.
rootDir์ ์ถ๋ ฅ ํด๋ ๊ตฌ์กฐ๋ฅผ ๋น๋ํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. ์ปดํ์ผ๋ฌ๊ฐ ์ถ๋ ฅ์ ์ธ ์์น๋ฅผ ์๊ธฐ ์ํด์๋ ๋ชจ๋ ํ์ผ์ด rootDir ์๋์ ์์ด์ผ ํฉ๋๋ค. ์ด ์ ์ฝ ์กฐ๊ฑด ์์ด rootDir ์๋์ ์์ง ์์ ํ์ผ์ด ์๋ ๊ฒฝ์ฐ ์ปดํ์ผ๋ฌ๋ 1. ์์ ํ ์์์น ๋ชปํ ์์น์์ ๋ด๋ณด๋ด๊ฑฐ๋ 2. ์ ํ ๋ด๋ณด๋ด์ง ์๋ ๋ ๊ฐ์ง ์ต์ ์ด ์์ต๋๋ค. ๋๋ ์ค๋ฅ ๋ฉ์์ง๊ฐ ์๋ ์คํจ๋ณด๋ค ํจ์ฌ ๋ซ๋ค๊ณ ๋งํ๊ณ ์ถ์ต๋๋ค.
@mhegazy ์ค๋ช
๊ฐ์ฌํฉ๋๋ค. rootDir
๋ผ๋ ์ด๋ฆ์ผ๋ก ๋ธ๋ผ์ฐ์ ์ baseURL
์ฒ๋ผ ์์ค ์ฝ๋์ ๋ฃจํธ ๋๋ ํ ๋ฆฌ๋ก ์ฌ์ฉํ์ต๋๋ค. ์ถ๋ ฅ ํด๋ ๊ตฌ์กฐ ์ ์ฉ์ธ์ง ๋ชฐ๋์ต๋๋ค.
๋ด tsconfig.json์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
{
"compilerOptions": {
"target": "es5",
"module": "commonjs",
"moduleResolution": "node",
"sourceMap": true,
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"removeComments": true,
"noImplicitAny": true,
"rootDir": "src",
"outDir": "build"
},
"exclude": [
".idea",
"build",
"node_modules",
"typings/globals",
"typings/modules"
]
}
๋ด ํด๋ ๊ตฌ์กฐ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
src ํด๋์ ์๋ ๋ด .ts ํ์ผ์ ์ปดํ์ผํ๊ณ ๋์ผํ ํด๋ ๊ตฌ์กฐ๋ก ๋น๋ ํด๋์ ์ถ๋ ฅํ๊ธฐ๋ฅผ ์ํฉ๋๋ค. ๋ด ๋ฌธ์ ๋ฃจํธ๋ฅผ ๋น๋ ํด๋๋ก ์ค์ ํ๊ณ ๋ด src๋ฅผ ๋ฌธ์ ๋ฃจํธ์์ ์ ์ธํ ์ ์๋๋ก ์ด ์์ ์ ์ํํฉ๋๋ค. node_modules ํด๋์ .ts ํ์ผ์ ๋ํ ์ค๋ฅ ๋ฉ์์ง๊ฐ ๋ํ๋ฉ๋๋ค. OP์ ๋์ผํ ์ค๋ฅ ๋ฉ์์ง์ ๋๋ค. ์์์ ๋๋ node_modules๋ฅผ ์ ์ธํ์ต๋๋ค. ์ tsc๊ฐ ๊ทธ๊ฒ์ ๋ํด ๋ถํํฉ๋๊น?
@HillTravis ๋ฌธ์ ๋ https://github.com/Microsoft/TypeScript/issues/9552 ์ ๋์ผํ ๊ฒ ๊ฐ์ต๋๋ค
@mhegazy ๋์ผํ์ง ์ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค. ์, ๋ด ๊ตฌ์กฐ์๋ symlink๊ฐ ํฌํจ๋์ด ์์ง๋ง ํด๋น symlink๊ฐ ์กด์ฌํ๋ ๋ชจ๋ ์์น๋ ๋ฌด์๋์ด์ผ ํฉ๋๋ค.
#9552์๋ src ํด๋๊ฐ ์์ต๋๋ค. ์ฆ, ๋น๋ ์ค์ธ ๊ฒฝ๋ก์ node_modules ํด๋๊ฐ ์์ต๋๋ค. ๋ด ์๋๋ฆฌ์ค์์ tsc๊ฐ ๋ณด๊ณ ์์ด์ผ ํ๋ ๋ฃจํธ ๋๋ ํฐ๋ฆฌ๋ node_modules๋ฅผ ํฌํจํ์ง ์๋ src์
๋๋ค. ๋ฐ๋ผ์ ํด๋น ํด๋๋ฅผ ์ ํ ๋ณด์ง ์์์ผ ํฉ๋๋ค. ๊ทธ ์์ tsconfig.json์ ํตํด ๋ช
์์ ์ผ๋ก ์ ์ธ๋ node_modules ํด๋๊ฐ ์์ต๋๋ค. ๋ฐ๋ผ์ ์ด์ค์ผ๋ก ๋ฌด์ํด์ผ ํฉ๋๋ค. ๋๋ ๋ํ build
ํด๋๋ฅผ ์ ์ธํ๊ณ ๊ทธ ์์ ์๋ node_modules์ ๋ํ ์ฌ๋ณผ๋ฆญ ๋งํฌ๋ฅผ ๋ฎ์ด์ผ ํฉ๋๋ค.
๋ํ #9552์๋ ์ค๋ฅ ๋ฉ์์ง๋ ์ปดํ์ผ ์คํจ์ ๋ํ ์ธ๊ธ์ด ์์์ต๋๋ค.
๋ํ TypeScript 1.8.10์ ์ฌ์ฉํ๊ณ ์์์ ์ธ๊ธํด์ผ ํฉ๋๋ค.
ํนํ ์ค๋ฅ ๋ฉ์์ง๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
์ค๋ฅ TS6059: '/Users/thill/Projects/nrc/client/node_modules/ng2-datetime/src/ng2-datetime/ng2-datetime.module.ts' ํ์ผ์ด 'rootDir' '/Users/thill/Projects/์ ์์ต๋๋ค. nrc/ํด๋ผ์ด์ธํธ/src'. 'rootDir'์๋ ๋ชจ๋ ์์ค ํ์ผ์ด ํฌํจ๋์ด์ผ ํฉ๋๋ค.
์ค๋ฅ TS6059: ํ์ผ '/Users/thill/Projects/nrc/client/node_modules/ng2-datetime/src/ng2-datetime/ng2-datetime.ts'๊ฐ 'rootDir' '/Users/thill/Projects/nrc/์ ์์ต๋๋ค. ํด๋ผ์ด์ธํธ/src'. 'rootDir'์๋ ๋ชจ๋ ์์ค ํ์ผ์ด ํฌํจ๋์ด์ผ ํฉ๋๋ค.
์ค๋ฅ TS6059: '/Users/thill/Projects/nrc/client/node_modules/ng2-datetime/src/ng2-datetime/timepicker-event-interface.ts' ํ์ผ์ด 'rootDir' '/Users/thill/Projects/์ ์์ต๋๋ค. nrc/ํด๋ผ์ด์ธํธ/src'. 'rootDir'์๋ ๋ชจ๋ ์์ค ํ์ผ์ด ํฌํจ๋์ด์ผ ํฉ๋๋ค.
@HillTravis ๋น์ ์ ์ด๊ฒ์ ๋ํด ์ ๋ฅผ ์ ๋ขฐํ ์ ์์ต๋๋ค :) ์ปดํ์ผ๋ฌ๋ฅผ ๋์ง๋ ๊ฒ์ ์ฌ๋ณผ๋ฆญ ๋งํฌ์ ์ผ๊ด์ฑ์๋ ์ฒ๋ฆฌ์ ๋๋ค. ๋ ธ๋ ๋ชจ๋ ํ์ธ์ ์ํด์๋ง ์ฌ๋ณผ๋ฆญ ๋งํฌ๋ฅผ ๋ฐ๋ฅธ ๋ค์ ํด๋น ์ด๋ฆ์ ํ์ผ ์ด๋ฆ์ผ๋ก ์ฌ์ฉํฉ๋๋ค. ๊ทธ๋ฐ ๋ค์ ์ฌ์ฉ์๊ฐ ์ง์ ํ ๊ฒฝ๋ก ๋์ ์ค์ ๊ฒฝ๋ก๋ฅผ ์ฌ์ฉํ์ฌ ๋ชจ๋ ํ์ผ์ด ์์ค ๋๋ ํ ๋ฆฌ ์๋์ ์๋์ง ํ์ธํฉ๋๋ค. ์ด๊ฒ์ด ์ค๋ฅ๋ฅผ ์์ฑํ๋ ๊ฒ์ ๋๋ค.
ํ
์คํธ๋ก ์ฌ๋ณผ๋ฆญ ๋งํฌ๋ฅผ ์ ๊ฑฐํด ๋ณด์์ต๋๋ค. ์ฌ์ค build
ํด๋ ์ ์ฒด๋ฅผ ์ญ์ ํ์ต๋๋ค. ๊ทธ๋ฐ ๋ค์ tsc
๋ค์ ์คํํ์ง๋ง ์ฌ์ ํ ์ค๋ฅ๊ฐ ํ์๋ฉ๋๋ค.
๋ ๋ง์ ํ ์คํธ๋ฅผ ํ๋ ๋์ ํน์ ๋ ธ๋ ๋ชจ๋(ng2-datetime)์ ์ฝ๋ ๋ด ๊ฐ์ ธ์ค๊ธฐ ๋ฐ ์ฌ์ฉ์ ์ฃผ์ ์ฒ๋ฆฌํ๋ ค๊ณ ํ๋๋ ์ค๋ฅ๊ฐ ์ฌ๋ผ์ก์ต๋๋ค. ๋ฐ๋ผ์ ์ฌ๋ณผ๋ฆญ ๋งํฌ์ ๊ด๊ณ์์ด ํด๋น ๋ ธ๋ ๋ชจ๋์ ๊ฐ์ ธ์ค๋ ค๊ณ ํ ๋๋ง ์ค๋ฅ๊ฐ ํ์๋ฉ๋๋ค.
GitHub์์ ํด๋น ํจํค์ง์ ์์ค๋ฅผ ๋ณด๋ฉด package.json ํ์ผ์ "main" ๋งค๊ฐ๋ณ์๊ฐ "ng2-datetime.js"๋ก ์ค์ ๋์ด ์์์ ์ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์์ฑ์๋ ๋์ผํ ๋งค๊ฐ๋ณ์๋ก .ts ํ์ผ์ ๊ฒ์ํ์ต๋๋ค. ์ด๋ฆ. ์ด๊ฒ์ด ๋ฌธ์ ๋ฅผ ์ผ์ผํค๋ ๊ฒ ๊ฐ์ต๋๋ค. .d.ts ํ์ผ์ ๋ง๋ค๊ณ .ts ํ์ผ์ ์ญ์ ํ๋ฉด ๋ฌธ์ ๊ฐ ์ฌ๋ผ์ง๋๋ค. ์ฌ๋ณผ๋ฆญ ๋งํฌ๋ฅผ ๋ค์ ์ถ๊ฐํ ํ์๋ ๋ฌธ์ ์์ด ์ปดํ์ผ๋์์ต๋๋ค.
๋ฐ๋ผ์ ๋ชจ๋ ์ธก๋ฉด์์ ์ด ๋ฌธ์ ๊ฐ ํนํ ์ฌ๋ณผ๋ฆญ ๋งํฌ์ ์ด๋ป๊ฒ ๊ด๋ จ๋ ์ ์๋์ง ์ ์ ์์ต๋๋ค. ์์ฑ์๊ฐ ํจํค์ง์ .ts ํ์ผ์ ํฌํจํ ๋ ์ผ๋ฐ์ ์ผ๋ก ๋ฌธ์ ๋ฅผ ์ผ์ผํค๋ ๊ฒ ๊ฐ์ต๋๋ค.
์ด์ ๋ํ ํด๊ฒฐ ๋ฐฉ๋ฒ์ด ์๋์ง ์๊ณ ์์ต๋๊น? ์์ OP๋ tsconfig.json์ "exclude"๋ฅผ ๋ค์ ์ถ๊ฐํ์ฌ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ค๊ณ ๋งํ์ต๋๋ค. ์ด๋ฏธ ๋๋ ํ ๋ฆฌ๋ฅผ ์ ์ธํ์ง๋ง ์ฌ์ ํ ์ปดํ์ผ์ ์๋ํ๊ณ ์์ต๋๋ค.
์ด์ ๋ํ ํด๊ฒฐ ๋ฐฉ๋ฒ์ด ์๋์ง ์๊ณ ์์ต๋๊น? ์์ OP๋ tsconfig.json์ "exclude"๋ฅผ ๋ค์ ์ถ๊ฐํ์ฌ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ค๊ณ ๋งํ์ต๋๋ค. ์ด๋ฏธ ๋๋ ํ ๋ฆฌ๋ฅผ ์ ์ธํ์ง๋ง ์ฌ์ ํ ์ปดํ์ผ์ ์๋ํ๊ณ ์์ต๋๋ค.
์ด๊ฒ์ ๋ค๋ฅธ ๊ฒ๊ณผ ๊ด๋ จ์ด ์์ ์ ์์ง๋ง ์ง๊ธ์ ์ฐพ์ ์ ์์ต๋๋ค. ์ ํ์ ํ์ธํ ๋ tsc
ํญ์ node_modules
์์ ์ฐพ์ผ๋ ค๊ณ ํ๊ณ , ๊ฑฐ๊ธฐ์๋ ์์ต๋๋ค( typings
).
"tsc๋ rootDir ์ธ๋ถ์ ts ํ์ผ์ ์ ๊ฒฝ์ฐ์ง ์๊ณ ์คํจํด์ผ ํฉ๋๋ค." ๋์ํฉ๋๋ค.
๋ชจ๋ ์์ค๊ฐ ์์ด์ผ ํ๋ ๊ณณ์ด๋ฏ๋ก typescript๊ฐ rootDir ์ธ๋ถ์ JS ํ์ผ์ ๋ณด๋ ์ด์ ๋ฅผ ์ดํดํ ์ ์์ต๋๋ค .
์ค๋ฅ ๋ฉ์์ง๋ "'rootDir'์ ๋ชจ๋ ์์ค ํ์ผ์ ํฌํจํ ๊ฒ์ผ๋ก ์์๋ฉ๋๋ค"๋ผ๊ณ ํ์๋๋ฉด ํด๋น ๋๋ ํ ๋ฆฌ ์ธ๋ถ์ ๋ชจ๋ ํญ๋ชฉ์ TS์ ๊ดํ ํ ์์ค ํ์ผ๋ก ์์๋๊ฑฐ๋ ๊ฐ์ ๋์ด์๋ ์ ๋ฉ๋๋ค!
์ด๊ฒ์ด "์๋ํ ๋๋ก ์๋"์ด๋ผ๋ฉด ์ด ํ๋์ ์๋ ๋๋ ๋๊ธฐ๋ ์ ํํ ๋ฌด์์ ๋๊น? TS๊ฐ rootDir ์ธ๋ถ์ ์๋ ์์ค ํ์ผ์ ์ปดํ์ผํ๋ ค๋ ๊ฒฝ์ฐ๊ฐ ์์ต๋๊น?
๋ฐ๋ฉด์ tsconfig์ "include" ์น์ ์ ์ถ๊ฐํ๋ฉด ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋ฉ๋๋ค. ํฌํจํ ํ์ผ์ด๋ ๋๋ ํฐ๋ฆฌ๊ฐ ์ ๊ณต๋๋ฉด TS๋ ๊ทธ ์ธ๋ถ์ ๋ค๋ฅธ ํ์ผ์ ์ฐพ์ง ์์ต๋๋ค.
ํ์ดํ์คํฌ๋ฆฝํธ 1.8.10 ์ฌ์ฉ
๋ด homedir ~/node_modules
node_modules ํด๋๊ฐ ์์ต๋๋ค. ๋ด ํ๋ก์ ํธ ๋๋ ํ ๋ฆฌ ~/projects/myProject/
์์ tsc
๋ฅผ ์คํํ๋ฉด typescript๊ฐ ๋ค์ ํ์ผ์ ๋ํด ๋ถํํฉ๋๋ค.
../../node_modules/aws-sdk/index.d.ts(7,1): error TS1128: Declaration or statement expected.
../../node_modules/aws-sdk/index.d.ts(7,11): error TS1005: ';' expected.
../../node_modules/aws-sdk/index.d.ts(7,24): error TS1005: '{' expected.
../../node_modules/aws-sdk/lib/config.d.ts(1,1): error TS1084: Invalid 'reference' directive syntax.
../../node_modules/aws-sdk/lib/config.d.ts(29,84): error TS1110: Type expected.
../../node_modules/aws-sdk/lib/config.d.ts(36,62): error TS1110: Type expected.
../../node_modules/aws-sdk/lib/config.d.ts(68,133): error TS1110: Type expected.
../../node_modules/aws-sdk/lib/config.d.ts(75,111): error TS1110: Type expected.
../../node_modules/aws-sdk/lib/request.d.ts(1,1): error TS1084: Invalid 'reference' directive syntax.
../../node_modules/aws-sdk/lib/services/glacier.d.ts(1,1): error TS1084: Invalid 'reference' directive syntax.
๋งค์ฐ ํผ๋ ์ค๋ฝ์ต๋๋ค. ์ฒ์์ ํ ๋๋ ํ ๋ฆฌ์ ๋ ธ๋ ๋ชจ๋ ํด๋๊ฐ์๋ ์ด์ ๋ ํ์คํ์ง ์์ง๋ง.
@iwllyu [email protected]
์์ ํ๋ก์ ํธ๋ฅผ ํ์ธํ๊ณ ์ฌ์ ํ ๋ฌธ์ ๊ฐ ์๋ ๊ฒฝ์ฐ ์ ๋ฌธ์ ๋ฅผ ์ ์ถํ ์ ์์ต๋๋ค.
๋ค๋ฅธ ํ์ผ ์ธํธ์ ๋ํด ๋ถํํ์ง๋ง ์ฌ์ ํ 2.1.4์ ๋ฌธ์ ๊ฐ ์์ต๋๋ค.
Using tsc v1.8.10
../../node_modules/aws-sdk/index.d.ts(7,1): error TS1128: Declaration or statement expected.
../../node_modules/aws-sdk/index.d.ts(7,11): error TS1005: ';' expected.
../../node_modules/aws-sdk/index.d.ts(7,24): error TS1005: '{' expected.
../../node_modules/aws-sdk/lib/config.d.ts(27,84): error TS1110: Type expected.
../../node_modules/aws-sdk/lib/config.d.ts(34,62): error TS1110: Type expected.
../../node_modules/aws-sdk/lib/config.d.ts(66,133): error TS1110: Type expected.
../../node_modules/aws-sdk/lib/config.d.ts(73,111): error TS1110: Type expected.
Using tsc v2.1.4
../../node_modules/aws-sdk/lib/config.d.ts(38,37): error TS2304: Cannot find name 'Promise'.
../../node_modules/aws-sdk/lib/request.d.ts(164,16): error TS2304: Cannot find name 'Promise'.
../../node_modules/aws-sdk/lib/s3/managed_upload.d.ts(15,16): error TS2304: Cannot find name 'Promise'.
ํ
์คํธ ์ผ์ด์ค๋ฅผ ๋ถ๋ฆฌํ๋ ํ๋ก์ ํธ๋ฅผ ์์ฑํ๊ฒ ์ต๋๋ค.
๊ธ์, ๋๋ ์๋ก์ด ํ๋ก์ ํธ๋ก ์๋ํ์ง๋ง ์ผ์ด๋์ง ์์์ต๋๋ค. ์ด๊ฒ์ ๋ ์ค๋๋ ํ๋ก์ ํธ์ด๊ณ ์ถ๊ฐ node_modules ํด๋๋ฅผ ์ ๊ฑฐํ์ฌ ์ด๋ฏธ ์์ ํ๊ธฐ ๋๋ฌธ์ ๋ค์ ๋ง๋ค๋ ค๊ณ ๋ ์ด์ ์๊ฐ์ ๋ค์ด์ง ์์ ๊ฒ์ ๋๋ค. ๋์ ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค!
์ด ์ฌ๊ฑด์ ๋ํด. ๊ฐ์ ธ์ค๋ ๋ชจ๋ ๊ฒ์ด ์ธ๋ถ์์ ์ ํ(์: ์ด "์ ๋ฉด ์ ํ ์คํฌ๋ฆฝํธ, ํ๋ฉด ์ ํ ์คํฌ๋ฆฝํธ" ์จ์ด๋ธ์ ๋ํด ์ค์ ๋ก ์ํ์ ํ๊ณ ์๋ ๊ฒ์ฒ๋ผ)์ธ ๊ฒฝ์ฐ - ์๋ง๋ tsc๊ฐ ๋ด๊ฐ ํ๋ ์ผ์ ๊ตฌ๋ณํ ์ ์์๊น์?
๋ฐฑ์๋์์ ๋ด ํ๋ก ํธ์๋ ์ ํ๋ฆฌ์ผ์ด์
๊น์ง ๋ด ์ํฐํฐ ์ ํ๋ง ๊ณต์ ํ๊ณ ์์ต๋๋ค. ๋ฌผ๋ก ํด๋น ํด๋์ค์ ์ ํ ๋ฐ ๊ฐ์ ธ์ค๊ธฐ๊ฐ ์๋ ์ถ๋ ฅ(์ปดํ์ผ ์๊ฐ ๋ฐ ์ธํ
๋ฆฌ์ผ์ค์๋ง ์ฌ์ฉ๋๊ธฐ ๋๋ฌธ์).
์ด๊ฒ๋ ์์์ต๋๋ค.
์ง๊ธ ํ๋ฆ์ ๊ณ ๋ คํ๋ฉด Typescript๋ ์ฐ๋ฆฌ ํ์ ๋๋ฌด ์ ํ์ ์
๋๋ค.
์๋ค์, ์ง๊ธ ์ด๊ฒ์ ๋ํ ํด๊ฒฐ์ฑ ์ด ์์ต๋๊น? ๋ฐฑ์๋ ์ฝ๋ ๋ด์์ ํด๋ผ์ด์ธํธ ์ฝ๋์ ์ ํ ์ฌ์ฉ ๋ฐ ๊ธฐํ.
์ต์ ์ ์ ํ์ ๋ฌด์์ ๋๊น? ๊ฑฐ๊ธฐ์ ๋ณต์ฌํ์ฌ ๋ถ์ฌ๋ฃ๊ณ ์ ํ์ ๋ณ๊ฒฝํ๋ฉด ์์ ํฉ๋๊น?
2๊ฐ์ ํ๋ก์ ํธ์ ๋ํด ํ๋์ ๋ฃจํธ ๋๋ ํ ๋ฆฌ๋ฅผ ๋ง๋๋ ๊ฒ์ ์ต์ ์ด ์๋๋๋ค. ์ ๋ฐฑ์๋ tsconfig.json์ jsx์ ๋ํ ์ ๋ณด๊ฐ ์๊ณ es2015๋ฅผ ์ฌ์ฉํ ์ ์์ ๋ commonjs๋ก ์ปดํ์ผ๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ๋๋ค.
baseUrl
์ด(๊ฐ) ์ ํฉํฉ๋๊น?
@unional ์ baseUrl์ ๋ณ๊ฒฝํ์ง ์์ผ๋ฉฐ ๋ชจ๋ node_modules ๊ฐ์ ธ์ค๊ธฐ๋ฅผ ์ค๋จํฉ๋๋ค.
import * as request from "superagent";
ํ์ง๋ง
import * as request from "node_modules/superagent/..something";
?
ใ
ใ
ใ
์ด๊ฒ ์ ๋ง ์๋ํ ๋๋ก ์๋ํ๋ ๊ฑด๊ฐ์? ๋ฐฉ๊ธ ์ด๊ฒ์ ๋ถ๋ช์ณค๊ณ , ๋ด ์์ค๊ฐ ๋ชจ๋ ํน์ ํด๋( rootDir
๋ฅผ ํตํด)์ ์๋ค๊ณ typescript์ ๋งํ ๋ค์ .ts
ํ์ฅ์๊ฐ ํด๋น ํด๋ ์ธ๋ถ์ ์์ต๋๋ค.
์ด๊ฒ์ ์ ๋ง ์ค๋ฅ์ฒ๋ผ ๋๊ปด์ง๋๋ค. ์ปดํ์ผ๋ฌ์๊ฒ rootDir
๋ฅผ ํตํด ์์ค๊ฐ ์๋ ์์น๋ฅผ ๋งํ๋ฉด ํด๋น ์ค์ ์ ์์ ํ ๋ฌด์ํ๊ณ ์ถ๋ ฅ ํด๋ ๊ตฌ์กฐ๋ฅผ ๋ณ๊ฒฝํด์๋ ์ ๋ฉ๋๋ค. ์๋ํ๋ฉด ๋ด๊ฐ ๋ญ๊ฐ ์๋ชปํ๋ค๊ณ ์๊ฐํ๊ธฐ ๋๋ฌธ์
๋๋ค. rootDir
์๋ ํ์ผ์ ๋ฌด์ํด์ผ ํฉ๋๋ค. ๋๋ ๋ด๊ฐ ์ํ๋ ์ถ๋ ฅ ํด๋ ๊ตฌ์กฐ์ ์ ํ ์ผ์นํ์ง ์๋ ์ถ๋ ฅ์ ๊ณ์ ๋ด๋ณด๋ด์ง ์๊ณ ์์ ํ ์คํจํด์ผ ํฉ๋๋ค!
๋๋ฅผ ๋ฐ๋ผ ์ค๋ ์ฌ๋์ ์ํด ๋ค์์ ๋น์ ์ด _์ค์ ๋ก_ ์ํ๋ ๊ฒ์ ํ ๊ฒ์ ๋๋ค.
{
"compilerOptions": {
"outDir": "./output",
"rootDir": "./source",
},
"include": [
"source"
]
}
๋ด ์์ค๊ฐ ๋ชจ๋ ํน์ ํด๋(rootDir๋ฅผ ํตํด)์ ์๋ค๊ณ typescript์ ๋งํ์ต๋๋ค.
์ด๊ฒ์ rootDir
์๋ฏธํ๋ ๋ฐ๊ฐ ์๋๋๋ค! rootDir
๋ "์ด ํด๋๋ฅผ outDir
์ ๊ฒฝ๋ก ๊ณ์ฐ์ ์ํ ์๋์ ๊ธฐ์ค์ผ๋ก ์ฌ์ฉ"์ ์๋ฏธํฉ๋๋ค. ์ปดํ์ผ์ ์ผ๋ถ์ธ ํ์ผ์ files
๋ฐ/๋๋ include
/ exclude
๋ก ๋ต๋ณ๋๋ ๋ณ๋์ ์ง๋ฌธ์
๋๋ค.
๊ทธ๊ฒ์ ์๋ฝํ๋๋ผ๋ ํ์ฌ ๋์์ ์ฌ์ ํ โโ์ค๋ฅ IMO์ ์์ต๋๋ค. ์ง์ ๋ ๋๋ ํ ๋ฆฌ ์ธ๋ถ์ TS ํ์ผ์ด ์๋ ๊ฒฝ์ฐ rootDir
๋ outDir
์ ๊ฒฝ๋ก๋ฅผ ๊ณ์ฐํ๋ ๊ธฐ์ด๊ฐ ๋์ง _์๋๋๋ค. ์ด๋ ๋ด๊ฐ ์ง์ ํ ๊ตฌ์ฑ์ด ์์ ํ ๋ฌด์๋๋ค๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค.
์ปดํ์ผ๋ฌ๊ฐ ๋ด๊ฐ ์๋ชป๋ ๊ตฌ์ฑ์ ๋ถ์ฌํ๋ค๊ณ ํจ๊ณผ์ ์ผ๋ก ์๊ฐํ๊ธฐ ๋๋ฌธ์ ํ๋ ์คํจ๊ฐ ํจ์ฌ ๋ ์ข์ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. ์ ํจํ์ง ์์ ๊ตฌ์ฑ์ ๋ฌด์ํ๋ ๊ฒ์ (IMO) ์ด ์ ํ์ ์คํจ๋ฅผ ์ฒ๋ฆฌํ๋ ์ฌ๋ฐ๋ฅธ ๋ฐฉ๋ฒ์ด ์๋๋๋ค.
ํจ์ฌ ๋ ๋ช ํํ ์ค๋ฅ ๋ฉ์์ง์ ์(ํ๋ ์คํจ์ ํจ๊ป):
TSC๊ฐ rootDir ์ธ๋ถ์ ์๋ typescript ํ์ผ์ ์ฐพ์์ผ๋ฏ๋ก ์ปดํ์ผ์ ์งํํ ์ ์์ต๋๋ค. ๋ชจ๋ typescript ํ์ผ์ ํฌํจํ๋๋ก
rootDir
๋ฅผ ๋ณ๊ฒฝํ๊ฑฐ๋ rootDir ์ธ๋ถ์ ํ์ผ์ ์ ์ธํ๊ฑฐ๋ rootDir ๋ด๋ถ์ ํ์ผ๋ง ํฌํจํฉ๋๋ค.
์ฐธ๊ณ : rootDir์ ํ์ฌ ๋์์ด ๋งค์ฐ ์๋ชป๋์๋ค๊ณ ๋๋ผ๋ ์ด์ ์ ํฐ ๋ถ๋ถ์ ๋ฐ๋ก rootDir ์ธ๋ถ์ ํ์ผ์ ๊ฐ๋ ๊ฒ์ด ์ด์น์ ๋ง์ง ์๊ธฐ ๋๋ฌธ์
๋๋ค. rootDir
์ธ๋ถ์์ ํ์ผ์ ์ปดํ์ผํ๋ค๋ ๊ฒ์ด ๋ฌด์์ ์๋ฏธํ๋์ง ์ค์ค๋ก(๋๋ ์ปดํ์ผ๋ฌ)์๊ฒ ๋ฌผ์ ๋ ์ ์ผํ ๋๋ต์ "์ดํด๊ฐ ๋์ง ์์ต๋๋ค"์
๋๋ค. ๋ฐ๋ผ์ rootDir์ด sourceDir๋ ์ง์ ํ๋ค๋ ์์ฐ์ค๋ฌ์ด ๊ฒฐ๋ก ์ ๋๋ฌํฉ๋๋ค.
์
์ ์ด๋ฆ์ ์์ต๋๋ค. ๊ทธ๊ฒ์ ์ค์ ๋ก relativePathBaseDir
๋๋ ์ด์ ์ ์ฌํ ๊ฒ์ ์๋ฏธํฉ๋๋ค.
๋ํ include
์ผ๋ฐ์ ์ผ๋ก "์ฌ๊ธฐ๋ ๋ณด์ธ์"๋ฅผ ์๋ฏธํ์ง๋ง ์ด ๊ฒฝ์ฐ์๋ "์ฌ๊ธฐ๋ง ๋ณด๊ธฐ"๋ฅผ ์๋ฏธํฉ๋๋ค.
๋๋ ๊ทธ๊ฒ์ด ๋ค๋ฅธ ์ด๋ฆ์ ๊ฐ์ง๊ณ ์๋ฌดํ๋๋ ๊ฒ์ด ํ๋ช
ํ ๊ฒ์
๋๋ค.
IMO ์ด ์๊ฒฌ ์ ์ด๊ฒ์ด ์ค์ ๋ก ๋ฒ๊ทธ์ด๋ฉฐ ๋ค์๊ณผ ๊ฐ์ด ๋ค์ ์ด์ด์ผ ํจ์ ํ์ธํ๊ธฐ ์ํด ํนํ ๊ณ ๋ ค๋์ด์ผ ํฉ๋๋ค.
์ฐธ๊ณ : rootDir์ ํ์ฌ ๋์์ด ๋งค์ฐ ์๋ชป๋์๋ค๊ณ ๋๋ผ๋ ์ด์ ์ ํฐ ๋ถ๋ถ์ ๋ฐ๋ก rootDir ์ธ๋ถ์ ํ์ผ์ ๊ฐ๋ ๊ฒ์ด ์ด์น์ ๋ง์ง ์๊ธฐ ๋๋ฌธ์ ๋๋ค.
rootDir
์ธ๋ถ์์ ํ์ผ์ ์ปดํ์ผํ๋ค๋ ๊ฒ์ด ๋ฌด์์ ์๋ฏธํ๋์ง ์ค์ค๋ก(๋๋ ์ปดํ์ผ๋ฌ)์๊ฒ ๋ฌผ์ ๋ ์ ์ผํ ๋๋ต์ "์ดํด๊ฐ ๋์ง ์์ต๋๋ค"์ ๋๋ค.
์ฌ์ค, ๊ทธ๊ฒ์ ๋ง์ด๋์ง ์์ต๋๋ค . " rootDir
์ธ๋ถ์ ์์ค ํ์ผ" ์ ํ์ผ ํ์ฅ์๋ ๋ด์ฉ์ ๊ด๊ณ์์ด ๋จ์ํ
์ด๊ฒ์ ๋ฒ๊ทธ๋ผ๋ ์ ์์ +100์ ๋๋ค(์ค์ ๋ก๋ ๋ถ์พํ ๊ฒ์ ๋๋ค). ๋ค์ ๋๋ ํ ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ๊ณ ๋ คํ์ญ์์ค.
- src/
- module.ts
- test/
- module.test.ts
- out/
- module.js
ts-node
ํ
์คํธ๋ฅผ ์คํํ๊ธฐ ๋๋ฌธ์ tsc
๋ง src
๋ง ์ปดํ์ผํ๊ณ ์ถ์ต๋๋ค. rootDir: 'src'
๊ฐ ์์ผ๋ฉด ํ์ฌ ์ปดํ์ผ ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค. ts-node
๋ก๋ง ์คํํ๋ ค๋ ํ
์คํธ ๋ฐ ๊ธฐํ ํญ๋ชฉ์ "์ ์ธ๋จ"์ผ๋ก ํ์ํ๋ฉด ๋์ ์ผ์ด ๋ฐ์ํ๊ธฐ ์์ํฉ๋๋ค(์: vscode ๊ฐ์กฐ ํ์๊ฐ ํ
์คํธ์์ ๊นจ์ง ).
์ค์ ๋ก rootDir
, excluded
๋ฐ ๊ธฐํ ๋ชจ๋ ์ต์
์ ์กฐํฉ์ ๋ชจ๋ ์๊ตฌ ์ฌํญ์ ์ถฉ์กฑํ์ง ์์ต๋๋ค(ํ
์คํธ๋ฅผ ์คํํ๊ณ ์์
ํ ์ ์๋ ๋์ ์ปดํ์ผ์์ ํ
์คํธ ์ ์ธ).
๊ทธ๋ฆฌ๊ณ ์ ๋ ์ ์ฌ์ฉ ์ฌ๋ก๊ฐ ๋ ํนํ๋ค๊ณ ์๊ฐํ์ง ์์ต๋๋ค. ๋ฐ๋ผ์ ์ ์ด๋ UX ๊ด์ ์์ "์๋ํ ๋๋ก ์์ " ๋ ์ด๋ธ์ ์ฌ๊ณ ํ ๊ฐ์น๊ฐ ์์ต๋๋ค.
src
/ test
/ out
์ค์ ์ ํ๋ก์ ํธ ์ฐธ์กฐ์์ ํด๊ฒฐํ ์ฃผ์ ์๋๋ฆฌ์ค์์ต๋๋ค.
rootDir
์ค์ ํ ํ typescript๊ฐ ๋ด webpack.config.js ํ์ผ์ ์ปดํ์ผํ๋ ค๊ณ ํ๋ ์ด์ ๋ฅผ ์ธํฐ๋ท ๊ฒ์์ ํ๋ค๊ฐ ์ด ๋ฌธ์ ๋ฅผ ๋ฐ๊ฒฌํ์ต๋๋ค.
๋ด ์์ค๊ฐ ๋ชจ๋ ํน์ ํด๋(rootDir๋ฅผ ํตํด)์ ์๋ค๊ณ typescript์ ๋งํ์ต๋๋ค.
์ด๊ฒ์ rootDir์ด ์๋ฏธํ๋ ๊ฒ์ด ์๋๋๋ค! rootDir์ "outDir์ ๊ฒฝ๋ก๋ฅผ ๊ณ์ฐํ๊ธฐ ์ํ ์๋์ ๊ธฐ์ค์ผ๋ก ์ด ํด๋๋ฅผ ์ฌ์ฉ"์ ์๋ฏธํฉ๋๋ค. ์ด๋ค ํ์ผ์ด ์ปดํ์ผ์ ์ผ๋ถ์ธ์ง๋ ํ์ผ ๋ฐ/๋๋ ํฌํจ/์ ์ธ์ ์ํด ๋ต๋ณ๋๋ ๋ณ๋์ ์ง๋ฌธ์ ๋๋ค.
์ด๊ฒ์ด ๋ต์ด๋ค! rootDir์ ๋ํ ๋ฌธ์ ๋ ๋งํฉ๋๋ค.
์ ๋ ฅ ํ์ผ์ ๋ฃจํธ ๋๋ ํ ๋ฆฌ๋ฅผ ์ง์ ํฉ๋๋ค.
"์ ๋ ฅ _source_ ํ์ผ"์ ์๋ฏธํ๋ ๊ฒ์ผ๋ก ๊ฐ์ฃผํ์ต๋๋ค. @RyanCavanaugh ์ ์๊ฒฌ์ด ์ด ์ต์ ์ ๋ํ ํ์ฌ ์ค๋ช ์ ๋์ฒดํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
์ฌ๊ธฐ ๋งํฌ - https://github.com/Microsoft/TypeScript/issues/11299 ๋ ์ด ๋ฌธ์ ์ ๋ณต์ ๋ณธ์ ๋๋ค. (ํด๊ฒฐ์ฑ : include/exclude๋ฅผ ์ฌ์ฉํ์ฌ ์ปดํ์ผํ ํ์ผ์ ์ง์ ํฉ๋๋ค. rootDir์ ์ปดํ์ผํ ํ์ผ์ ์ง์ ํ์ง ์์ต๋๋ค.)
@mhegazy ์ด ํจ๊ณผ์ ํด๋น ์ค๋ ๋์ ๋ํ ์๊ฒฌ์ ์ถ๊ฐํ์๊ฒ ์ต๋๊น? ๊ทธ๊ฒ์ด ์ง๋ฌธ์๊ฐ ๋งํ๋ ๊ฒ์ผ๋ก ๋ณด์ ๋๋ค(TS๊ฐ RootDir ์ธ๋ถ์ ํ์ผ์ ๋ณด๋ ์ด์ ์ ๋ํด ํผ๋์ค๋ฝ๊ณ rootDir์ด ์๋ฏธํ๋ ๊ฒ๊ณผ ๋์ผํ ์คํด).
์ ๋ ์ด ๋ฌธ์ ์ ์ง๋ฉดํด ์์ผ๋ฉฐ ํด๊ฒฐํ ์ ์์ต๋๋ค.
tsc ์ปดํ์ผ์ด ํธ๋ฆฌ๋ฅผ ํฌํจ๋ ๋๋ ํ ๋ฆฌ์์ ์์ ํด๋๋ก ์ด๋ํ์ฌ ์ค๋ณต ์ ํ ์ค๋ฅ๋ฅผ ๋ฐ์์ํต๋๋ค.
๋ค์๊ณผ ๊ฐ์ ์ค์ฒฉ ํด๋ ๊ตฌ์กฐ๊ฐ ์์ต๋๋ค.
โโsrc
โโpackage.json
โโnode_modules
โโtsconfig.json
โโexample
โ โโsrc
โ โโpackage.json
โ โโnode_modules
โ โโtsconfig.json
์ด์ ์์ ๋๋ ํ ๋ฆฌ์์ tsc๋ฅผ ์คํํ๋ ค๊ณ ํ๋ฉด ๋ค์ ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค.
node_modules/@types/react/index.d.ts:2809:14 - error TS2300: Duplicate identifier 'LibraryManagedAttributes'.
2809 type LibraryManagedAttributes<C, P> = C extends React.MemoExoticComponent<infer T> | React.LazyExoticComponent<infer T>
~~~~~~~~~~~~~~~~~~~~~~~~
../node_modules/@types/react/index.d.ts:2814:14
2814 type LibraryManagedAttributes<C, P> = C extends React.MemoExoticComponent<infer T> | React.LazyExoticComponent<infer T>
~~~~~~~~~~~~~~~~~~~~~~~~
'LibraryManagedAttributes' was also declared here.
์ค๋ฅ์์ ๋ณผ ์ ์๋ฏ์ด tsc๋ ์์ ํด๋์์ ํธ๋ฆฌ ์๋ก ์ฌ๋ผ๊ฐ์ ๋ถ๋ชจ ๋๋ ํฐ๋ฆฌ์ node_modules ํด๋๋ฅผ ์ฐพ๊ณ ์์ต๋๋ค! ๋ ๋์ ๋๋์ ๊ฑฐ์ ํจ๊ณผ ์์ด ์์ node_modules ๋๋ ํ ๋ฆฌ๋ฅผ ๋ช ์์ ์ผ๋ก ๋ฌด์ํ๋ ค๊ณ ์๋ํ๋ค๋ ๊ฒ์ ๋๋ค.
๋ค์์ ์์ ๋๋ ํ ๋ฆฌ์ tsconfig์ ๋๋ค.
{
"compilerOptions": {
"target": "es5",
"experimentalDecorators": true,
"module": "commonjs",
"sourceMap": true,
"outDir": "./dist",
"rootDir": "./src",
"strict": true,
"moduleResolution": "node",
"lib": ["es2017", "dom"],
"jsx": "react"
}
,
"typeRoots": [
"./node_modules/@types"
],
"include": [
"src"
],
"exclude": [
"node_modules",
"../node_modules"
]
}
์ด ๋ฌธ์ ๋ฅผ ์ด๋ป๊ฒ ํด๊ฒฐํ ์ ์์ต๋๊น? ์์ ์ด๋ ๊ฒ๋ ๋๋ฅผ ์ํด ์๋ํ์ง ์๋ ๊ฒ ๊ฐ์ต๋๋ค
@lexwebb ๋์ผํ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ต๋๋ค. @types/react
์ ๋์ผํ ๋ฒ์ ์ด ์๋ yarn.lock
ํ์ผ์ ํ์ธํ์ญ์์ค.
https://stackoverflow.com/questions/52399839/typescript-duplicate-identifier-librarymanagedattributes๋ฅผ ์ฐธ์กฐ
๋ด ์์ฐ ํด๋์ ํ์ฅ์๊ฐ .ts
์ธ "MPEG Transport Stream" ๋น๋์ค ํ์ผ์ด ํฌํจ๋์ด ์๊ธฐ ๋๋ฌธ์ ์ฌ๊ธฐ์ ๋์ฐฉํ์ต๋๋ค. ๊ทธ๋์ ํด๋๊ฐ ๋ด rootDir
๊ฒฝ๋ก์ ์์ด๋ tsc ์ถฉ๋์ด ๋ฐ์ํ์ต๋๋ค ๐
exclude
๊ฒฝ๋ก์ assets ํด๋๋ฅผ ์ถ๊ฐํ์ฌ ์์ ํ์ง๋ง, ๋ถ์ํ ํ๋์ด์์ต๋๋ค ๐ค
๊ทธ๋์ ๋ถ๋ชจ์ ์์ ํจํค์ง json ๋ชจ๋์์ ์ฝ๊ฐ ๋ค๋ฅธ ๋ฒ์ ์ ๋ฐ์์ด ์๋ ๊ฒ์ผ๋ก ๋ํ๋ฌ์ต๋๋ค. ๋ฒ์ ์ ์ผ์น์ํค๋ฉด ๋ฌธ์ ๊ฐ ์ ํํ ์ ๊ฑฐ๋์์ต๋๋ค. ์ฌ์ ํ ์์ ๋๋ ํ ๋ฆฌ ์์ ์ ํ ๊ฒ์ฌ๋ฅผ ์ ์ธํ ์ ์๋ ๊ณ ํต์ ๋๋ค.
๋๋ ์ด๊ฒ์ด ๊ฒฐ์ฝ ๊ณ ์ณ์ง์ง ์์ ๊ฒ์ด๋ผ๊ณ ์๊ฐํ๋ค. ๋ฐฉ๊ธ ๊ฐ์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ต๋๋ค. ์ด๊ฒ์ด "์๋ํ ๋๋ก ์๋"ํ๋ ๋ฐฉ๋ฒ์ ์ ๋ฅผ ๋์ด์ ๊ฒ์ ๋๋ค. ์๋๋ ์ปดํ์ผ๋ฌ๋ฅผ ๋ฌด์๋ฏธํ ๋ฐฉ์์ผ๋ก ์คํํ๋ ๊ฒ์ด ์์ต๋๋ค.
๋ด ๊ฐ์ธ์ ์ธ ๊ฒฝํ์ ๋ฐ๋ฅด๋ฉด typescript ๋น๋๊ฐ rootDir
ํธ๋ฆฌ์์ ๋ฒ์ด๋์ ์์ํ์ง ๋ชปํ ๊ฒ์ ๋น๋ํ๋ ค๊ณ ์๋ํ๋ ์ด์ ๋ ๋น์ ์ด (์๋์ ์ผ๋ก ๋๋ ๋ถ์ฃผ์ํ๊ฒ) ์ง์ ๋๋ ๊ฐ์ ์ ์ผ๋ก ๋ฌด์ธ๊ฐ๋ฅผ ์ฐธ์กฐํ๋ค๋ ์ฌ์ค ๋๋ฌธ์
๋๋ค. rootDir
๋ด์ ์์ญ. ๊ทธ๋ ๊ฒ ํ๋ฉด ์ฐธ์กฐ ํ์ผ์ด ํฌํจ๋ ์์ญ์ ์ ์ธํ๋ ค๊ณ ์๋ํ๋์ง ์ฌ๋ถ์ ๊ด๊ณ์์ด ๋น๋๊ฐ ์ฐธ์กฐ ํธ๋ฆฌ๋ฅผ ๋ฐ๋ฆ
๋๋ค. ๋๋ก๋ PITA๊ฐ ์ด๋ป๊ฒ/์ด๋์ โโ๊ทธ๊ฒ์ ํ๋์ง ์์๋ด๋ ค๊ณ ํ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ํญ์ ๋๋ ๊ทธ๊ฒ์ด tsc
์ ์๋ชป์ด ์๋๋ผ ์ ์์ ์ ์๋ชป์ด๋ผ๋ ๊ฒ์ ์๊ฒ ๋ฉ๋๋ค. ๋ด๊ฐ ์ง์ํ ๋๋ก ํ๋ ๊ฒ๋ฟ์
๋๋ค.
์ด๊ฒ์ด ๋๋ฅผ ๋๋ฆด ๋๋ง๋ค ๊ทธ๊ฒ์ ์ ํ ๋๋ฌธ์
๋๋ค. ์ธํฐํ์ด์ค ๋๋ ๋ค๋ฅธ ๊ฒ์ ๊ฐ์ ธ์ค๋ ํ์ผ์ ์๋ ๋ค๋ฅธ ๊ฒ์ ๊ฐ์ ธ์ค๋ ํ์ผ์ ์๋ ๊ฒ์ ๊ฐ์ ธ์ต๋๋ค. ๊ฒฐ๊ตญ rootDir
์ธ๋ถ์ ํ์ผ์ ์๋ ๊ฒ์ ๊ฐ์ ธ์ฌ ๋๊น์ง ๊ทธ๋ฆฌ๊ณ ๋งค์ฐ ์์ฃผ ๋ด ๊ตฌ์ฑ์์ ๋ช
์์ ์ผ๋ก ์ ์ธํ๋ ค๊ณ ํฉ๋๋ค.
HTH ์ผ๋ถ๋ ๊ณ ํต์ ๊ทผ์์ ๋๋ฌํฉ๋๋ค. ์๋ฌด๋ฆฌ ๋ง์ ๊ตฌ์ฑ์ ํด๋ ๋น ์ ธ๋์ฌ ์ ์์ต๋๋ค. ๊ฐ์ ธ์ค๊ธฐ ๊ตฌ์กฐ๋ฅผ ์๊ฒฉํ๊ฒ ์ ์ดํ๊ธฐ๋ง ํ๋ฉด ๋ฉ๋๋ค.
@kpturner ๋งค์ฐ ํฉ๋ฆฌ์ ์ผ๋ก ๋ค๋ฆฌ์ง๋ง โ ํด๋ ๊ฐ ๊ฐ์ ธ์ค๊ธฐ๊ฐ ์๋ ๋ฒ ์ด๋ณธ ํ ์คํธ ํ๋ก์ ํธ๋ ๋ชจ๋๊ฐ ๋ถํํ๋ ๋์์ ์์ฑํฉ๋๋ค.
์ง์ง? ํ ๋ฒ๋ ๋ณธ ์ ์ด ์๋ ๊ฒ :)
์ ์ธ๋ ํด๋๋ ๋ด๊ฐ ์ธ๊ธํ ์ํฉ์ด ์๋ ๊ฒฝ์ฐ๋ฅผ ์ ์ธํ๊ณ ๋ชจ๋ ํ๋ก์ ํธ์์ ํญ์ ์ ์ธ๋ฉ๋๋ค.
์ด ์ค๋ ๋์ ๋ฒ ์ด ๋ณธ ์์ ๊ฐ ์์ต๋๊น? ์ ํฐ์ผ๋ก๋ ๋ง์๋๋ฆฌ๊ธฐ ์ด๋ ต์ต๋๋ค.
์ฃ์กํฉ๋๋ค. ๋ฐฐ์ ๋ ์ ๊ฐ ์ธ๊ธํ๋ '์์ ํ ๋ผ๋' ์ํฉ์ ์ผ๋ถ๊ฐ ์๋๋๋ค. ๊ฐ์ ธ์ค๊ธฐ๊ฐ ๋์์ ์์ธ์ด ์๋ ๊ฒ์ผ๋ก ๋ณด์ ๋๋ค(๊ทธ๋ ๋ค๋ฉด ๋ ์ดํด๊ฐ ๊ฐ๊ฒ ์ง๋ง).
์ฆ, ์ด์ ๊ฐ์ ๊ฒ์ ์ปดํ์ผํ๋ฉด ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค.
-src / src.ts <- no imports
-test / test.ts
-out
-tsconfig.json
{"rootDir": "src", "outDir": "out"}
๊ทธ๋ฌ๋ tsconfig.json
๊ฐ ๊ทธ๋ ๊ฒ ๋ณด์ธ๋ค๋ฉด typescript๊ฐ src
๋๋ ํ ๋ฆฌ์ ๋ชจ๋ ๊ฒ๊ณผ test
๋๋ ํ ๋ฆฌ์ ๋ชจ๋ ๊ฒ์ ์ปดํ์ผํ ๊ฒ์ผ๋ก ์์ํฉ๋๋ค. ๋น์ ์ ๋จ์ง ๋จ์ง์์ ๋ฌผ๊ฑด transpileํ๋ ค๋ฉด src
์ ์ถ๋ ฅ out
๋ค์ ๋๋ ํ ๋ฆฌ๋ฅผ ๋น์ ์ tsconfig.json
ํ ๊ฒ
{
"compilerOptions": {
"rootDir": "src",
"outDir": "out"
}
}
๊ทธ๋ฌ๋ฉด rootDir
์ธ๋ถ์ ์ผ๋ถ ํ์ผ์ด ์๊ธฐ ๋๋ฌธ์ TS6059 ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค. ๋ฐ๋ผ์ ๋ค์์ ์ ์ธํด์ผ ํฉ๋๋ค.
{
"compilerOptions": {
"rootDir": "src",
"outDir": "out"
},
"exclude": [
"test"
]
}
ํธ๋์คํ์ผ๋๋ฉด src
ํฌํจ๋ src.js
src
ํ์ ํด๋๊ฐ ์๋ out
ํด๋๊ฐ ์์ฑ๋ฉ๋๋ค. test
ํด๋๋ ์์ ํ ๋ฌด์๋ฉ๋๋ค. ์ด๊ฒ์ด ๋ด๊ฐ ์์ํ๋ ์ผ์
๋๋ค. ์๋์?
์ด, ์ค์ ๋ก ๋ด ์์ tsconfig
๋ ์ฒซ ๋ฒ์งธ ์์ ์์ ๋ณผ ์ ์๋ฏ์ด rootDir
๋ฐ outDir
์๋์ compilerOptions
๋ฅผ ํฌํจํด์ผ ํฉ๋๋ค. ๋ํ test
, test
๋ฐ ํด๋น ํ์ผ์ ์ ์ธํ ๋ ์ ์ธ๋ฉ๋๋ค. ์๋, ๋๋ ๋น์ ์ด TS6059 ์ค๋ฅ์ (๋๋) ๋ฒ์ธ์ด rootDir
์ธ๋ถ rootDir
์ด๋ผ๊ณ ๋งํ๊ณ ์๋ค๊ณ ์๊ฐํ์ต๋๋ค. ํ์ง๋ง ์ ๊ฐ ๋น์ ์ ์๋ชป ์ฝ์ ๊ฒ ๊ฐ์ต๋๋ค. ๊ทธ๋ผ์๋ ๋ถ๊ตฌํ๊ณ rootDir
์ธ๋ถ์ ๋๋ ํ ๋ฆฌ๋ ๊ทํ๊ฐ ์ค๋ช
ํ๋ ๊ฒ์ฒ๋ผ ๋ช
์์ ์ผ๋ก ์ ์ธ๋์ด์ผ ํ๋ค๋ ์ฌ์ค์ ๋๋์ต๋๋ค.
์๋์. (์ด์ ) ์ฐธ์กฐ ํธ๋ฆฌ๊ฐ ์ ์ธ ๋ชฉ๋ก์ ํธ๋์คํ์ผ๋ ์ ์๋ค๊ณ ๋งํ์ต๋๋ค. ์ฝ๊ฐ ๋ค๋ฆ ๋๋ค.
TS6059 ์ค๋ฅ๋ ์ฒ์์๋ ์ฝ๊ฐ ๋นํน์ค๋ฝ์ต๋๋ค. ๊ทธ๋ฌ๋ ์ ๋ TS๊ฐ ์ ๊ฐ ์ค์๋ฅผ ํ์ง ์๋๋ก ๋์์ฃผ๋ ค๋ ๊ฒ์ผ๋ก ๋ด ๋๋ค. ๋ด๊ฐ rootDir์ ์ ์ํ๋ ๋ฐ ์ด๋ ค์์ ๊ฒช์๊ณ plonk typescript๊ฐ ํด๋น rootDir ์ธ๋ถ๋ก ๋ ์๊ฐ๋ค๋ฉด TS๋ ํจ๊ณผ์ ์ผ๋ก "oi - ๋น์ ์ด ๋ด๊ฐ ์ ๊ทผํ ์ ์๋ typescript๋ฅผ ์์ฑํ์ต๋๋ค - ๋ง์ต๋๊น?"๋ผ๊ณ ๋งํ๋ ๊ฒ์ ๋๋ค.
๋๋ "์๋์, ์๋ชปํ์ต๋๋ค."๋ผ๊ณ ๋๋ตํ๊ณ ํ์ผ์ rootDir๋ก ์ฎ๊น๋๋ค.
๋๋
"๋ค ๋ง์ต๋๋ค. ์๋ ค์ฃผ์ง ์์ ์ฃ์กํฉ๋๋ค."๋ผ๊ณ ๋งํ ๋ค์ ์ ์ธ ํ์ผ ๋ชฉ๋ก์ ์ถ๊ฐํฉ๋๋ค.
์ด๊ฒ์ ๋๋ฌด ๋ณต์กํฉ๋๋ค. ๋๋ monorepo๊ฐ โโ์๊ณ paths
์ต์
์ ์ฌ์ฉํ์ฌ (๊ฐ์ monorepo์์) ๋ก์ปฌ ํจํค์ง๋ฅผ ๊ฐ์ ธ์ค๋ ๋์ ์ฌ๋ฐ๋ฅธ ๋๋ ํ ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ๋ด๋ณด๋ด๊ณ ๊ฐ ํจํค์ง๋ฅผ ์ ์ ํ๊ฒ ์ปดํ์ผํ๋ ๋ฐฉ๋ฒ์ ์ฐพ์ง ๋ชปํ๋ ๊ฒ ๊ฐ์ต๋๋ค.
์ถ๋ ฅ ๋๋ ํ ๋ฆฌ์ ๋๋ ํ ๋ฆฌ ๊ตฌ์กฐ์ ์์น ์๋ ์์ ํด๋๊ฐ ํฌํจ๋์ด ์๊ฑฐ๋ tsc๊ฐ ๋ฃจํธ ๋๋ ํ ๋ฆฌ ์ธ๋ถ์ ์๋ ํ์ผ์ ๋ํด ๋ถํํฉ๋๋ค.
์ด๋ ๊ฒ ๋ณต์กํ ์ ์๊ฒ ์ฃ ?
์ด๋ค ์กฐํฉ์ ์ฌ์ฉํ๋ tsc
๋ paths
๊ฐ ๋์ผํ monorepo์ ๋ก์ปฌ ํจํค์ง๋ฅผ ์ฐธ์กฐํ๋ monorepo๋ฅผ ์ฒ๋ฆฌํ ์ ์๋ ๊ฒ ๊ฐ์ต๋๋ค. --build
, --project
, references
, paths
, extends
, rootDir
, rootDirs
, include
, exclude
, baseUrl
, outDir
๋ค๋ฅธ ๊ฐ์ ๊ฐ์ง ๋ชจ๋ ์ข
๋ฅ์ ์กฐํฉ์์ ๊ฒฐ๊ตญ rootDir
๋ด์ ์๋ ํ์ผ์ ๋ํด ๋ถํํฉ๋๋ค outDir
๋ด๋ถ์ ์๋ชป๋ ๋๋ ํ ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ๋ด๋ณด๋์ผ๋ก์จ ์๋ง์ด ๋ฉ๋๋ค.
๋ด๊ฐ ๊ฐ์ง๊ณ ์๋ ๊ฒ์ ๋ชจ๋ ธ ๋ฆฌํฌ์งํ ๋ฆฌ๋ก ์ค๋ช ํ์ง๋ ์๊ฒ ์ง๋ง ๋์ผํ ๋ฆฌํฌ์งํ ๋ฆฌ์ 3๊ฐ์ ๋ค๋ฅธ ํ๋ก์ ํธ๊ฐ ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋ค๋ฅธ ํ๋ก์ ํธ์ ๋ฌธ์ ๋ ๊ฐ์ญ ์์ด ๊ฐ๊ฐ์ ๋ ๋ฆฝ์ ์ผ๋ก ํธ๋์คํ์ผํ ์ ์์ต๋๋ค. ๊ฐ ํ๋ก์ ํธ์๋ ๊ณ ์ ํ tsconfig๊ฐ ์์ต๋๋ค.
๊ฝค ์ค๋ ์๊ฐ ๋
ธ๋ ฅํ๊ณ ์์ ํ ํ์ lerna์ typescript ๊ฐ references
์ ํจ๊ป paths
๋ฐ ์ฌ์ฉ์ ๋ ์ด์ ์ง์ํ์ง ์์ต๋๋ค rootDir
.
rootDir์ ์ถ๋ ฅ ํด๋ ๊ตฌ์กฐ๋ฅผ ๋น๋ํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. ์ปดํ์ผ๋ฌ๊ฐ ์ถ๋ ฅ์ ์ธ ์์น๋ฅผ ์๊ธฐ ์ํด์๋ ๋ชจ๋ ํ์ผ์ด rootDir ์๋์ ์์ด์ผ ํฉ๋๋ค.
์ถ๋ ฅ์ด ํ์ํ์ง ์์ ํ์ผ์ ์ด๋ป์ต๋๊น? ๋ฃจํธ ์ธ๋ถ์ json ํ์ผ์ด ์๋ ๊ฒฝ์ฐ:
const errors = require("../../../../errors.json");
ES6 ๋ฒ์ ์ ์ปดํ์ผํ ์ ์๊ธฐ ๋๋ฌธ์:
import * as errors from "../../../../errors.json";
๊ทธ๋ฌ๋ ์ฒซ ๋ฒ์งธ ๋ฒ์ ์์๋ ์ ํ ์์ ์ฑ์ ์๊ณ ์์ต๋๋ค.
@mhegazy ์ด ๋ฌธ์ ๋ 3๋ ์ ์ ์ข ๋ฃ๋์์ต๋๋ค. ํ์ง๋ง 3๋ ์ด ์ง๋ ์ง๊ธ๋ ์ฌ์ ํ ํผ๋์ ์์ธ์ธ ๊ฒ ๊ฐ๋ค.
์ด "์๋ํ ๋๋ก ์์ ์ค" ์ํ๋ฅผ ๋ค์ ํ์ธํด ์ฃผ์๊ฒ ์ต๋๊น? ์ด ์ค๋ ๋์์ ์ปค๋ฎค๋ํฐ์ ๋ฐ์์ ๊ณ ๋ คํ ๋ ์ปค๋ฎค๋ํฐ๊ฐ ์์ํ๋ ๋๋ก ๋์ํ์ง ์๋๋ค๊ณ ๋งํ๋ ๊ฒ์ด ์์
๋๋ ๋น์ ์ด ์ด๊ฒ๋ณด๋ค ํจ์ฌ ๋ ๋์ ์ฐ์ ์์๋ฅผ ๊ฐ์ง๊ณ ์๋ค๋ ๊ฒ์ ์ดํดํ ์ ์์ง๋ง, ์ฌ๊ธฐ์ ์ ๊ณต๋ ํผ๋๋ฐฑ์ด ๊ฐ์น ์๊ฒ ์ฌ๊ฒจ์ก๋ค๋ ์ด๋ค ์งํ๋ ์์ด ์ด ๋ฌธ์ ๋ฅผ ๋ซ๋ ๊ฒ์ Typescript์ ๋ํด ์ ์งํ๊ฒ ์ข์ ์ด๋ฏธ์ง๋ฅผ ์ค์ ๋ก ์ ๋ฌํ์ง ๋ชปํฉ๋๋ค.
@ngryman ๋ค์ ๋จ๊ณ๋ ๋ฌด์์
๋๊น? rootDir
์ ์ ์ ๊ฐ ์์ต๋๋ค. ์ด๊ฒ์ ๋ด ์์ค ํ์ผ์ ๊ณตํต ๋ฃจํธ์
๋๋ค. rootDir
์ ์์ ๋ฐ๋ฅด๋ฉด ํ์ผ์ด ๊ณตํต ๋ฃจํธ์ ์์ผ๋ฉด ์ค๋ฅ์
๋๋ค. ๊ทธ ์ ์๋ ๋ฌธ์ํ๋์ด ์์ต๋๋ค. ์ฌ๋๋ค์ด rootDir
๋ํด ์์ ๋ง์ ์ ์๋ฅผ ๋ง๋ค์ด ๋๊ณ ์ดํ์ ๋๋๋ค๋ ์ฌ์ค์ ๋ํด ์๋ฌด ๋ง๋ ํ ์ ์์ต๋๋ค.
์ด๊ฒ์ ์คํ๋ฒ ์ค์ ๊ฐ์ ๋ผ๋ผ๋ฅผ ์์ฒญํ๋ค๊ณ ํด์ ์์คํ๋ ์์ ์ฐ ์ฐ์ ๊ฐ ์์ด์ง ์์์ผ ํ๋ค๊ณ ๋งํ๋ ๊ฒ๊ณผ ๊ฐ์ต๋๋ค. ์ ์์ ๋ํด ๋ ผ์ํ๊ณ ์๊ธฐ ๋๋ฌธ์ ์คํ ๋ถ๊ฐ๋ฅ
https://github.com/microsoft/TypeScript/issues/9858#issuecomment -370653478์์ ์ธ๊ธํ๋ฏ์ด ์ด ๋ฌธ์ ์ ๋ํ ํด๊ฒฐ์ฑ ์ ๋จ์ํ ๋ ๋์ ์ค๋ฅ ๋ฉ์์ง๋ผ๊ณ ์๊ฐํฉ๋๋ค. ๋ด๊ฐ ๊ทธ๊ฒ์ ๋ถ๋ช์ณค๊ณ ๊ฒฐ๊ตญ ์ด GitHub ๋ฌธ์ ๋ฅผ ๋ฐ๊ฒฌํ์ ๋, ๊ฐ์ฅ ํฐ ์ข์ ์ ๋ฌธ์ ๋ฅผ ํ์ ํ๋ ๋ฐ ์ผ๋ง๋ ๋ง์ ์๊ฐ์ ํ๋นํ๋์ง, ๊ทธ๋ฆฌ๊ณ ๋์ ๊ทธ๊ฒ์ด ์ปดํ์ผ๋ฌ ๋ฒ๊ทธ๋ผ๊ณ ์๊ฐํ๊ณ , ๊ทธ๋ฐ ๋ค์ ์ฌํ ์ฌ๋ก๋ฅผ ๋ง๋ค๊ณ , ๊ทธ๋ฐ ๋ค์ "์๋ํ ๋๋ก ์๋"์ด๋ผ๋ ์ค๋ณต ๋ฒ๊ทธ. ๋ช ํํ ์ค๋ฅ ๋ฉ์์ง๋ก ๋น ๋ฅด๊ฒ ์คํจํ๋ค๋ฉด ๊ทธ ๋ชจ๋ ๊ฒ์ ๊ตฌํ ์ ์์์ ๊ฒ์ ๋๋ค.
rootDir
์ธ๋ถ์ ์์ค ํ์ผ์ด ์์ผ๋ฉด TypeScript ํ๋ก์ ํธ๊ฐ ์๋ชป ๊ตฌ์ฑ๋์์์ ์๋ฏธํฉ๋๋ค. ์ฌ์ฉ์์๊ฒ ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๋ฐฉ๋ฒ์ ๋ํ ์ง์นจ๊ณผ ํจ๊ป ์ด๋ฅผ ๋ํ๋ด๋ ๋ช
ํํ ๋ฉ์์ง๋ฅผ ์ ๊ณตํ๋ฉด ๋ง์ ์ฌ๋๋ค์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์์ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
@RyanCavanaugh ๋น ๋ฅธ ๋ต๋ณ ๊ฐ์ฌํฉ๋๋ค.
์ด ํ์ด์ง๋ก ์ด๋ํ๋ฉด: https://www.typescriptlang.org/docs/handbook/compiler-options.html. ๋ค์ ์ ์๋ฅผ ์ฝ์์ต๋๋ค.
์ ๋ ฅ ํ์ผ์ ๋ฃจํธ ๋๋ ํ ๋ฆฌ๋ฅผ ์ง์ ํฉ๋๋ค. --outDir์ ์ฌ์ฉํ์ฌ ์ถ๋ ฅ ๋๋ ํ ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ์ ์ดํ๋ โโ๋ฐ๋ง ์ฌ์ฉํ์ญ์์ค.
๋๋ ๊ทธ๊ฒ์ด "์ถ๋ ฅ ๋๋ ํ ๋ฆฌ ๊ตฌ์กฐ ๋ฅผ ์ ์ด ํ๋ ์ ์ผํ ์ฌ์ฉ "์ด ์ค์ํฉ๋๋ค. ์ปดํ์ผ๋ฌ๊ฐ ์ค์ ๋ก ์ํ ํ๋ ์ ์ผํ ์์ ์ ์๋์ง๋ง ํด๋น ๋๋ ํฐ๋ฆฌ ์ธ๋ถ์ Typescript ํ์ผ์ด ์์ผ๋ฉด ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ค๊ณ ์ด๋ป๊ฒ ์ถ์ธกํ ์ ์์ต๋๊น?
์ด์ฉ๋ฉด ๋ด๊ฐ ๋ญ๊ฐ๋ฅผ ๋์น๊ณ ์์์ง๋ ๋ชจ๋ฅด์ง๋ง, ๊ทธ๋ ๋ค๋ฉด ๋๋ ์ ์ผํ ์ฌ๋์ด ์๋๋๋ค. ๋ฐ๋ผ์ ์ ํ์ด ์๊ณ ๋ง์ ์ฌ์ฉ์๊ฐ ์ ํ์ ์ดํดํ์ง ๋ชปํ๋ ๊ฒฝ์ฐ ์ทจํ ์ ์๋ ๋ฐฉ๋ฒ์ ๋ ๊ฐ์ง๋ฟ์ ๋๋ค. ์ฌ์ฉ์๋ฅผ ๋ฐ๋ณด๋ก ์๊ฐํ๊ฑฐ๋ ๋ช ํํ๊ฒ ์ ๋ฌํ์ง ๋ชปํ๋ ๊ฒ์ ๋๋ค. 1์ฐจ์ ์น์ฐ์น์ง ์์์ผ๋ฉด ์ข๊ฒ ์ต๋๋ค ๐
์คํ๋ฒ ์์๋ฅผ ๋ง์น๋ ค๋ฉด ์ฌ๋ฃ ๋ชฉ๋ก์ "์ต์คํ๋ ์์ ์คํ ์ฐ์ ์ ํผํฉ๋ฌผ"์ด๋ผ๊ณ ์ ์ ์ด์ ๋ผ๋ผ๊ฐ ๋ฌด์์ธ์ง ์๊ณ ์ถ์ธกํ ํ์๊ฐ ์์ต๋๋ค.
rootDir
์ธ๋ถ์ ์๋ ํ์ผ์ ์๋ฏธ๋ TS๊ฐ outDir
์ธ๋ถ์ ํ์ผ์ ์ถ๋ ฅํ๋ค๋ ๊ฒ์
๋๋ค. ์ด๋ ๋ช
๋ฐฑํ ๋์ ๋์์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
์ค๋ฅ ๋ฉ์์ง๊ฐ ๋ ๋์ ์ ์์ต๋๋ค. ์ด์ ๋ํ ์ ์์ด๋ PR์ ์ํฉ๋๋ค.
๋ฌธ์๋ ํญ์ ๋ ๋์ ์ ์์ต๋๋ค. ๋ค์ ๋งํ์ง๋ง ๋ ๋ช ํํ๊ฒ ์ ๋ฌํ๋ ๋ฐฉ๋ฒ์ ๋ํ ๊ตฌ์ฒด์ ์ธ ์์ด๋์ด๋ฅผ ์ํฉ๋๋ค.
๋ด๊ฐ ์ฌ๋๋ค์ ๋ฐ๋ณด๋ผ๊ณ ๋ถ๋ฅด๋ ๊ฒ์ ์์ํ๋ ๊ฒ์ ๋ด๊ฐ ๋ ์ด์ ์ํ๋ ๊ฒ์ด ์๋๋๋ค.
rootDir ์ธ๋ถ์ ์๋ ํ์ผ์ ์๋ฏธ๋ TS๊ฐ outDir ์ธ๋ถ์ ํ์ผ์ ์ถ๋ ฅํ๋ค๋ ๊ฒ์ด๋ฉฐ, ์ด๋ ๋ช ๋ฐฑํ ๋์ ๋์์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
์ปดํ์ผ๋ฌ๊ฐ rootDir
"chroot"ํ์ง ์๊ณ ํด๋น ๋๋ ํ ๋ฆฌ ์ธ๋ถ์ ํ์ผ์ ๊ณ ๋ คํ์ง ์๋ ์ด์ ์ ๋ํด ์ฌ์ ํ ๋ช
ํํ์ง ์์ต๋๋ค. tsc
๋ด๋ถ ๋ฐ ๊ธฐ๋ก์ ๋ํ ์ปจํ
์คํธ๊ฐ ๋ถ์กฑํ ์ฌ์ฉ์๋ก์ ์ด๊ฒ์ ํ์คํ ์์ธกํ ์ ์๋ ํ๋์
๋๋ค.
๋ด ๋จธ๋ฆฌ์์ ์ค ์์๋ ํ ๊ฐ์ง ์๋ ๋์ผํ ์ต์
์ ์ ๊ณตํ๋ Jest์
๋๋ค. https://jestjs.io/docs/en/configuration#rootdir -string. AFAIK Jest๋ rootDir
์ธ๋ถ์ ํ
์คํธ ํ์ผ์ ๊ณ ๋ คํ์ง ์์ต๋๋ค. ์๋ฅผ ๋ค์ด ์ฌ๊ธฐ์์๋ ๋์ผํ ๋์์ ์์ํฉ๋๋ค.
๋ฌธ์๋ ํญ์ ๋ ๋์ ์ ์์ต๋๋ค. ๋ค์ ๋งํ์ง๋ง ๋ ๋ช ํํ๊ฒ ์ ๋ฌํ๋ ๋ฐฉ๋ฒ์ ๋ํ ๊ตฌ์ฒด์ ์ธ ์์ด๋์ด๋ฅผ ์ํฉ๋๋ค.
์ฌ๊ธฐ์์ ๊ฐ์ ์ ๊ณ ๋ คํ๊ณ ๊ณ์๋ค๋ ๊ธฐ์ฉ๋๋ค. @MicahZoltu ์ ์ ์์ ํ์ํ๋ ๊ฒ์ด
๊ฒฐ๊ตญ rootDir
๊ฐ ์์ธก ๊ฐ๋ฅํ์ง ์๋ค๊ณ ๋ค์ ๋งํ ์ ์์ง๋ง(๋ฐ๋ผ์ ์ฌ๋๋ค์ ๋ฐ์), ๋ด๊ฐ ์ดํดํ๋ ํ ํด๋น ์ต์
์ ๋์์ ๋ณ๊ฒฝํ๋ ๊ฒ์ ๊ณ ๋ คํ ์ฌํญ์ด ์๋๋๋ค. ๊ทธ๋์ ์ ๊ฐ ์ ์ํ ์ ์๋ ์ ์ถฉ์ ์ค ํ๋๋ rootDir
์ด๋ฆ์ ๋ ์๋ฏธ ์๋ ์ด๋ฆ์ผ๋ก ๋ฐ๊พธ๋ ๊ฒ์
๋๋ค. outBaseDir
๊ฐ ํ๋ณด๊ฐ ๋ ์ ์์ต๋๋ค. ํ์ง๋ง ์๋ง ๋ ์ข์ ์ด๋ฆ์ด ์์ ๊ฒ์
๋๋ค.
๋ด๊ฐ ์ฌ๋๋ค์ ๋ฐ๋ณด๋ผ๊ณ ๋ถ๋ฅด๋ ๊ฒ์ ์์ํ๋ ๊ฒ์ ๋ด๊ฐ ๋ ์ด์ ์ํ๋ ๊ฒ์ด ์๋๋๋ค.
๋๋ ์๋ฌด ์์๋ ํ์ง ์์๊ณ ๊ทธ๋ ๊ฒ ๋ฐ์๋ค์๋ค๋ฉด ์ฃ์กํฉ๋๋ค. ์ ๋ ์์ฃผ ๊ฐ๋จํ ์ฌ์ค๋ง ๋งํ์ต๋๋ค. ์ฌ์ฉ์๊ฐ ์์ ์ด ์ดํดํ์ง ๋ชปํ๋ ๊ฒ์ ๋ํด ๋ถํํ ๋ ํจ๊ณผ์ ์ผ๋ก ์ทจํ ์ ์๋ ๋ฐฉ๋ฒ์ ๋ ๊ฐ์ง๋ฟ์ ๋๋ค. ๋๋ ๋น์ ์ด ์ฒซ ๋ฒ์งธ ๊ฒ์ ๊ธฐ๋์ง ์๊ธฐ๋ฅผ ๋ฐ๋๋๋ค. ๋น์ ์ด ์ด๋ฌํ ๊ฒฝ๋ก ์ค ํ๋์ ์์ ์ ์ฐ๊ด์ํจ๋ค๋ ์ฌ์ค์ ์์งํ ๋น์ ์๊ฒ ๋งก๊ฒจ์ ธ ์์ต๋๋ค.
ํนํ ์ด ์ค๋ ๋๊ฐ ์ฒ๋ฆฌ๋ ๋ฐฉ์์ ๋ํด ์์งํ ํผ๋๋ฐฑ์ ์ ๊ณตํ๋ ๊ฒ์ ๋ํด ์ ๊ฐ ๋งํด์ผ ํ ๊ฒ์ ๋งํ ๊ฒ ๊ฐ์ต๋๋ค. ๊ทธ๋์ ๋๋ ๋ค๋ฅธ ์ฌ๋๋ค์ด ํด๊ฒฐ์ฑ ์ ์ ์ํ ์ฌ์ง๋ฅผ ๋จ๊ฒจ๋๊ฒ ์ต๋๋ค.
@ngryman rootDir
์ ์ ์์ ์ค์ ๋ก ์ํํ๋ ์์
์ด ์ผ์นํ์ง ์๋ ๊ฒ ๊ฐ๋ค๋ ๋ฐ ๋์ํฉ๋๋ค. tsc --init
๋ฅผ ํตํด ์ ts ํ๋ก์ ํธ๋ฅผ ๋ง๋ค ๋ tsconfig.json
๋ํ rootDir
tsconfig.json
์ ์ฃผ์์ /* Specify the root directory of input files. Use to control the output directory structure with --outDir. */
์ธ์ฉํ ๊ฒ๊ณผ ์ ์ฌํฉ๋๋ค. _input_ ํ์ผ์ ๋๋ ํ ๋ฆฌ๋ฅผ ์ ๊ณตํ๋ฉด ์
๋ ฅ์ ์ ์์ ๋ฐ๋ผ ์ปดํ์ผ์ ๊ณ ๋ คํ๋ ์ ์ผํ ๋๋ ํ ๋ฆฌ๊ฐ ํด๋น ๋๋ ํ ๋ฆฌ์ ์์ ๊ฒ์ผ๋ก ์์ํฉ๋๋ค.
@RyanCavanaugh 4๋
์ typescript๊ฐ ์๋ฐ์คํฌ๋ฆฝํธ๋ก ์ปดํ์ผ๋๋ ๋ฐ๋ง ์ฌ์ฉ๋์์ ๋ ์ด์ ๊ฐ์ ์ค๋ฅ๋ฅผ ๋ณด๊ณ ํ๋ ๊ฒ์ด ํฉ๋ฆฌ์ ์ด์์ ts-node
์ ๊ฐ์ typescript ์คํ์ ์ธ๊ธฐ๋ก ์ธํด tsc๊ฐ ์ฝ๊ฐ ์งํฌํ๋ ๊ฒ ๊ฐ์ต๋๋ค.
๊ทธ๋ฆฌ๊ณ rootDir
์ธ๋ถ์ typescript ํ์ผ์ด ์๋ชป๋ ํ๋ก์ ํธ ๊ตฌ์ฑ์ ์์ํ๋ค๋ ์๊ฐ์ ๋จ์ํ ์๋ชป๋ ๊ฒ์
๋๋ค. ํ์
์คํฌ๋ฆฝํธ๋ก ์์ฑ๋ ๋จ์ ํ
์คํธ๋ฅผ ์๋ฐ์คํฌ๋ฆฝํธ๋ก ์ปดํ์ผํ ํ์๊ฐ ์์ต๋๋ค. ts-node
๋ ๋ ๋น ๋ฅด๊ณ ํ
์คํธ๋ฅผ ์์ฑํ ๋ ํ์ดํ์คํฌ๋ฆฝํธ์ ๋ชจ๋ ์ด์ ์ ๋๋ฆด ์ ์์ต๋๋ค.
@CodySchrank์ ๋์ํฉ๋๋ค. rootDir ๋ด๋ถ์ ์ผ๋ถ ์์ค ํ์ผ์ด ์ธ๋ถ ํ์ผ์ ์ฐธ์กฐ/๊ฐ์ ธ์ฌ ๋ TS ์ค๋ฅ๊ฐ ๋ฐ์ํด๋ ๊ด์ฐฎ์ต๋๋ค.
๊ทธ๋ฌ๋ TypeScript ์์ฒด๊ฐ rootDir ์ธ๋ถ์ ๊ด๋ จ ์๋ ํ์ผ์ ์ดํด๋ณด๊ณ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ ๋์ ์ด๋ฌํ ํ์ผ์ jest ๋๋ ๊ธฐํ ๋๊ตฌ์ ๊ฐ์ ๋ค๋ฅธ ๋๊ตฌ์ ๋ํ ๊ตฌ์ฑ ํ์ผ์ผ ๋ฟ์ด๋ผ๋ ๊ฒ์ ์ดํดํ ์ ์์ต๋๋ค. ๋ด ๋ง์, ์์ ์ด ๋ฌด์์ ๋๊น? ์ด๊ฒ๋ค์ ๋ด ์์ฉ ํ๋ก๊ทธ๋จ์ ์ผ๋ถ๋ ์๋๋ฉฐ ์ด๋์์ ์ง์ ์ฐธ์กฐ/๊ฐ์ ธ์ค๊ธฐ๋ ๋์ง ์์ต๋๋ค. ๋ง์์ฌ, ์ฒ์์ ๊ฒฐ๊ณผ ๋น๋์ ๋ฒ๋ค๋ก ํฌํจ๋๊ธฐ๋ฅผ ์ํ๋ ์ด์ ๋ ๋ฌด์์ ๋๊น?
์ด ์ค๋ฅ๋ฅผ ๊ฒฝ๊ณ ๋ก ๋ฐ๊พธ๋ฉด ์ด๋ค ์๋ฏธ๊ฐ ์๋์ง ๊ถ๊ธํฉ๋๋ค. ์ฝ๋๋ฅผ ๊ฐ๋ตํ๊ฒ ํ์ด๋ณธ ๊ฒฐ๊ณผ ํ์คํ ๊ฐ๋ฅํ ๊ฒ์ฒ๋ผ ๋ณด์ด์ง๋ง tsc ๋น๋ ํ๋ก์ธ์ค์ ๋ํ ์ ๋ฌธ๊ฐ๋ ์๋๋๋ค. ์ ์ฌ์ ์ธ ๋ฌธ์ ์ ๋ํ ์๋ฆผ์ ์ ์งํ๋ฉด์ ์ํ ๊ฒฝ์ฐ ์ด๋ฅผ ์ฐํํ๋๋ก ํ๋ ๊ฒ ์ฌ์ด์ ํ๋ณตํ ๋งค๊ฐ์ฒด์ฒ๋ผ ๋ณด์ ๋๋ค.
src
/test
/out
์ค์ ์ ํ๋ก์ ํธ ์ฐธ์กฐ์์ ํด๊ฒฐํ ์ฃผ์ ์๋๋ฆฌ์ค์์ต๋๋ค.
์ด๋ฅผ ์ํด์๋ ๊ฐ ๋ฃจํธ ํด๋(https://www.typescriptlang.org/docs/handbook/project-references.html)์ ๋ํด ์ต์ํ ๋ณ๋์ ํ๋ก์ ํธ ๊ตฌ์ฑ์ด ํ์ํฉ๋๋ค. ์ง์นจ์ ์ฝ๊ณ ๋์ ํจํด์ ๊ตฌํํ๋ ๋ฐฉ๋ฒ์ ์ ๋๋ก ์ดํดํ์ง ๋ชปํ ์ฑ ์๋ฆฌ๋ฅผ ๋ ๋ฌ๊ณ , ์ ๊ฐ ์์ฒญํ ๊ฒ์ด ํ๋ฆฌ์ฑ์์ ๋ ์ฐฉ์๊ธฐ๋ฅผ ๊ฑด๋ค์ฃผ๋ ๊ฒ ๊ฐ์ ๋๋์ด ๋ค์์ต๋๋ค.
๋ฌผ๋ก ๋ด ์์ค ํด๋ ๋ด์์ ๋ถ์ ๋ชจ๋์ ๋ณ๋์ ํ์ ํ๋ก์ ํธ๋ก ์ ์งํ๋ ๊ฒ์ด ๋ ํจ์จ์ ์ด์ง๋ง ์ฌ๊ธฐ์๋ lodash๋ฅผ ์ปดํ์ผํ์ง ์์ต๋๋ค. ๋ด๊ฐ ์ํ๋ ๊ฒ์ ์ ์ ๋ถ์์ ์ํ ๊ณตํต ํ๋ก์ ํธ ํด๋ ์๋์ ํ ์คํธ ๋ฐ ๋ฒค์น๋งํฌ ํ์ผ๊ณผ ๊ฐ์ ๋ง์ ํ์ผ์ ํฌํจํ๊ณ ์ปดํ์ผํ ๋ ์ธ๋ถ ์ธ๊ณ์์ ์ฌ์ฉํ ๋จ์ผ ๋๋ ํ ๋ฆฌ๋ง ๋ด๋ณด๋ด๋ ๊ฒ์ ๋๋ค. ์ด๊ฒ์ ์ง์ ํ๊ธฐ์ ์ถฉ๋ถํ ์ฌ์ ๋ณด์ด๋ฉฐ ์ฌ์ฉ์๊ฐ ์ํํ๊ธฐ ์ด๋ ค์ธ ๋ฟ๋ง ์๋๋ผ TS ์ฌ์์ ๊ด์ ์์ ๋ถ๋ช ํ _verboten_์ธ ์ด์ ๋ฅผ ์๊ธฐ ์ํด ๊ณ ๊ตฐ๋ถํฌํ๊ณ ์์ต๋๋ค.
๋ด๊ฐ ๊ฐ์กฐํ๊ณ ์ถ์ ๊ฒ์ ์ด ๊ธฐ๋ฅ์ด ํ์ฉ๋์ง ์๋ ์ ์ผํ ์ด์ ๋ ์ปดํ์ผ๋ฌ๊ฐ ๊ฐ๋ฐ์์ ์๋๊ฐ ์์๋์๋ค๋ ๊ฐ์ ๋๋ฌธ์ด๋ผ๋ ๊ฒ์
๋๋ค. ๊ฐ๋ฐ์๊ฐ "outDir"
๋ฅผ ./src
๋ก ์ค์ ํ๊ณ ์ปดํ์ผ๋ฌ๊ฐ ./test
์์ TS ํ์ผ์ ์ฐพ์ผ๋ฉด ์ด ํ์ผ์ ๋ด๋ณด๋ผ ํ์๊ฐ ์๋ค๊ณ ๊ฐ์ _ํ ์ ์์ต๋๋ค(๋ฌผ๋ก "outDir"์ ์ด๋ค ํ์ผ์์๋ ์ฐธ์กฐ๋์ง ์์).
ํ์ง๋ง ๊ทธ๋ ์ง ์์ต๋๋ค. ๊ฐ๋ฐ์๊ฐ ์ด ํ์ผ์ ๋ด๋ณด๋ด๊ธธ ์ํ์ผ๋ฉฐ ๋ฌด๋ฅ์ด๋ ์ ์๋ก ์ธํด ์ด ํ์ผ์ด ํฌํจ๋์ง ์์ ํ์ ๋๋ ํ ๋ฆฌ๋ฅผ ์ง์ ํ๋ค๊ณ ๊ฐ์ ํฉ๋๋ค. ๋ค์ ๋งํด, ์ปดํ์ผ๋ฌ๋ ๊ฐ๋ฐ์์ ์ง์นจ์ ์ผ๋ฐ์ ์ด๊ณ ํฉ๋ฆฌ์ ์ธ ์ฌ์ฉ ์ฌ๋ก์ ์ผ์น์ํฌ ์ ์๋ ๊ธฐํ๊ฐ ์์ผ๋ฉฐ, ๊ทธ ๋์ ์ ํฐ๋ฌด๋์๋ ๊ฒ๊ณผ ์ผ์น์ํค๊ณ ์งํ์ ๊ฑฐ๋ถํฉ๋๋ค.
ํ์ฌ๋ก์๋ "outDir"
์ ํฉ๋ฒ์ ์ธ ์ฌ์ฉ ์ฌ๋ก๊ฐ ๋ฌด์์ธ์ง์กฐ์ฐจ ์ ์ ์์ต๋๋ค. tsconfig.json
๊ฐ ๋ค๋ฅธ ๊ตฌ์ฑ ๋ฐ ๋ฉํ๋ฐ์ดํฐ ํ์ผ๊ณผ ํจ๊ป ์ต์์ ์์ค์ ์๋ ํ๋ก์ ํธ ๊ตฌ์กฐ๋ฅผ ์ง์ํ๊ธฐ ์ํ ๊ฒ์ผ๋ก ๊ฐ์ ํ๊ณ ์์ ์๋ ์ปดํ์ผ๋ ํด๋๊ฐ ๊ทธ ์์ ์ค์ฒฉ๋ ์์ค ํด๋๋ง ๋ํ๋ด๊ธฐ๋ฅผ ์ํฉ๋๋ค. (๊ทธ ๋ฉํ ํ์ผ ์ค ์ด๋ค ๊ฒ๋ .ts
๋๋์ง ์๋์ง ํ์ธํ์ญ์์ค. ์ด๋ ํฐ๋ฌด๋์์ ๊ฒ์
๋๋ค.)
์ฌ์์ ๋์์ธ์ด ์ฌ์ฉ์ ์ ๋์ ์ธ ๊ฒ ๊ฐ์ต๋๋ค. ์คํ๋ฒ ์ค์์ ์๋ฃ๋ฅผ ์ฃผ๋ฌธํ๊ณ ๋ฉ๋ด์ ์ฌ๋ฃ๊ฐ ๋์ ์๋๋ฐ๋ ๊ธฐ๋ํ ๊ฒ๊ณผ๋ ๋ค๋ฅด๊ฒ ์์ํดํ๋ค๋ ์ธ๊ธ์ด ์์๋ค. ์ฌ๊ธฐ๊น์ง๋ ๋ง๋๋ฐ ์ด ๊ธฐ๋ฅ์ ํซ๋๊ทธ๋ฅผ ํ์ง ์๋ ํซ๋๊ทธ ๊ฐํ๋์ ๋ ๋น์ ํ๊ณ ์ถ์ต๋๋ค.
๋ฌผ๋ก ์ง์ฆ๋ ์๋๋ค์ ๋์์์ ํซ๋๊ทธ ํ๋งค๋์์๋ ํซ๋๊ทธ๋ฅผ ํ์ง ์๋๋ค๊ณ ๊ณผ๊ฐํ๊ฒ ์๋ฆฌ๋ ํฐ ๊ฐํ์ ๋ดค์ด์ผ ํ๋ค. ๊ทธ๋ฌ๋ ํผ๋์ด ๋์ ๋จ์ ๋ฐ๋ผ ํซ๋๊ทธ ๊ฐํ๋์ ์์ ์๋ ์ ํ์ ๊ธฐ๋ฅ์ ๊ณ ๊ฐ์๊ฒ ์ ๋ฌํ๋ ๋ฐฉ๋ฒ์ ๋ํด ์๊ฐํ ๊ธฐํ๊ฐ ์์ ์ ์์ต๋๋ค.
ํ , ์ด๊ฒ์ ๋ ๊ณ ๋ คํ๋ฉด ์ด ๋ฌธ์ ์ ๊ธฐ์ ์ ์๋ ํต์ฌ ํ์ ์ผ๋ถ์ ์ผ์ข ์ ๋ถ๋ณ์ฑ์ด ์๋์ง ๊ถ๊ธํฉ๋๋ค.
๋ชจ๋ ์์ค ์ฝ๋๋ฅผ ์ปดํ์ผํด์ผ ํฉ๋๋ค. ์ปดํ์ผ๋์ง ์์ผ๋ฉด ์์ค ์ฝ๋๊ฐ ์๋๋๋ค.
์ฌ์ฉ์ ์์ญ์์๋ ์ด๋ป๊ฒ๋ ์ด๋ฅผ ๊ทน๋ณตํ ํ์๊ฐ ์์ต๋๋ค. ์์ค ์ฝ๋ ์ฆ, ์ ์๋ฅผ ํ์ฅํ์ฌ ์ด๋ฅผ ์ํํ๋์ง ๋ชจ๋ฅด๊ฒ ์ต๋๋ค. TypeScript, ๋๋ ๋ ๋ฒ์งธ ์นดํ ๊ณ ๋ฆฌ ์์ฑ("์ง์ ์ฝ๋", "๊ฒ์ฆ ์ฝ๋", "์ฃผ๋ณ ์ฝ๋"...). ์ด๊ฒ์ ์์ค์ ๋์ผํ ์ ํ ์ ์์์ ์๋ํ ๊ฒ์ผ๋ก ์์๋๋ ์ฝ๋์ด๋ฉฐ ์์ค๊ฐ ์ฌ๋ฐ๋ฅธ ๊ฒ์ผ๋ก ๊ฐ์ฃผ๋๋๋ก ์ฑ๊ณต์ ์ผ๋ก ๊ฒ์ฆํด์ผ ํ์ง๋ง ์ธํฐํ์ด์ค์ ๊ด๋ จํ์ฌ ํ๋ก๊ทธ๋จ์ ์ค์ ๊ธฐ๋ฅ์ ์ผ๋ถ๊ฐ ์๋๋๋ค.
TypeScript์ ์๋น์๋ก์ ๋๋ ๊ทธ๋ฌํ ๋ฒ์ฃผ๋ฅผ ๊ตฌํํ๋ ๋ฐ ๋ฐ๋ฅธ ํน์ ํ ์ด๋ ค์์ ๋ํด ์ ์์ง ๋ชปํฉ๋๋ค. ๊ทธ๋ฌ๋ "outDir"
๋ฑ ๋ง๋ ๊ฒ ๊ฐ์ต๋๋ค. "outDir"
๋ด๋ถ์ ๋ชจ๋ ๊ฒ์ ์์ค์ ์ผ๋ถ์ด๊ณ ์ธ๋ถ์ ํ๋ก์ ํธ ํด๋ ๋ด๋ถ๋ ์ง์ ์ฝ๋์ ์ผ๋ถ์
๋๋ค. ์ด๊ฒ์ ์ ์ฉ/ํ์์ ์ผ๋ก ๋ง๋๋ ์ฃผ๋ ๊ฒ์ ts-node์ ์ถํ์
๋๋ค. ์ฆ, ์ด ์ง์ ์ฝ๋๋ฅผ ์ปดํ์ผ๊ณผ ์์ ํ ๋
๋ฆฝ์ ์ธ ๋ณ๋์ ๋จ๊ณ๋ก ์คํํ ์ ์์ต๋๋ค. ๋ฌผ๋ก ๋๋ ๊ทธ๊ฒ์ ํ์ฉํ ์ ์๊ธฐ๋ฅผ ์ํฉ๋๋ค.
๋๊ตฌ์ ์ ๊ณต๋ ์ ๋ ฅ ํ์ผ์ ์์์ ์ผ๋ก ํฌํจํ์ง ์์
์ด ๋ฌธ์ ๋ ์ ํํ _์๋ํ๋ฉด_ ์ฌ์ฉ์๊ฐ rootDir
์ธ๋ถ์ ํ์ผ์ ์์์ ์ผ๋ก ์ปดํ์ผํ๋ ค๊ณ ํ๊ธฐ ๋๋ฌธ์ ๋ฐ์ํฉ๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก ์ปดํ์ผ๋ฌ์๊ฒ "์ด ๋๋ ํ ๋ฆฌ์ ํ์ผ๋ง ์ปดํ์ผ"์ด๋ผ๊ณ ๋งํ ๋ค์ ํด๋น ๋๋ ํ ๋ฆฌ ์ธ๋ถ์ ํ์ผ์ ์ฐธ์กฐํ๋๋ก ์งํํ์ต๋๋ค. ์ปดํ์ผ๋ฌ๊ฐ ํผ๋์ค๋ฌ์ ์ด๋ป๊ฒ ์งํํด์ผ ํ ์ง ๋ชจ๋ฆ
๋๋ค.
/project/source/index.ts
import '../external.ts'
/project/tsconfig.json
{
"compilerOptions": {
"rootDir": "./source"
}
}
์ด ์์์ ์ปดํ์ผ๋ฌ์๊ฒ "์์ค ํ์ผ์ '์์ค' ๋๋ ํ ๋ฆฌ์๋ง ์์ต๋๋ค"๋ผ๊ณ ๋งํฉ๋๋ค. ๊ทธ๋ฐ ๋ค์ ํด๋น ํ์ผ ์ค ํ๋๊ฐ ์์ค ๋๋ ํ ๋ฆฌ์ _not_ ์๋ ํ์ผ์ ์ฐธ์กฐํฉ๋๋ค. TypeScript์๋ ์ด์ ๋ ๊ฐ์ ์ถฉ๋ํ๋ ๋ช ๋ น์ด ์์ต๋๋ค. ํ๋๋ ์์ค ๋๋ ํ ๋ฆฌ์ ํ์ผ๋ง ์ปดํ์ผํ๋ผ๋ ๊ฒ์ด๊ณ ๋ค๋ฅธ ํ๋๋ ์์ค ๋๋ ํ ๋ฆฌ ์ธ๋ถ์ ํ์ผ์ ์ปดํ์ผํ๋ผ๋ ๊ฒ์ ๋๋ค.
@MattiasMartens ๋น์ ์ ์์ ์ ์ผ๋ก include
๋ฐ rootDir
๋ณํฉํ๊ณ ์์ต๋๋ค. /src
๋ฐ /test
๊ฐ ์๋ ๊ฒฝ์ฐ include
๊ฐ src/*
์ด๋ฉด /test
ํญ๋ชฉ์ ๋ํ ์ค๋ฅ๊ฐ ๋ฐ์ํ์ง ์์ต๋๋ค. src
์์ test
์์ ํญ๋ชฉ์ ์๋ชป ๊ฐ์ ธ์์ต๋๋ค.
ํ๋ก๊ทธ๋จ์์ ์๋ชป๋ ๊ฐ์ ธ์ค๊ธฐ๊ฐ ์ด๋ป๊ฒ ์๊ฒผ๋์ง ๊ธฐ๋กํ๋ ๋ฉ์ปค๋์ฆ์ ์ ๊ณตํ๊ณ ์ด๋ฌํ ์๋ชป๋ ๊ฐ์ ธ์ค๊ธฐ๊ฐ ๋ฐ์ํ ๋ ์ค๋ฅ๋ฅผ ๋ฐ์์ํค๋ ๊ฒ์ ์ฌ์ฉ์์๊ฒ ์ ๋์ ์ด๊ฑฐ๋ ์ ๋์ ์ด์ง ์์ต๋๋ค. ๋ค์ ๋งํ์ง๋ง ์ด๊ฒ์ ํ๋๊ทธ๊ฐ ๋ฌด์์ ์๋ฏธ ํ๋์ง ์คํดํ๊ธฐ ๋๋ฌธ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. ํ๋๊ทธ๋ ์ฃผ๋ก ํ๋ก๊ทธ๋จ์ด ์ฌ๋ฐ๋ฅด๊ฒ ๊ตฌ์ฑ๋์๋์ง ํ์ธ ํ๋ ๋ฐ ๋์์ด ๋๋
์ด์จ๋ !
rootDir
์ ์ ์๊ฐ ์ฃผ์ด์ง๋ฉด TypeScript๊ฐ ์ ๊ณต๋ rootDir
์ธ๋ถ์ ํ์ผ์ ๋ณผ ๋ ๋ช ๊ฐ์ง ์ต์
์ด ์์ต๋๋ค.
outDir
์์ ํ์ผ์ ๋ด๋ณด๋ด์ญ์์ค(์ด๊ฒ์ด ๊ฐ๋ฅํ๋ค๊ณ ๊ฐ์ ํฉ๋๋ค!). ์ด๋ ์ถ๋ ฅ ์์น์ ๋ํ ์ฌ์ฉ์์ ์ง์์ ๋ชจ์๋ฉ๋๋ค.๋๋ ์๋ํ์ง ์๋ ํ๋ก๊ทธ๋จ ์ด ๊ธฐ๋ณธ๊ฐ์ด์ด์ผ ํ๋ค๋ ๊ฐ๋
์ ๊ฐ๋ ฅํ ๋ฐ๋ํฉ๋๋ค. ์ฌ๊ธฐ์ ๊ธฐ๋ฅ ์์ฒญ์ด ๋จ์ํ rootDir
์ธ๋ถ์์ ๋ฐ๊ฒฌ๋ .ts
ํ์ผ์ .d.ts
๋ก ์ฒ๋ฆฌํ๋ ๊ฒ์ด๋ผ๋ฉด ์ด๋ ํฉ๋ฆฌ์ ์ด๋ฉฐ rootDir
์๋ฏธ์๋ ๋ณ๊ฐ์ ๊ฒ์
๋๋ค. rootDir
์ด์ธ์ ๊ฒ. ๊ทธ๋ฐ ๊น๋ฐ์ ๋ญ๋ผ๊ณ ๋ถ๋ฅด๊ฒ ์ต๋๊น?
@MattiasMartens ๋น์ ์ ์์ ์ ์ผ๋ก
include
๋ฐrootDir
๋ณํฉํ๊ณ ์์ต๋๋ค./src
๋ฐ/test
๊ฐ ์๋ ๊ฒฝ์ฐinclude
๊ฐsrc/*
์ด๋ฉด/test
ํญ๋ชฉ์ ๋ํ ์ค๋ฅ๊ฐ ๋ฐ์ํ์ง ์์ต๋๋ค.src
์์test
์์ ํญ๋ชฉ์ ์๋ชป ๊ฐ์ ธ์์ต๋๋ค.
๊ทธ๊ฑด ์ฌ์ค์ด์ผ. ๋๋ include
๋ํด ์์ํดํ๊ณ VSCode์ ๋๊ตฌ๋ฅผ ํฌํจํ์ฌ ์ด ๊ฒฝ์ฐ์ ๋ํด ์๊ฐํ๋ ๊ฒ๋ณด๋ค ๋ ์ ์๋ํ๋ค๋ ๊ฒ์ ๋ฐ๊ฒฌํ์ต๋๋ค.
๋๋ ์ฌ์ ํ ์ปดํ์ผ ์ ์ ํจ์ฑ ์ด ๋ด๋ณด๋ด ์ง์ง ์๋ ์ฝ๋๋ฅผ ๊ฐ๊ณ ์ถ์ต๋๋ค. ์ด๋ include
๋ค๋ฃจ์ง ์๋ ๊ฒ์
๋๋ค. ๊ทธ๋ฌ๋ ๊ทธ๊ฒ์ ์ฌ๊ธฐ์์ ๋
ผ์ํ ํ์๊ฐ ์๋ ๋ณ๋์ ์์ฒญ์
๋๋ค.
๋๋ ์ด๊ฒ์ด ํ๋๊ทธ๊ฐ ๋ฌด์์ ์๋ฏธํ๋์ง ์คํดํ๋ ๋ฐ์ ๋น๋กฏ๋ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. ํ๋๊ทธ๋ ์ฃผ๋ก ํ๋ก๊ทธ๋จ์ด ์ฌ๋ฐ๋ฅด๊ฒ ๊ตฌ์ฑ๋์๋์ง ํ์ธํ๋ ๋ฐ ๋์์ด ๋๋ _์ตํธ์ธ ์ํ ํ์ธ์ ๋๋ค.
๋๋ ์ด๊ฒ์ ์ํด ํผ๋์ค๋ฌ์ํ๋ค. rootDir
์ตํธ์ธ ์ํ ํ์ธ์ ๊ณ ๋ คํ์ญ๋๊น? ๊ทธ๊ฒ์ ๊ฒฐ๊ตญ ๋ฐฉ์ถ๋๋ ๊ฒ์ ์ํฅ์ ๋ฏธ์น๋ฏ๋ก ๋ถ๋ช
ํ ์ํ ํ์ธ์ด _์ ์ผํ_ ์๋๋๋ค.
target
์ ๊ฐ์ ์ผ๋ถ ํ๋๊ทธ๋ ๋ฐฉ์ถ๋๋ ๋ด์ฉ์ ํฌ๊ฒ ๋ณ๊ฒฝํฉ๋๋ค. ์ด๋ ์ํ ๊ฒ์ฌ๊ฐ ์๋๋ผ ์ปดํ์ผ๋ฌ ๋ช
๋ น์
๋๋ค. rootDir
๋ ์ปดํ์ผ๋ฌ ๋ช
๋ น์ฒ๋ผ ์ฝ๊ณ ๋ฌธ์ํ๋ฉ๋๋ค.
๋๋ _์๋ํ์ง ์๋ ํ๋ก๊ทธ๋จ์ ๋ด๋ณด๋_์ด ๊ธฐ๋ณธ๊ฐ์ด์ด์ผ ํ๋ค๋ ๊ฐ๋ ์ ๊ฐ๋ ฅํ ๋ฐ๋ํฉ๋๋ค.
์ง๊ธ๊น์ง ์ด ์ค๋ ๋์ ๋ํด ์ฝ์ ๋ด์ฉ์์ rootDir
๋ด๋ถ์ ํ์ผ ์์ rootDir
์ธ๋ถ์ ํ์ผ๋ก์ ์ฐธ์กฐ๋ _์ค๋ฅ์ฌ์ผ ํ๋ค๋ ๊ด๋ฒ์ํ ํฉ์๊ฐ ์๋ ๊ฒ ๊ฐ์ต๋๋ค. ๋์ ๋ค๋ฅธ ์ฌ๋๋ค์ด ์ค๋ง ์ค๋ฌ์ ๋ ๊ธฐ๋ฅ์ ์ธก๋ฉด์ ๊ฑฐ๊ธฐ์์ ๊ทธ์น์ง ์์ง๋ง ์ค์ ๋ก rootDir
์ธ๋ถ์ ํ๋ก์ ํธ ํด๋์์ TS ํ์ผ ์ ์ฐพ์ผ๋ฉด ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค rootDir
์์
์ฌ๋ถ.
๋ฐ๋ณตํด์ผ ํฉ๋๋ค. rootDir
๋ฅผ ๋ด ์์ค ์ฝ๋๊ฐ ์๋ ํด๋๋ก ์ค์ ํ๊ณ ์ปดํ์ผ๋ฌ๋ rootDir
์ ์๋ ๊ฒ๊ณผ ์๋ฌด ๊ด๋ จ ์ด ์ด ํน์ ๋์ ์ ๋ด ์ฝ๋๋ฅผ ์ดํดํ๋ ๋ฐ ๋์์ด ๋์ง ์์ต๋๋ค. ๊ทธ๋ฅ ์ง์ฆ๋ฉ๋๋ค.
rootDir
์ ๋ํ TypeScript ์ ์์ ๊ด์ ์์ ๋ณผ ๋ ์ด ์ค๋ ๋์์ ์์ธํ ์ค๋ช
ํ๋ ๊ฒ์ฒ๋ผ ๋์์ ์๋ฒฝํ๊ฒ ํฉ๋ฆฌ์ ์ด๋ฉฐ ์ด์ ๋ํด ๋ถ๋ง์ ํ๋ช
ํ๊ธฐ ์ํด ์ฌ๊ธฐ์ ์จ ๋ชจ๋ ์ฌ๋์ด ์ค๋ฅ๊ฐ ์๋ ๊ฒ์ด ์ฌ์ค์
๋๋ค. ๊ทธ๋ฌ๋ ๋ฃจํธ ๋๋ ํ ๋ฆฌ์ ๋ํ ๊ธฐ์กด์ ์์๋ ์ ์์์๋ ํฉ๋ฆฌ์ ์ด์ง ์์ต๋๋ค. ๋ฃจํธ ๋๋ ํ ๋ฆฌ๋ฅผ ์ ๊ณตํ๋ ๊ฑฐ์ ๋ชจ๋ ์ปจํ
์คํธ์์ ํ์ผ ๊ตฌ์กฐ๋ฅผ ํ์ํ๊ธฐ ์์ํ ์์น๋ฅผ ํ๋ก๊ทธ๋จ์ ์๋ ค์ฃผ๊ณ ํ์ผ ์์คํ
์ ๋ค๋ฅธ ๊ฒ์ด ์๋์ง ์ ๋์ ์ผ๋ก ๋ฌป์ง ์์ต๋๋ค. ๊ด์ฌ.
์ ์๊ฐ ํ๋ฆด ์ ์์ต๋๋ค. ๊ทธ๋ค์ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค. ์ด์ ๋ฒ์ ๊ณผ์ ํธํ์ฑ์ ์ํด ์ ์๋ ์ ์งํ ํ์๊ฐ ์๊ณ ๊ธฐ๋ฅ๋ง ์ ์งํ๋ฉด ๋ฉ๋๋ค.
์ฌ๊ธฐ์ ๊ธฐ๋ฅ ์์ฒญ์ด
rootDir
์ธ๋ถ์์ ๋ฐ๊ฒฌ๋.ts
ํ์ผ์.d.ts
๋ก ์ฒ๋ฆฌํ๋ ๊ฒ์ด๋ผ๋ฉด
๋๋... rootDir
๋ฌด์ธ๊ฐ๊ฐ ์ธ๋ถ์์ ์ฝ๋๋ฅผ ๊ฐ์ ธ์ฌ ๋ ์ปดํ์ผ๋ฌ๊ฐ ์ค๋ฅ๋ฅผ ๋์ง๊ธฐ๋ฅผ ์ํ๋ ๊ฒ๊ณผ ๊ฑฐ์ ๊ฐ์ ์ด์ ๋ก ๊ทธ๊ฒ์ ์ํ์ง ์๋๋ค๊ณ ์๊ฐํฉ๋๋ค. rootDir
์ ๋ด์ฉ์ ์ ๊ณตํ๋ ๊ฒฝ์ฐ ์ฃผ๋ณ ์ฝ๋์์ ์บก์ํํด์ผ ํ๋ค๊ณ ์๊ฐํฉ๋๋ค.
๋๋ ๋ค๋ฅธ ์ฌ๋๋ค์ด ์ํ์ง ์๋ ๋์์ ๋ฐฉ์งํ๋ ๊ฐ์ฅ ๊ฐ๋จํ ๋ฐฉ๋ฒ์ ์์ ์ ์ผ๋ก ์ธ๋ถ์ ํ์ผ์ ์ ์ธ ํ ์๊ฐ rootDir
์์๋ ํ์ผ ๊ฒฝ์ฐ rootDir
๊ทธ๋ค์๊ฒ ์ฐธ์กฐํ์ง ์์ต๋๋ค. ์์๋ ํ์ผ ๊ฒฝ์ฐ rootDir
๊ทธ๋ค์๊ฒ ์ฐธ์กฐ ํ ์ด ํ์ฌ์ ๊ฐ์ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ค.
๊ฑฐ๊ธฐ์ ์๋ ๋ชจ๋ ๋จ๋ฝ์ " rootDir
๋ include
์ ๊ธฐ๋ณธ๊ฐ์ ๋ณ๊ฒฝํด์ผ ํฉ๋๋ค"๋ก ์์ฝ๋๋ ๊ฒ ๊ฐ์ต๋๋ค. ์ด๋ ์ค๋ ๋์์ ํด๋น ํ๋๊ทธ๋ฅผ ์ถ๊ฐํ๋ ๊ฒฝ์ฐ ์ ์ํ๋ ํฉ๋ฆฌ์ ์ธ ๋ฐฉ๋ฒ์ด์ง๋ง ํ์ฌ๋ก์๋ ๋ง๋ค ์ ์๋ ํ๊ธฐ์ ์ธ ๋ณ๊ฒฝ ์ฌํญ์ด ์๋๋๋ค. ํ๋ฆผ์์ด ์๋ก ๋ ์ฆ๊ฐ์ธ์ง ๋ถํ์ ์ํธ ์์ฉํ๋ ๋ชจ๋ ๊ตฌ์ฑ ํ๋๊ทธ๋ฅผ ๋ง๋ค๊ธฐ๋ณด๋ค๋ ๊ฐ์ ๋น๋ก.
include
๊ฐ ๋ช
์์ ์ผ๋ก ์ค์ ๋์ง ์๊ณ ํฌํจ๋ ํ์ผ์ด rootDir
์ธ๋ถ์ ์๋ ๊ฒฝ์ฐ ์ฌ์ฉ์ ์ง์ ์ค๋ฅ๋ฅผ ๋ฐํํด์ผ ํ ์๋ ์์ต๋๋ค.
"tests/foo.ts" ํ์ผ์ด rootDir 'rc' ์ธ๋ถ์ ์์ต๋๋ค. "ํฌํจ" ํจํด์ ์ค์ ํ๋ ๊ฒ์ ์์ผ์ จ์ต๋๊น?
๊ธฐ๋ก #33515
https://github.com/microsoft/TypeScript/issues/31757#event -2480427393์์๋ ๋ฌธ์ ๊ฐ ์์์ต๋๋ค.
rootDir, ํฌํจ ๋ฐ ์ ์ธ ๊ฐ์ ์ํธ ์์ฉ์ ๋๋ฌด ์ด์ํ๊ฒ ์ค๊ณ๋์์ต๋๋ค.
๋๋ ํญ์ rootDir์ด ์ปดํ์ผ๋ฌ๊ฐ ํ์์ ์์ํ๊ณ rootDir์์ ์ฐธ์กฐํ ์ ์๋ ์ถ๊ฐ ํด๋(์: ๊ณต๊ธ์ ์ฒด ํด๋)๋ฅผ ํฌํจํ๋ ํด๋๋ผ๊ณ ์๊ฐํ์ต๋๋ค.
ํ์ฌ ์ ์๋ ์ง์ฅ์ฒ๋ผ ์ด์ํ๊ณ ๋งค์ฐ ์ง๊ด์ ์ด์ง ์์ต๋๋ค.
์์ด๋ฌ๋ํ๊ฒ๋ ํผ๋์ค๋ฌ์ด ๊ฒ์ ์ํธ ์์ฉ ํ์ง ์๋๋ค๋ ๊ฒ์
๋๋ค . ์ค์ ์ ์๋ก ์ ํ ์ํฅ์ ๋ฏธ์น์ง ์์ต๋๋ค. include
๋ ํ๋ก๊ทธ๋จ์ ๋ด์ฉ์ 100% ์ ์ดํ๊ณ rootDir
๋ outDir
์ ๋ ์ด์์ ๊ณ์ฐ์ 100% ์ ์ดํฉ๋๋ค.
๋ฌธ์ ์ ๋ ๋ค๋ฅธ ์๋ฅผ ์ถ๊ฐํ๊ธฐ ์ํด ์ด๊ฒ์ ๋ด ํด๋ ๊ตฌ์กฐ์ ๋๋ค.
tsconfig.json
package.json
src/index.ts
๋ด tsconfig์ ์์ต๋๋ค.
"rootDir": "src",
"outDir": "lib",
๊ทธ๋ฆฌ๊ณ ๋ด "index.ts"(src ํด๋)
import pkg from '../package.json'; // I read the package.json object
export class SomeClass {
public version = pkg.version;
}
๋๋ ๋น๋ ํ์ "index.js" ํ์ผ์ด "lib" ํด๋ ์์ ์์ ๊ฒ์ด๋ผ๋ ๊ฒ์ _์๊ณ _ ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋๋ package.json์ด 1๋จ๊ณ ์ฌ๋ผ๊ฐ ๊ฒ์ด๋ผ๋ ๊ฒ์ _์๊ณ _ ์์ต๋๋ค.
Typescript๊ฐ ๋ด ํด๋ ๊ตฌ์กฐ๋ฅผ ๋๋ณด๋ค ๋ ์ ์๊ณ ๋น๋๋ฅผ ์ค๋จํด์ผ ํ๋ค๊ณ ์๊ฐํ์ง ์์ต๋๋ค. ์ถ๋ ฅ ํด๋์ ํฌํจ๋์ง ์์ rootDir ํด๋ ์ธ๋ถ์ ์ผ๋ถ ํ์ผ์ ๋ํ ๊ฒฝ๊ณ ๋ฅผ ๊ธฐ๋กํด์ผ ํฉ๋๋ค.
@sebelga ์๋ง ๋ฒ๊ทธ๊ฐ ์๋ค๊ณ ์๊ฐ ํ๋๋ฐ์ - ์ .json
์์ ์ธ๋ถ rootDir
TS๊ฐ ์ถ๋ ฅ ํด๋์ ๊ทธ ๋ณต์ฌํ์ง ์๊ธฐ ๋๋ฌธ์ ํ์ธ ๋ ๊ฒ
@sebelga ๋๋ ์๋ง๋ ๋ฒ๊ทธ - TS๊ฐ ์ถ๋ ฅ ํด๋์ ๋ณต์ฌํ์ง ์๊ธฐ ๋๋ฌธ์ ์ธ๋ถ rootDir์์ .json์ ํ์ฉํ๋ ๊ฒ์ด
์ฌ์ค์ด ์๋๋๋ค.. ์ฐ๋ฆฌ๋ .json ํ์ผ์ ๋ด๋ณด๋ด๋ ๋ช ๊ฐ์ง ํน๋ณํ ๊ท์น์ด ์์ต๋๋ค... ํ์ผ์ด ๊ฐ์ ์์น์์ ์์ฒด์ ์ผ๋ก ๋ด๋ณด๋ด์ง ์์ ์ด๋ผ๋ฉด ํ์ผ๋ง ๋ด๋ณด๋ด์ง ์์ต๋๋ค. ๋ชจ๋ ๊ฒฝ์ฐ์ ๋ฐฉ์ถ๋ฉ๋๋ค(์: --outDir๊ฐ ์ง์ ๋๋ฉด ํด๋น ํด๋๋ก ๋ฐฉ์ถ๋ฉ๋๋ค)
@RyanCavanaugh ๋ฐํ์์ package.json
์์ ๋ฒ์ ๋ฒํธ๋ฅผ console.log
์ถ๋ ฅํ๋ ค๋ @sebelga ์ ์ ์ฌํ ์ฌ์ฉ ์ฌ๋ก๊ฐ ์์ต๋๋ค.
๊ทธ๋์ ๋ด ์๋ฃจ์
์ ๋ด "rootDir": "."
๋ณ๊ฒฝํ๋ ๊ฒ์ด ์์ต๋๋ค. ๊ทธ๋ฌ๋ฉด ์ฌ๊ธฐ์ ํฌํจ๋ฉ๋๋ค.
"include": [
"src",
"typings"
]
๊ทธ๋ฆฌ๊ณ package.json
ํ์ผ์ด lib
(๋น๋) ํด๋์ ํฌํจ๋์ด ์๊ณ ์ด ํด๋์๋ "src" ํ์ ํด๋๊ฐ ํฌํจ๋์ด ์์ผ๋ฏ๋ก ๋น๋ ์งํ์ ์คํ๋๋ bash ์คํฌ๋ฆฝํธ๋ฅผ ์์ฑํ์ฌ ์ ๋ฆฌํ์ต๋๋ค.
#!/bin/bash
rm lib/package.json
mv $(pwd)/lib/src/* $(pwd)/lib
rm -rf lib/src
๊ทธ๊ฒ์ ์๋ํ์ง๋ง ๋์๊ฒ ๊ฝค ํดํน ๋ ๋๋์ ๋๋ค.
@sebelga typings
ํด๋์ .ts
ํ์ผ์ด ์์ต๋๊น? ๊ทธ๋ ์ง ์์ ๊ฒฝ์ฐ rootDir
๋ฅผ src
ํ๊ณ ์คํฌ๋ฆฝํธ๋ฅผ ๊ฑด๋๋ฐ๋ ๊ฒ์ด ํฉ๋ฒ์ ์
๋๋ค.
@sebelga const { version } require('../../package.json')
๋๋ import { version } from 'package.json')
๋์ ๋ค์๊ณผ ๊ฐ์ด ์๋ํด ๋ณด์
จ์ต๋๊น?
import { sync as loadJsonFileSync } from 'load-json-file';
const { version } = loadJsonFileSync('../../package.json');
TypeScript๋ ์ด๋ฐ ์์ผ๋ก rootDir
์ธ๋ถ์ ์๋ ๊ฒ์ ๋ํด ์ ๊ฒฝ ์ฐ์ง ์์ต๋๋ค.
https://github.com/sindresorhus/load-json-file
๋ชจ๋ ../..
๋ฅผ ํ๋์ฝ๋ฉํ์ง ์์ผ๋ ค๋ฉด ๋ค์์ ์๋ํ ์ ์์ต๋๋ค.
https://github.com/sindresorhus/read-pkg-up
@RyanCavanaugh ์์์ ์ธ๊ธํ ๋๋ก "src"๋ก ์ค์ ํ ์ ์์ต๋๋ค. src( import pkg from '../package.json';
) ์ธ๋ถ์์ "package.json"์ ๊ฐ์ ธ์ค๊ณ ์๋๋ฐ tsc๋ ์ด๋ฅผ ํ์ฉํ์ง ์์ต๋๋ค.
@dylang ์ ๊ณต์ ํด ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค! ๋๋ ๊ทธ๊ฒ์ ์๋ ํ ๊ฒ์ด๋ค.
๋ด ์์ค๊ฐ ๋ชจ๋ ํน์ ํด๋(rootDir๋ฅผ ํตํด)์ ์๋ค๊ณ typescript์ ๋งํ์ต๋๋ค.
์ด๊ฒ์
rootDir
์๋ฏธํ๋ ๋ฐ๊ฐ ์๋๋๋ค!rootDir
๋ "์ด ํด๋๋ฅผoutDir
์ ๊ฒฝ๋ก ๊ณ์ฐ์ ์ํ ์๋์ ๊ธฐ์ค์ผ๋ก ์ฌ์ฉ"์ ์๋ฏธํฉ๋๋ค. _์ปดํ์ผ์ ์ผ๋ถ์ธ ํ์ผ_์files
๋ฐ/๋๋include
/exclude
๋ก ๋ต๋ณ๋๋ ๋ณ๋์ ์ง๋ฌธ์ ๋๋ค.
@RyanCavanaugh ํ์ง๋ง rootDir
๊ฐ ์๋ฏธํ๋ ๋ฐ๋ ์ด๊ฒ์ด๊ณ ์ด๊ฒ์ด ์ด ๋ฌธ์ ์ ๋ํ ๊ฒ์
๋๋ค.
๋๋ ์ปดํ์ผ๋ฌ์๊ฒ ์ค๋ฅ๋ฅผ ๋ฌด์ํ ์ ์๋ค๋ ๊ฒ์ ์๋ ค์ฃผ๋ ์๋ก์ด "compilerOption"์ ๋์ ํจ์ผ๋ก์จ ๊ธฐ์กด ์ฌ์ฉ์์๊ฒ ์๋ก์ด ๋ฌธ์ ๋ฅผ ๋์ ํ์ง ์๊ณ ์๋ง๋ ๋งค์ฐ ์์ ๋ ์ ์๋ 2016๋ ์ดํ์ ์ด๋ฆฐ ๋ฌธ์ ๋ฅผ ๋ณผ ๋ ํ์ ์ ์ ์งํ๋ ๋ฐ ๋ฅ์ํ์ง ์์ต๋๋ค. ์ฃผ์ด์ง ์ฌ์ฉ ์ฌ๋ก์์.
์ด์ ๋ํด ์ฌ๊ณผ๋๋ฆฝ๋๋ค. ์ข์ ์๋น์ค๋ฅผ ์ ๊ณตํด์ผ ํ๊ธฐ ๋๋ฌธ์ ์ด์ฉ ์ ์์ง๋ง ๊ฐ๋ ์ด์ ๊ฐ์ ๋ฌธ์ ์ค๋ ๋๊ฐ ๋ฐ์ํฉ๋๋ค. TypeScript ์์ฑ์๊ฐ ํ๋์ ๊ฐ๋จํ ๊ตฌ์ฑ ํ๋๊ทธ๋ฅผ ๊ตฌํํ๋ ๊ฒ์ด ์ ๊ทธ๋ ๊ฒ ์ด๋ ค์ด๊ฐ์?
๊ฐ๋ฐ์๋ค์ด ๊ฒ์ผ๋ฅด๊ฑฐ๋ ๋์์ ์ค ์์ฌ๊ฐ ์๊ธฐ ๋๋ฌธ์ด ์๋๋ผ๊ณ ์๊ฐํฉ๋๋ค. ๋ ๋ง๊ณ ๋ ์ฌ๊ธฐ ์๋ ์ฌ๋์ด ๋์ ์ฌ๋์ด๋ผ๊ณ ์๊ฐํ์ง ์๋๋ค.
์์ฑ "rootDir"์ ์ ์๋ก ๋ณด์ด๋ ๊ฒ์ ๋ํด ์๋ ๋์ ๊ณ์๋์ด์จ ์ด ๊ฐ๋ฑ, ์ด ๋ ผ์์ ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ด ๋ฌธ์ ์ ๋ํด ์ด๋ป๊ฒ ํด์ผ ํ ๊น์?
์ฌ๋๋ค์ ์์ ์ด ์ณ๋ค๊ณ ๋ฏฟ๊ธฐ ๋๋ฌธ์ ์ด ๋ ผ์์ ํ๋ง๋ฆฌ๊ฒ ๋ฉ๋๋ค. ์, "rootDir"์ ์์ค ์ฝ๋์ ๊ธฐ๋ณธ ๋๋ ํ ๋ฆฌ ์ญํ ์ ํฉ๋๋ค. ์, ์ค๋ฅ๊ฐ ์ ํจํฉ๋๋ค.
๊ทธ๋ฌ๋ ๊ทผ๋ณธ์ ์ธ ๋ฌธ์ ๋ ์ฌ์ ํ ๋จ์ ์์ต๋๋ค. ๋ด ๋๊ตฌ๋ ์ฝ๋๋ฅผ ์๋ฒฝํ๊ฒ ์ปดํ์ผํ์ง๋ง ๋ด IDE๋ ๋ด ํ๋ฉด์ ์ด ์ค๋ฅ๋ฅผ ํ์ํฉ๋๋ค. ๊ทธ๊ฒ์ ๋ณํ์ ๋๋ค. ๋๋ ๊ทธ ๋นจ๊ฐ ์ ์ ์์ ๊ณ ์ถ๋ค. ๋ด ํ์ผ์๋ ์ค๋ฅ๊ฐ ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋ง์ฝ ๊ทธ๋ ๋ค๋ฉด, ๋๋ ์ด๋ฌํ ๋น ์ด์๋ค์ ์ฃผ์๋ฅผ ์ฐ๋งํ๊ฒ ํ๊ธฐ ๋ณด๋ค๋ ๊ทธ๊ฒ๋ค์ ์ง์คํด์ผ ํฉ๋๋ค.
๋ด๊ฐ ์ํ๋ ๊ฒ์ ์ด ์ค๋ฅ ๋ฉ์์ง๋ฅผ ํ์ํ์ง ์๋ ๊ฒ์ ๋๋ค. ๊ทธ๊ฒ์ด ์ฐ๋ฆฌ ๋๋ถ๋ถ์ด ์ํ๋ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. ์ฌ๊ธฐ์ ๋ค๋ฅธ ์ฌ๋ก๊ฐ ์๋์ง, ์๋ง๋ ๊ทธ๊ฒ์ ๋ํด ์ด์ผ๊ธฐํ๊ณ ์ถ์ ์ฌ๋๋ค์ด ์์์ง ๋ชจ๋ฅด๊ฒ ์ต๋๋ค.
ํจ๊ป ํ๋ ฅํ์ฌ ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์์ต๋๊น? ์ ๋นจ๊ฐ์ ์ด ์ฌ๋ผ์ง๋ ๊ฑธ ๋ณด๋ฉด ๋๋ฌด ํ๋ณตํ ๊ฒ ๊ฐ์์...
@nullquery tsc
์๋ํ์ง๋ง IDE์ ๋นจ๊ฐ์ ๋ฌผ๊ฒฐ์ ์ด ํ์ ๋๋ฉด IDE๊ฐ tsc
์ ๋์ผํ ์ปดํ์ผ๋ฌ ๋ฒ์ ๋๋ ๊ตฌ์ฑ์ ์ฌ์ฉํ์ง ์๋๋ค๋ ์๋ฏธ์
๋๋ค.
@nullquery ๋ ๋ฌธ์ ๋ฅผ ์ฌํํ๋ ๋ฐฉ๋ฒ์ ๋ณด์ฌ์ฃผ๋ ๋ฒ๊ทธ๋ฅผ ํ์ผ์ ์ ์ฅํ๊ณ ์ด๋ฅผ ์์ ํ๊ฑฐ๋ ํ๋ก์ ํธ ๊ตฌ์ฑ์ ๋ฌธ์ ๋ฅผ ์๋ ค๋๋ฆฝ๋๋ค.
@sebelga ํด๊ฒฐ ๋ฐฉ๋ฒ์ ์ด์ด npm ์คํฌ๋ฆฝํธ ๋ด๋ถ์ ๋ค์ด๊ฐ๋ ๋ฐ ์ ํฉํ ๋ณํ์ด ์์ต๋๋ค.
tsc --module commonjs --target ESNext --outDir ./edition-esnext --project tsconfig.json && test -d edition-esnext/source && ( mv edition-esnext/source edition-temp && rm -Rf edition-esnext && mv edition-temp edition-esnext ) || true
์๋ฃจ์ ์ ํ๋ก์ ํธ ์ฐธ์กฐ ์ ๋๋ค.
์ด๊ฒ์ ์ฌ์ฉํ๋ ค๋ฉด "tsconfig.json" ํ์ผ์ ํธ์งํ๊ณ ์ด๊ฒ์ ํ์ผ ๋์ ์ถ๊ฐํ์ญ์์ค("compilerOptions" ์ธ๋ถ):
"references": [
{ "path": "../common" }
]
์ด๋ ๊ฒ ํ๋ฉด "../common/" ํด๋(๋ฐ ๋ชจ๋ ํ์ ํด๋)์ ํ์ผ์ ์ฐธ์กฐํ ์ ์์ต๋๋ค.
์ด์ ์ ํผ๋์ IntelliJ์ ์ค์ผ๋์ง ์์ gulp-typescript
์์
์ด ๋์ผํ "tsconfig.json" ํ์ผ์ ์ฌ์ฉํ์์๋ ๋ถ๊ตฌํ๊ณ ๋ค๋ฅธ ๊ฒฐ๊ณผ๋ฅผ ์ ๊ณตํ๋ค๋ ์ฌ์ค์์ ๋น๋กฏ๋์์ต๋๋ค.
์ด๋ค ์ด์ ์์์ธ์ง "gulp-typescript"๋ ์ปดํ์ผ์ ์ต์ ์ ๋คํ๊ณ ์๋ ๊ฒ์ผ๋ก ๋ํ๋ฌ์ต๋๋ค.
TypeScript์ ์ค๋ฅ(์: let z: number = ''
)๋ IntelliJ์์ ํ๋๊ทธ๊ฐ ์ง์ ๋์ง๋ง "gulp-typescript"๋ ์ด๋ฅผ ์ ๋๋ก ์ปดํ์ผํฉ๋๋ค.
JavaScript ๊ตฌ๋ฌธ ์ค๋ฅ(์: let 1z = ''
)๋ง "gulp-typescript"์ ์ํด ํ๋๊ทธ๊ฐ ์ง์ ๋ฉ๋๋ค.
๋ฐ๋ผ์ "gulp-typescript" ์ฌ์ฉ์์ธ ๊ฒฝ์ฐ "gulp-typescript" ๋ฒ์ ๋ฐ ๊ตฌ์ฑ์ ๋ฐ๋ผ ์ด๋ฌํ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค. (๊ธ์ ์ฐ๋ ์์ ์์ ์ต์ ๋ฒ์ ์ ์ฌ์ฉํ๊ณ ์์ง๋ง ๋ฏธ๋์ ๋๊ตฐ๊ฐ๊ฐ ์ด๊ฒ์ ์ฝ์ ๊ฒ์ด๋ผ๊ณ ๊ฐ์ ํฉ๋๋ค. ์๊ฐ์ด ๋ ๋์์ผ๋ฉด ํฉ๋๋ค.)
๋๋ ํ๋ก์ ํธ ์ฐธ์กฐ์ ์ฌ์ฉ์ด ์ด ๋๋ถ์ ์๋ต์ ์ด๋๊ฐ์ ๋ฌปํ ์๋ค๋ ๊ฒ์ ์๊ณ ์์ง๋ง, ์ด๊ฒ์ด ๋ ์ ๋ฌธ์ํ๋์๋ค๋ฉด ๋ ์ข์์ ๊ฒ์ ๋๋ค.
Google์์ "TS6059"์ ๋ํ ์์ 3๊ฐ ๊ฒฐ๊ณผ๋ ๋ชจ๋ GitHub ๋ฌธ์ ๋ก ์ด์ด์ง๋๋ค. ์ด๋ฌํ ์ผ๋ฐ์ ์ธ ์ค๋ฅ์ ํด๋น ์๋ฃจ์ ์ ๋ฌธ์ํํ ํ์ด์ง๊ฐ ์์๋ค๋ฉด ํจ์ฌ ๋ ๋ช ํํ์ ๊ฒ์ ๋๋ค.
@MicahZoltu ์ด๊ฒ์ด ํด๊ฒฐ๋ ์ ์๋ ์ผ์ ๋๊น? ์ ๋ฌธ์ ๋ฅผ ๋ง๋ค์ด์ผ ํ๋์, ์๋๋ฉด ์ฃผ์ ๊ธฐ์ฌ์ ๊ฐ์ ๋ด๋ถ์ ์ผ๋ก ๋ ผ์๋๋ค๋ฉด ๋ ๋นจ๋ฆฌ ์งํ๋ ๊น์?
(FWIW ์ ๋ TypeScript ํ์ ์ผ์์ด ์๋๋๋ค)
์ผ๋ฐ์ ์ผ๋ก ๊ผญ ํ์ํ ๊ฒฝ์ฐ๊ฐ ์๋๋ฉด path
ํ์ง ์๋ ๊ฒ์ด ์ข์ต๋๋ค. ๋๋ ๊ทธ๊ฒ์ ๋ชฉ์ ์ด ์ด์ํ ์์กด์ฑ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง ๋ ๊ฑฐ์ JS ํ๋ก์ ํธ์์ ํธํ์ฑ์ ํ์ฉํ๋ ๊ฒ์ด๋ผ๊ณ ์๊ฐํ์ง๋ง, ๊ทธ๊ฒ์ด ์๋ก์ด ํ๋ก์ ํธ์ ์ฌ์ฉ๋๋๋ก ์๋๋ ๊ฒ์ด๋ผ๊ณ ์๊ฐํ์ง ์์ต๋๋ค. ๋น์ ์ ๊ธฐํ๊ฐ ์์ต๋๋ค. ๋๋ ๊ฐ์ธ์ ์ผ๋ก ๊ทธ๊ฒ์ ์ฌ์ฉํ์ง ์๊ธฐ ๋๋ฌธ์ ๋น์ ์ด ๊ฐ์ง ์ ์๋ ๋ฌธ์ ์ ๋ํด ์ค์ ๋ก ๋์์ ์ค ์๋ ์์ง๋ง ๋ง์ ์ฌ๋๋ค์ด ๊ทธ๊ฒ์ ๋ํด ์ด๋ ค์์ ๊ฒช๋ ๊ฒ์ ๋ณด์๊ณ ํด๊ฒฐ์ฑ
์ ์ผ๋ฐ์ ์ผ๋ก "์ฌ์ฉ ์ค์ง"์
๋๋ค.
gulp-typescript์ ๊ฒฝ์ฐ gulp-typescript์์ ์ฌ์ฉํ๋ TSC ๋ฒ์ ์ด IntelliJ์์ ์ฌ์ฉ ์ค์ธ TSC ๋ฒ์ ๊ณผ ๋ค๋ฅธ ๊ฒ์ฒ๋ผ ๋ค๋ฆฝ๋๋ค. ์ค๋ช
ํ๋ ๊ฒ๊ณผ ๊ฐ์ ์ฆ์์ด ๋ํ๋๋ฉด ์ผ๋ฐ์ ์ผ๋ก ๋ฌธ์ ์
๋๋ค(๋ค๋ฅธ ํ๋๋ ๋์ผํ tsconfig.json
์ฌ์ฉํ์ง ์๋๋ค๋ ๊ฒ์
๋๋ค).
"gulp-typescript"์์ ์ฌ์ฉํ๋ ๋ฒ์ ์ ๋์ผํด์ผ ํฉ๋๋ค. ๋ ๋ฒ์ ๋ชจ๋ node_modules
์์ ํ์๋ฉ๋๋ค. ๋๋ ์ค๋ฅ๋ฅผ ํฌ์ฐฉํ๊ณ ์ด์ ๊ด๋ จ๋ ์ค์ ์ ์์ ํ๋ ๋ค์ํ ๋ฐฉ๋ฒ์ ์๋ํ์ต๋๋ค("gulp-typescript"์์ ์ ๊ณตํ๋ ๋ค์ํ "๋ฆฌํฌํฐ"๋ฅผ ์ด์ง๋ฝํ๊ณ ๋ โโ๋ง์ ์ค๋ฅ๋ฅผ ๋ฐ์์ํค๊ธฐ ์ํด ์ค์ ์ ์ฌ์ ์ํ๋ ค๋ ์๋ ํฌํจ). ์๋ฌด ๊ฒ๋ ์๋ํ์ง ์๋ ๊ฒ ๊ฐ์ต๋๋ค.
๊ทธ๋๋ ๊ด์ฐฎ์ต๋๋ค. IntelliJ๊ฐ ์ค๋ฅ๋ฅผ ์ ๊ณตํ๋ ํ Gulp ์์ ์ด ์ค๋ฅ๋ฅผ ๋ฌด์ํ๋ค๋ ์ฌ์ค์ ๊ธฐ๊บผ์ด ๋ฐ์๋ค์ ๋๋ค.
๋๋ ๊ทธ ์ฃผ์ ์ ํธํ๋ ๋ฐฉ๋ฒ์ ์ฐฌ์ฑํ์ฌ ๋์ ๋ฐฉ๋ฒ์ ์ ๋ฐ ๊ฒ์ฌํ๋ ํฌ์ด ์๋๋๋ค. ๋ด๊ฐ ๊ฐ์ง๊ณ ์๋ ํ๋ก์ ํธ ๊ตฌ์กฐ๋ ๋์๊ฒ ์๋ฏธ๊ฐ ์์ต๋๋ค. ๋ชจ๋ ๊ฒ์ ํฌํจํ๋ฉด์๋ ์ฌ๋ฌ ๊ตฌ์ฑ ์์๋ก ๋ถํ ํ ์ ์๋ ์ ์ฐ์ฑ์ ์ ๊ณตํฉ๋๋ค.
๋๋ "๋ ๊ฑฐ์ ์ด์ ๋ก ํธํ์ฑ์ ํ์ฉํ๋ ๊ฒ"์ ๋ฏฟ์ง ์์ผ๋ฉฐ ํนํ ํ๋ก์ ํธ ์ฐธ์กฐ์ ๊ด๋ จํ์ฌ ๊ทธ๋ ์ต๋๋ค. rootDir
์ธ๋ถ์ ํ์ผ์ ์ฐธ์กฐํ๋ ๊ฒ์ด _๋ฐ๋์_ ๊ฐ๋ฅํด์ผ ํฉ๋๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด ๊ทํ์ ๊ทํ์ ํ์ด ์ดํดํ๋ ๋ฐฉ์์ผ๋ก ํ๋ก์ ํธ ๊ตฌ์กฐ๋ฅผ ์ ์ํ ์์ ๊ฐ ์์ ๊ฒ์
๋๋ค.
TypeScript๋ก ์ฒ์ ์์ ์ ์์ํ์ ๋ ๋ง์ ๋ฌธ์ ์ ๋ถ๋ช์ณค์ต๋๋ค. ๊ทธ ์ค:
JavaScript ํ์ผ์ ํฌํจํ๊ธฐ ์ํ ์๋ฃจ์ ์ ๋น์ AMD์ธ ๊ฒ ๊ฐ์์ต๋๋ค. ์น์ฌ์ดํธ๋ ๊ณต์์ ์ผ๋ก ๋ค๋ฆฌ๊ณ AMD์ ํ๋ก๋์ ์ฌ์ฉ ์ฌ๋ก๊ฐ ์จ๋ผ์ธ์ ๋ง์ด ์์์ต๋๋ค. ๊ทธ๋ฌ๋ ๋ถ๋ช ํ Webpack์ ์๋ก์ด ํฐ ์ผ์ด์๊ณ ์ผ๋ถ ํ๋ก์ ํธ๋ ๋จ์ํ AMD ํ๊ฒฝ์์ ์๋ํ์ง ์์์ต๋๋ค. ๊ตํ: ๋ชจ๋ ์ฌ๋์ด ์๋ก์ด ๋ฐฉ๋ฒ์ ์ฑํํ๋ ๊ฒ์ ์๋๋ฏ๋ก ํญ์ ๋งํ๊ฒ ๋ฉ๋๋ค.
TypeScript์์ ์ต์ข ์ถ์๋ JavaScript(์์ค ๋งคํ ํฌํจ)๋ก ๊ฐ๋ ๊ธธ์ ๋์๊ฒ ๋ช ํํ์ง ์์์ต๋๋ค. ๋น์์๋ ์ฌ๋ฌ ๊ฐ์ง ๋ค๋ฅธ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ ์ ์์์ง๋ง ๊ทธ ๋น์์๋ "tsconfig.json" ํ์ผ ๋ฐ/๋๋ ๋ด IDE์์ ๊ธฐ๋ณธ์ ์ผ๋ก ์๋ํ์ง ์๋ ๊ฒ ๊ฐ์์ต๋๋ค. ๊ตํ: ์ฌ๋ฐ๋ฅธ ์ผ์ ํ๊ณ ์ถ๋ค๋ฉด ์ค์ค๋ก ํด์ผ ํฉ๋๋ค. ๋ค๋ฅธ ์ฌ๋๋ค์ด ๋น์ ์ ์ํด ์ผ์ ํ๋๋ก ์์กดํ์ง ๋ง์ญ์์ค. ๊ทธ๋ค์ด ์๋ฌด๋ฆฌ ์ข์ ์๋๋ฅผ ๊ฐ์ง๊ณ ์๋๋ผ๋ ์๋ฌด๋ ์๋ฒฝํ์ง ์์ผ๋ฉฐ ์๋ฌด๋ _๋น์ ์_ ์์ ๊ณต๊ฐ์ ์์ธกํ ์ ์์ต๋๋ค.
๋ด๊ฐ ์ํ๋ ํ ๊ฐ์ง ๋ง์ถค ์ค์ ์ด ์์์ต๋๋ค. HTML ํ์ผ์ ๋ด์ฉ์ ํฌํจํ๊ธฐ ์ํด JavaScript ์ฌ์ ์ผ๋ก ๋ณํํ๋ ๋ฐฉ๋ฒ์ด์์ต๋๋ค. ์ด๊ฒ์ด ๋์ ์ ์ผํ ๊ฑธ๋ฆผ๋์ด ๋์ด์ผ ํ์ง๋ง, ๊ฒฐ๊ตญ ์ด๊ฒ์ ์ฐ๊ธฐ ์ฌ์ด ์คํฌ๋ฆฝํธ ์ค ํ๋๋ก ๋ฐํ์ก์ต๋๋ค.
๊ฒฐ๊ตญ ๋ชจ๋ ๊ฒ์ ์ฒ๋ฆฌํ๊ธฐ ์ํด ๋๋ง์ Gulpfile์ ๊ฐ๋ฐํด์ผ ํ์ต๋๋ค. ๋ค์์ ์ํํฉ๋๋ค.
๋ฐฐํฌ์ฉ์ผ๋ก ์ถ์๋ JavaScript ํ์ผ์ node_modules
ํด๋์์ ๋ด ์น ๋ฃจํธ๋ก ๋ณต์ฌํฉ๋๋ค. ๊ฐ๋จํด ๋ณด์ด์ง๋ง ํฌํจ์ํค๋ ค๋ ๊ฑฐ์ ๋ชจ๋ JavaScript ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์ถ์๋ JavaScript ํ์ผ์ ์ ์ฅํ๋ ์์น๊ฐ ๋ค๋ฆ
๋๋ค. ๊ตฌ์ฑ๋ ์์๊ณ ํ์ผ์ ๋ํ ๋ช
ํํ ๊ฒฝ๋ก๋ ์์์ต๋๋ค. ๊ฒฐ๊ตญ ํฌํจํ๊ณ ์ถ์ ๊ฐ JavaScript ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ํด ๋ณ๋์ ์คํฌ๋ฆฝํธ๋ฅผ ์์ฑํด์ผ ํ์ต๋๋ค. ์์น๊ฐ ํฅํ ๋ฒ์ ์์ ๋ณ๊ฒฝ๋์ง ์๋๋ค๊ณ ๊ฐ์ ํ๋ฉด ์๋ํ์ง๋ง ๋ณ๊ฒฝ๋๋ ๊ฒฝ์ฐ ํญ์ ๋ณต์ฌ ์คํฌ๋ฆฝํธ๋ฅผ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค.
์ถ๋ ฅ ๋๋ ํ ๋ฆฌ์ ๋ณ๋์ ํ์ผ์ ์์ฑํ๋ ๋ก์ปฌ "tsconfig.json" ํ์ผ์ ๋ฐ๋ผ TypeScript๋ฅผ ์ปดํ์ผํฉ๋๋ค( outDir
). (ํํํํ!) ๊ทธ๋ฐ ๋ค์ "๋กค์
" ํ๋ฌ๊ทธ์ธ์ ์ฌ์ฉํ์ฌ ํด๋น ํ์ผ์ ๋จ์ผ JavaScript ํ์ผ๋ก ์์ถํ ๋ค์ UglifyJS๋ฅผ ์คํํ์ฌ ์ด ํ์ผ์ ์ถ์ํฉ๋๋ค. ์ด ๋ชจ๋ ์์
์ ์๋ณธ TypeScript ํ์ผ์ ๋ค์ ๋งคํ๋๋ ์์ค ๋งคํ์ ์ ์งํ๋ ๊ฒ์
๋๋ค.
(์ฌ์ฉ์ ์ ์ ์์
) TypeScript ์์ค ๋ฃจํธ์ ๊ฐ HTML ํ์ผ์ ๋ํด html_templates
๋ผ๋ ์ฌ์ ์ ํฌํจํ๋ JavaScript ํ์ผ์ ์์ฑํ๊ณ ์ด๋ฅผ ์ถ์๋ JavaScript ํ์ผ๋ก ๋ด webroot ํด๋์ ๋ฐฐ์นํฉ๋๋ค.
๋ ์ฐ์ํ ๋ฐฉ๋ฒ์ด ์์ ์ ์์ง๋ง ํ๋์ ์คํ ์์ค ํ๋ก์ ํธ์์ ๋ค์ ํ๋ก์ ํธ๋ก ๋์ด๊ฐ ํ์๋ ๊ฐ๊ฐ์ด ์ ๊ณตํ๋ ์๋ฃจ์ ์ฌ์ด์์ ์ถฉ๋ถํ ์ ๊ธ๋ง์ ํ์ต๋๋ค.
๋ด๊ฐ ์ ํํ ์ ๊ทผ ๋ฐฉ์์ ํจ๊ณผ๊ฐ ์์ผ๋ฉฐ ์ดํดํ๊ธฐ์ ์ถฉ๋ถํ ๊ฐ๋จํ๋ฉฐ(ํนํ "gulp-typescript"๊ฐ ๋ค๋ฅธ ์์ ์ ์ํํ๋ค๋ ๊ฒ์ ์ดํดํ๊ธฐ ๋๋ฌธ์) ์์ผ๋ก ๋ช ๋ ๋์ ์ด๊ฒ์ ๊ณ์ ์ฌ์ฉํ ๊ฒ์ ๋๋ค.
๊ฐ์ฅ ์ข์ ํด๊ฒฐ์ฑ ์ ์์ ์ ์ดํดํ๋ ๊ฒ์ ๋๋ค. ์ด๊ฒ์ ๋๋ฅผ ๋์ฐ๋ ค๋ ์ฌ๋์๊ฒ๋ ๋์์ด ๋์ง ์์ง๋ง(๋งค์ฐ ๊ฐ์ฌํฉ๋๋ค! ํผ๋์ด ์๋๋ผ ๋์์ ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค) _any_ ์๋ฃจ์ ์๋ ํญ์ ๋ฌธ์ ๊ฐ ์์ ์ ์์ผ๋ฏ๋ก ๋ฌด์ธ๊ฐ๋ฅผ ๊ณ ์ํ๋ ๊ฒ์ด ์ข์ต๋๋ค. ๋ค์ํ ์ ๋ , ์ฑ์ ์ทจํฅ ๋ฐ ์ฑ๋ณ ์ ์ฒด์ฑ์ ๊ฐ์ง ๋ค๋ฌธํ ํ ์ด ํ๊ณ ์์ต๋๋ค.
tl;dr ํ๋ก์ ํธ ์ฐธ์กฐ๋ฅผ ์ค๋จํ์ง ๋ง์ญ์์ค. ๋ด ๋๊ตฌ๊ฐ ์๋ํ๋ ค๋ฉด ํ์ํฉ๋๋ค. ๊ฐ์ฌ ํด์
๋ค์ค ํ๋ก์ ํธ TS ์ค์ ์ ์ ๋๋ก ์ค์ ํ๋ ๊ฒ์ ํฌ๊ธฐํ๊ณ ๋ชจ๋ ํ๋ก์ ํธ์์ tsc -w
ํ๊ณ npm link
ํ๋ฉด ๋ค์ค ํ๋ก์ ํธ tsconfig์ ๋ชจ๋ ๋ณต์ก์ฑ์ ๋ฌด์ํ๊ณ ๋ค๋ฅธ ํญ๋ชฉ์ ์ฐธ์กฐํ ์ ์์ต๋๋ค. node_modules
์ ์ผ๋ฐ node.js ์ข
์์ฑ๊ณผ ๊ฐ์ ํ๋ก์ ํธ์
๋๋ค.
๊ทธ๋ฌ๋ ์ค๋ ํ ํ๋ก์ ํธ์์ ๋์์ es5
์์ es6
ํ์ผ๋ฉฐ File '.../lib.ts' is not under 'rootDir'
๋๋ฌธ์ ๋ ์ด์ ์ปดํ์ผ๋์ง ์์ต๋๋ค.
ํ์ผ ๊ตฌ์กฐ:
/app
- tsconfig.json // rootDir = "."
- app.ts (
/app/node_modules/lib
- tsconfig.json // rootDir = "."
- lib.ts
- lib.js
- lib.d.ts
์ tsc
์์ /app
์ ๋ํ ์ผ๋ ค /app/node_modules/lib/lib.ts
ํ์ผ? ํด๋น ํ์ผ์ ์ ํ ์ฌ์ฉํด์๋ ์๋ฉ๋๋ค. ์ปดํ์ผ๋ /app/node_modules/lib/lib.js
๋ฐ /app/node_modules/lib/lib.d.ts
์์ต๋๋ค.
/app/node_modules/lib/lib.ts
์ญ์ ๋๋ฉด - ๋๋๊ฒ๋ - ์ ์ปดํ์ผ๋ฉ๋๋ค.
@alexeypetrushin ๋ด ํ๋ก์ ํธ ์ค ์ผ๋ถ๋ฅผ ๋ณผ ์ ์์ต๋๋ค. ์ ์๋ํ๋ ๊ฒ ๊ฐ์ต๋๋ค. ์:
import * as pkg from '../package.json';
์๋์. ๊ทธ๋ฆฌ๊ณ ๋ด๊ฐ ์ฐพ์ ์์๋์ด ์ค๋ฅ๋ฅผ ๋ ๋ฐฉ๋ฒ์ด ์์ต๋๋ค.
@SephReed : ์ ๋ StackOverflow์์ 200๋ ํฌ์ธํธ๋ฅผ ์ผ๊ณ ๋๊ตฐ๊ฐ ../package.json
๊ฐ์ ธ์ค๊ธฐ๋ฅผ ์ํ ์ด ๋น์ ์ดํด์ผ ํ ๊ณณ์
๋๋ค typings.d.ts
๊ฐ์ ๋๋ ํ ๋ฆฌ์ ํ์ผ์ package.json
์ด ๋ด์ฉ์ผ๋ก, :
declare module '*.json';
๋๋ ์ด๊ฒ์ด ์ด๋ป๊ฒ ์๋ํ๋์ง ์ ๋ชจ๋ฅด์ง๋ง ์์งํ ๋๋ ์๊ดํ์ง ์๋๋ค. ๊ทธ ๋จ๊ณ์์ TS๋ ๋๋ฅผ ์ํ ๊ฒ์ด ์๋๋ผ ์ค์ค๋ก๋ฅผ ์ํ ๊ฒ์ด์์ต๋๋ค.
์ด๊ฒ ์ด๋ ๊ฒ ์ด๋ค ํ ๋ก ์ด๋ผ๋ ๋๋์ต๋๋ค. ํ์ง๋ง ๊ทธ ๋ ผ๋ฆฌ๋ ์ดํดํฉ๋๋ค. ์ ์๊ฒ๋ ๋ฌผ๋ก ์์ค ํด๋๊ฐ ์์ง๋ง ์ปดํ์ผ์ ์ํ ๊ฒ์ ์๋์ง๋ง ์ ํ ์ง์์ ํ์คํ ํฌํจํ๋ ๋น๋ ์คํฌ๋ฆฝํธ๋ ํด๋น ํด๋ ์ธ๋ถ์ ์์ต๋๋ค. ์์งํ ๋งํด์ ์ต๊ณ ์ IntelliSense๋ TypeScript์ด๊ธฐ ๋๋ฌธ์ ๋๋ค.
repo/
โข config/ << provide TS support, but don't build this directory
โจฝ webpack.config.ts
โข scripts/ << provide TS support, but don't build this directory
โจฝ release.ts
โข src/ << build this directory
โจฝ example.ts
โจฝ tsconfig.json
๋ด๊ฐ ์ฌ์ฉ ๊ทธ๋์ "rootDir": "src"
ํ์ธ ํ์ผ์ ์ง์๋์ด ์๋์ง ํ์ธํ๊ธฐ dist
ํ์ง dist/src
. ๋ฌผ๋ก TypeScript๋ ์ด ์ค์ ์ ๋ํด ๋ถํํ๋ ๊ฒ์ ์ข์ํ์ง๋ง Webpack์ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ์ค๋ฅ๊ฐ ๋ฐ์ํ์ง ์์ต๋๋ค.
๋๋ ๋ง์นจ๋ด ๊ทธ๊ฒ์ ๋ ๋ช ํํ๊ฒ ํ์ง ์๋ ๋ช ๊ฐ์ง ์ฝ๋ฉํธ ์์ด ์ด ํ๋๊ทธ๊ฐ ์ ํํ ์๋ฏธํ๋ ๋ฐ๋ฅผ ์ป์์ต๋๋ค. ์ด๊ฒ์ผ๋ก ์์ํฉ๋๋ค.
"files", "include", "exclude"์ ๊ฐ์ด tsc๊ฐ ์ปดํ์ผ์ ๊ณ ๋ คํ ํด๋์ ํ์ผ์ ์ค์ ํ๋ ์ต์ .
๊ทธ๋ ๋ค๋ฉด "rootDir"์ ๋ฌด์์ ์ํด ์ฌ์ฉํฉ๋๊น?
rootDir์ ์์ค ํ์ผ์ ๋ํ ๋๋ ํ ๋ฆฌ ๊ตฌ์กฐ(๊ณ์ธต ๊ตฌ์กฐ)์ ๋ฃจํธ์ด๋ฉฐ, tsconfig.json ๋๋ ํ ๋ฆฌ ๋๋ ์ง์ ๋ ๊ฒฝ์ฐ "outDir"์์ ์์ํ์ฌ ๋์ผํ ๋๋ ํ ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ๋ด๋ณด๋ด๋ ๋ฐ tsc๊ฐ ์ฌ์ฉํฉ๋๋ค. ๋ฐ๋ผ์ ์ด๊ฒ์ tsc๊ฐ "outDir"์ ๊ธฐ๋ณธ ๊ฒฝ๋ก๋ก ์ฌ์ฉํ๋ ๊ฒฝ๋ก๊ฐ ์๋๋๋ค. "outDir"์ tsc๊ฐ ์ถ๋ ฅ ํ์ผ์ ๋ด๋ณด๋ด๋ ๋ฃจํธ์ผ ๋ฟ์
๋๋ค.
์๋ฅผ ๋ค์ด Java ํ๋ก์ ํธ์ ์ด ๋๋ ํ ๋ฆฌ ๊ตฌ์กฐ๊ฐ ์๋ค๊ณ ๊ฐ์ ํด ๋ณด๊ฒ ์ต๋๋ค.
- src
- main
- java
- resources
- static
- js
- ts
test.ts
"include"์ "rootDir"์ ์๋์ ๊ฐ์ด ์ค์ ํ๋ฉด tsc๋ ๋ค์๊ณผ ๊ฐ์ด ์ถ๋ ฅ์ ์์ฑํฉ๋๋ค.
"include": "src/main/resources/static/ts" *
"rootDir": "." *
- src
- main
- java
- resources
- static
- js
- ts
test.js *
test.ts
"outDir"๋ ์๋์ ๊ฐ์ด ์ค์ ํ๋ฉด tsc๋ ๋ค์๊ณผ ๊ฐ์ด ์ถ๋ ฅ์ ์์ฑํฉ๋๋ค.
"include": "src/main/resources/static/ts"
"rootDir": "."
"outDir": "build" *
- build
- src
- main
- resources
- static
- ts
test.js *
- src
- main
- java
- resources
- static
- js
- ts
test.ts
์๋ง๋ "rootDir" ์ต์ ์ ์ค์ ํ๊ณ "outDir" ์ต์ ์ ์๋์ ๊ฐ์ด ๋ณ๊ฒฝํ์ฌ ์ด๊ฒ์ ๊ฐ๊ณ ์ถ์์ ๊ฒ์ ๋๋ค.
"include": "src/main/resources/static/ts"
"rootDir": "src/main/resources/static/ts" *
"outDir": "src/main/resources/static/js" *
- src
- main
- java
- resources
- static
- js
test.js *
- ts
test.ts
๋ฐ๋ผ์ "exclude" ์ต์ ์ ์ ์ธํ๊ณ ํ์ผ์ ๋ฒ์๋ฅผ ๋ค๋ฃจ์ง ์๋ "rootDir" ์ต์ ์ ์ค์ ํ๋ฉด "rootDir" ์ต์ ์ ๋ชฉ์ ์ ๋ง์ง ์๊ธฐ ๋๋ฌธ์ tsc๊ฐ ๋น๋์ ์คํจํฉ๋๋ค.
์, ๊ทธ๊ฒ์ ์์ ํ ๋์ ๋ช ๋ช ๊ดํ์ ๋๋ค. "rootOfStructureOfInputs"๋ ๊ทธ ๋ฐ์ ๊ฒ์ด์ด์ผํฉ๋๋ค. ๋ํ "outDir"์ "rootOfOutputs"์ฌ์ผ ํฉ๋๋ค.
SS์์ ๋ณด๋ ๊ฒ์ WebStorm ๋ฌธ์ ๊ฐ ์๋๋ผ TS DevServer์์ ๋ฐ์ํฉ๋๋ค.
๋ ๋ฒ์งธ๋ก ๊ถ์ฅ๋๋ ์์
ํ์ ์ฐ๋ ๊ธฐ์
๋๋ค. "ํต์ " ์์ค ํด๋์์ ์ ํํฉ๋๋ค. ๋๋์ฒด ๋๊ฐ ๊ทธ๊ฑธ ์ํด์ผ ํ๋์ง ๋ชจ๋ฅด๊ฒ ์ต๋๋ค. ์ด๋ฌํ ๊ฐ์ ธ์ค๊ธฐ๋ก ํ์ผ์ ์ปดํ์ผํ๋ฉด ๋ง์ ๋ฌธ์ ๊ฐ ๋ฐ์ํฉ๋๋ค.
๋๋ ๋ํ ์๋ํ๋ค :
"exclude": ["lib", "node_modules",
"..", "../..", "../../..", "../../../..", "../../../../..", "../../../../../.."
]
๋ฌธ์ ๋ ํด๊ฒฐํ์ง ๋ชปํ๋ค
@mhegazy ์ด ๋ฌธ์ ์ "์๋ํ ๋๋ก ์๋"์ด๋ผ๋ ๋ ์ด๋ธ์ ์ง์ ํ์ง๋ง ์ฌ์ค์ด ์๋๋๋ค. ๋ด ์คํฌ๋ฆฐ์ท์์ ๋ณผ ์ ์๋ฏ์ด tsc-server๋ ๊ฐ์ ธ์ค๊ธฐ ์ ์์ผ๋ก ๋ด rootDir(์ด ๊ฒฝ์ฐ mobiservice/src) ์ธ๋ถ์ ํ์ผ์ ์ ๊ณตํฉ๋๋ค. ์ ๊ฐ ๋ณด๊ธฐ์ ๋ฒ๊ทธ ๊ฐ๋ค์...
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
ใ ใ ใ ์ด๊ฒ ์ ๋ง ์๋ํ ๋๋ก ์๋ํ๋ ๊ฑด๊ฐ์? ๋ฐฉ๊ธ ์ด๊ฒ์ ๋ถ๋ช์ณค๊ณ , ๋ด ์์ค๊ฐ ๋ชจ๋ ํน์ ํด๋(
rootDir
๋ฅผ ํตํด)์ ์๋ค๊ณ typescript์ ๋งํ ๋ค์.ts
ํ์ฅ์๊ฐ ํด๋น ํด๋ ์ธ๋ถ์ ์์ต๋๋ค.์ด๊ฒ์ ์ ๋ง ์ค๋ฅ์ฒ๋ผ ๋๊ปด์ง๋๋ค. ์ปดํ์ผ๋ฌ์๊ฒ
rootDir
๋ฅผ ํตํด ์์ค๊ฐ ์๋ ์์น๋ฅผ ๋งํ๋ฉด ํด๋น ์ค์ ์ ์์ ํ ๋ฌด์ํ๊ณ ์ถ๋ ฅ ํด๋ ๊ตฌ์กฐ๋ฅผ ๋ณ๊ฒฝํด์๋ ์ ๋ฉ๋๋ค. ์๋ํ๋ฉด ๋ด๊ฐ ๋ญ๊ฐ ์๋ชปํ๋ค๊ณ ์๊ฐํ๊ธฐ ๋๋ฌธ์ ๋๋ค.rootDir
์๋ ํ์ผ์ ๋ฌด์ํด์ผ ํฉ๋๋ค. ๋๋ ๋ด๊ฐ ์ํ๋ ์ถ๋ ฅ ํด๋ ๊ตฌ์กฐ์ ์ ํ ์ผ์นํ์ง ์๋ ์ถ๋ ฅ์ ๊ณ์ ๋ด๋ณด๋ด์ง ์๊ณ ์์ ํ ์คํจํด์ผ ํฉ๋๋ค!๋๋ฅผ ๋ฐ๋ผ ์ค๋ ์ฌ๋์ ์ํด ๋ค์์ ๋น์ ์ด _์ค์ ๋ก_ ์ํ๋ ๊ฒ์ ํ ๊ฒ์ ๋๋ค.