ํ์ ์คํฌ๋ฆฝํธ ๋ฒ์ : 2.2.1
Visual Studio 2015 ์ ๋ฐ์ดํธ 3์ ์ฌ์ฉํ ๋ ๋ค์๊ณผ ๊ฐ์ ์ค๋ฅ ๋ชฉ๋ก์ ์๋ฐฑ ๊ฐ์ ์ค๋ฅ๊ฐ ํ์๋ฉ๋๋ค.
์ ๋ ฅ ํ์ผ์ ๋ฎ์ด์ฐ๋ฏ๋ก 'C:/{{my-project}}/node_modules/buffer-shims/index.js' ํ์ผ์ ์ธ ์ ์์ต๋๋ค.
ํญ์ ์ด๋ฐ ๋ชจ์ต์ ๋๋ค. ์ค์ ๋ก ๋น๋๋ฅผ ๋ฐฉํดํ์ง ์์ผ๋ฉฐ ๋ชจ๋ ๊ฒ์ด ์ ์๋ํ์ง๋ง ์ค๋ฅ ๋ชฉ๋ก์ ์ฐ๋งํ๊ณ ๋ฐ์ํ์ ๋ "์ค์ " ์ค๋ฅ๋ฅผ ์ฐพ๊ธฐ๊ฐ ์ด๋ ต์ต๋๋ค.
๋ด 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์ ์ด ์ง๋ฌธ์ ๊ฒ์ํ์ต๋๋ค. )_
๋๋ ๋ํ ๊ฐ์ ๋ฌธ์ ๊ฐ ๋ฐ์ํฉ๋๋ค.
--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
๋ ๋ฒ์งธ๋ก ์คํํ ๊ฒ์
๋๋ค.
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 ์ฌํ ํ๋ก์ ํธ๊ฐ ์๋ค๋ฉด ์ดํด๋ณด๊ณ ์ถ์ต๋๋ค.
๋๋ ๋ํ ๊ฐ์ ๋ฌธ์ ์ ์ง๋ฉดํ๊ณ ์์ต๋๋ค. ๋ค์์ ์ค๋ฅ์
๋๋ค.
๊ทธ๋ฆฌ๊ณ ์ด๊ฒ์ ๋ด tsconfig.json์
๋๋ค.
์ ๋ typescript๋ฅผ ์ ํ ์ฌ์ฉํ์ง ์๊ธฐ ๋๋ฌธ์ ๋ฐฉ๊ธ ๋น๋๋ฅผ ๊ฑด๋๋ฐ๊ธฐ ์ํด tsconfig๋ฅผ ๋ง๋ค์์ต๋๋ค. ๋ํ target=ES6์ ์ ํํด์ผ ํ์ต๋๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด ๋ค๋ฅธ ์ค๋ฅ๊ฐ ๋ฐ์ํ์ต๋๋ค.
tsconfig.json์ด ํ๋ก์ ํธ์ ์ผ๋ถ์ ๋๊น? ์ฝํ ์ธ ์ ํ์ด "์ฝํ ์ธ "์ธ์ง ํ์ธํ ์ ์์ต๋๊น? ๊ทธ๋ ๋ค๋ฉด ํ๋ก์ ํธ๋ฅผ ๊ณต์ ํ ์ ์์ต๋๊น?
@mhegazy ์๋ ํ์ธ์, ์, tsconfig.json์ด ํ๋ก์ ํธ์ ํฌํจ๋์ด ์์์ ํ์ธํ ์ ์์ต๋๋ค.
ํ์ง๋ง ์ฃ์กํฉ๋๋ค. ์ด๋ค "์ฝํ ์ธ ์ ํ"์ ๋ง์ํ์๋์ง ๋ชจ๋ฅด๊ฒ ์ต๋๋ค. ๋ช ํํ ๋ง์ํด ์ฃผ์๊ฒ ์ต๋๊น?
ํ๋ก์ ํธ๋ฅผ ๊ณต์ ํ ์ ์์ต๋๋ค.
๋ด ํ๋ก์ ํธ์์ tsconfig ํ์ผ์ด ํ๋ก์ ํธ ํ์ผ์ ํฌํจ๋์ด ์๊ณ ์ฝํ ์ธ ๋ก ๋์ด๋์ด ์์์ ํ์ธํ ์๋ ์์ต๋๋ค.
@max-favilli ๋ด ์๊ฐ์ @mhegazy ๋ "์ฝํ ์ธ ์ ํ"์ ๋ํด ๋งํ ๋ "๋น๋ ์์ "์ ์๋ฏธํฉ๋๋ค.
์๋ฃจ์ ํ์๊ธฐ์์ tsconfig.json์ ์ ํํฉ๋๋ค. ์์ฑ ์ฐฝ์ ๋ถ๋ฌ์ต๋๋ค(๊ธฐ๋ณธ์ ์ผ๋ก F4 ํค). Build Action ์์ฑ์ด ์์ ๊ฒ์ ๋๋ค.
๊ฐ์ฌํฉ๋๋ค @kevindqc , @mhegazy yes "Build Action"์ด "content"๋ก ์ค์ ๋์์ต๋๋ค
๋ค์์ ์ํํ๊ธฐ ์ํด ๊ฐ์ ํ๋ก์ ํธ ๊ตฌ์กฐ๋ฅผ ๋์ ๊ณต์ ํ ์ ์์ต๋๊น?
Tools
> Options
> Text Editor
> TypeScript
> Project
๋ก ์ด๋ํ์ฌ Display Virtual Projects when no Solution is loaded
;TypeScript Virtual Project
๋ผ๋ ์ด๋ฆ์ ์ ๋
ธ๋๊ฐ ํ์๋์ด์ผ ํฉ๋๋ค.@mhegazy ์ด๋ ๊ฒ?
๋์์ ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค.
๋๋ ๊ฐ์ ๋ฌธ์ ๋ฅผ ์๊ณ ์์ด. ํ๋ก์ ํธ๋ฅผ ๊ณต์ ํ ์๋ ์์ง๋ง ์ต๋ํ ๋ง์ ์ ๋ณด๋ฅผ ์ ๊ณตํ๋๋ก ๋ ธ๋ ฅํ๊ฒ ์ต๋๋ค.
.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
๋ฅผ ์คํํ๋ฉด ์ค์ ์ด ๋์ด๋จ)? ๊ทธ๋ ์ง ์์ ๊ฒฝ์ฐ ๋ก๊ทธ๊ฐ ๊ธฐ๋ก๋ ํด๋๊ฐ ์ด๋ฏธ ์กด์ฌํฉ๋๋ค(๋ก๊ฑฐ๋ ์กด์ฌํ์ง ์๋ ๋๋ ํ ๋ฆฌ๋ฅผ ์์ฑํ์ง ์์ต๋๋ค). ๊ทธ ์ธ์๋ ๊ฒฝ๋ก์ ๋ฐฑ์ฌ๋์๋ณด๋ค ์ฌ๋์๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ๋ ์์ ํฉ๋๋ค.
:(
@billti ์ข์, ๋ฐฉ๊ธ ํ์ธํ๊ณ ๋ก๊ทธ ํ์ผ์ด ์ด์ ๊ฑฐ๊ธฐ์ ์์ต๋๋ค. ์ฌ๊ธฐ์ ์ฒจ๋ถ๋์ด ์์ต๋๋ค.
tss-log.zip
๊ฐ์ฌ ํด์. ๋๋ ๊ทธ ๋ก๊ทธ๋ฅผ ์ดํด๋ณด์๊ณ ๊ทธ ์์ ์๋ ์ด๋ค ํธ์ถ์์๋ ๋ณด๊ณ ๋ ์ค๋ฅ๋ฅผ ๋ณด์ง ๋ชปํ์ต๋๋ค. ์ด ๋ก๊ทธ๊ฐ ๋ค๋ฃจ๋ ์๊ฐ ํ๋ ์์ ์ค๋ฅ๊ฐ ํ์คํ ๋ฐ์ํ์ต๋๊น?
@billti ์, ์ค๋ฅ๊ฐ ํญ์ ๋ฐ์ํ๊ณ ์์ต๋๋ค.
๊ทธ๋ค์ ์๊ตฌ์ ์ผ๋ก ๊ฑฐ๊ธฐ์ ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋ชจ๋ ๋จ์ผ ๋น๋์์ ์๋ก ๊ณ ์ณ์ก์ต๋๋ค.
์๋ชป๋ ๋ณ์ ์ ์ธ๊ณผ ๊ด๋ จ๋ ๋ชจ๋ ์ค๋ฅ(๋ค์ ๋ฆด๋ฆฌ์ค์ ๋ํด ์ด๋ฏธ ์์ ๋ ๋ณ๋์ ๋ฌธ์ ). ์ด ๋ฌธ์ ๋ ์์ ์ ๋ชฉ๊ณผ ์คํฌ๋ฆฐ์ท๋น ์ฝ 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 ๊ฐ์ ํ๋ก์ ํธ๋ฅผ ๊ฒ์ํ ์ฌ๋์ด ๋ค๋ฅธ ์ค๋ฅ๋ฅผ ๊ฐ์ง ์ฌ๋์ด์์ผ๋ฏ๋ก ๋์์ด ๋์ง ์์์ผ๋ฆฌ๋ผ ์๊ฐํฉ๋๋ค. ์ฌ๊ธฐ ๋ด ๊ฒ์
๋๋ค:
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
ํ์ผ์ ๊ฐ๊ฒ ๋์์ต๋๋ค.
ํด๊ฒฐ์ฑ
์ 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 ํ์ผ์ ์์ฑ๋์ง ์์ง๋ง ์ด์จ๋ ํ์ํ์ง ์์ต๋๋ค.
๋น์ทํ ์ค๋ฅ ๋ฉ์์ง๋ฅผ ๊ฒ์ํ์ฌ ์ฌ๊ธฐ์ ์จ ์ฌ๋์๊ฒ ๋ด ๋ฐ๊ฒฌ์ ๊ณต์ ํ๊ฒ ์ต๋๋ค.
allowJs: true
๋ฅผ ์ ๊ฑฐํ๊ฑฐ๋ CLI ์ต์
์์ --allow-js
์ ๊ฑฐํ์ญ์์ค.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 ํ์ผ์ ๋ฃ๊ณ ๊ฒฝ๋ก๋ฅผ ๋ณ๊ฒฝํ๋ ๊ฒ์
๋๋ค. ๋๋ ๋ํ ๊ทธ๊ฒ์ด ์๋ํ์ง ์์ ๊ฒฝ์ฐ ์ต์
์์ ๋ฒ์ด๋ฉ๋๋ค.
์ํ์ ๋ง์น:
outDir
-> ์๋์.allowJs: false
-> ์๋์..d.ts
์ ์ธ -> ์๋๋๋ค.noEmit: true
-> ์๋๋๋ค.์ด ์ค๋ ๋์ ๋ชจ๋ ์ ์์ ์๋ํ์ต๋๋ค. VSCode ์ค๋ฅ๊ฐ ๊ณ์๋ ๋ฟ๋ง ์๋๋ผ ๋ ์ด์ ์กด์ฌํ์ง ์๋ ํ์ผ์ ์ฐธ์กฐํฉ๋๋ค. ๐คทโโ๏ธ
์ํ์ ๋ง์น:
outDir
-> ์๋์.allowJs: false
-> ์๋์..d.ts
์ ์ธ -> ์๋๋๋ค.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"๋ฅผ ์ ๊ฑฐํ๋ฉด ํด๊ฒฐ๋์์ต๋๋ค.
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
๋๋ฅผ ์ํ ํด๊ฒฐ์ฑ ์ ์ฐพ์์ต๋๋ค. ์ ๊ฒฝ์ฐ์๋
files
๋ฐฐ์ด์ ์ง์ ํ์ง ์๊ณoutDir
๋ฐrootDir
๋ฅผ ์ฌ์ฉํ์ต๋๋ค.outDir
์ ๊ฒฝ๋ก๋ฅผexclude
๋ฐฐ์ด์ ์ถ๊ฐํ๋ฉด ๋ชจ๋ ๊ฒ์ด ์ ์์ ์ผ๋ก ์๋ํ๋ ๊ฒ ๊ฐ์ต๋๋ค.์๋ง๋ TypeScript๋
outDir
๋ก ์ค์ ๋์ด ์์ด๋dist
ํด๋์ ๋ด์ฉ์ ๊ฐ์ํ๊ณ ์์ ๊ฒ์ ๋๋ค.