2022. 8. 9. 19:16ㆍTypeScript
TCP를 이용한 socket echo message programming을 구현하던 도중 JavaScript 대신 TypeScript로 리팩토링 및 좀더 많은 기능을 넣는 추가적인 작업을 할 예정이다. 즉, TypeScript로는 socket echo message programming가 아닌 socket message programming을 구현 할 예정이다.
tsc tcp_echo_client.mts
일반적으로 위와 같이 TypeScript를 컴파일해주는 과정이 있다.
컴파일 한 후 생성된 JavaScript를 실행하여 돌리는 경우이지만 나는 추가적인 파일을 만드는 것이 싫어 ts-node라는 패키지를 설치하여 사용하였다.
그러면 아래와 같이 명령어를 사용해서 실행할 수 있다.
ts-node tcp_echo_client.mts
이 때, 아래의 에러가 발생하였다.
/usr/local/lib/node_modules/ts-node/src/index.ts:820
return new TSError(diagnosticText, diagnosticCodes);
^
TSError: ⨯ Unable to compile TypeScript:
error TS6046: Argument for '--module' option must be: 'none', 'commonjs', 'amd', 'system', 'umd', 'es6', 'es2015', 'es2020', 'es2022', 'esnext', 'node12', 'nodenext'.
at createTSError (/usr/local/lib/node_modules/ts-node/src/index.ts:820:12)
at reportTSError (/usr/local/lib/node_modules/ts-node/src/index.ts:824:19)
at createFromPreloadedConfig (/usr/local/lib/node_modules/ts-node/src/index.ts:835:36)
at phase4 (/usr/local/lib/node_modules/ts-node/src/bin.ts:469:44)
at bootstrap (/usr/local/lib/node_modules/ts-node/src/bin.ts:85:10)
at main (/usr/local/lib/node_modules/ts-node/src/bin.ts:54:10)
at Object.<anonymous> (/usr/local/lib/node_modules/ts-node/src/bin.ts:717:3)
at Module._compile (node:internal/modules/cjs/loader:1103:14)
at Object.Module._extensions..js (node:internal/modules/cjs/loader:1157:10)
at Module.load (node:internal/modules/cjs/loader:981:32) {
diagnosticCodes: [ 6046 ]
}
그리하여 tsconfig.json의 파일에 아래와 같이 설정을 추가하였다.
"ts-node": {"esm": true}
위의 설정은 "compilerOptions"에 넣는 것이 아닌 그냥 전체 중괄호에 삽입하면 된다.
하지만 아직 실행하여도 아래와 같은 에러가 발생한다.
/usr/local/lib/node_modules/ts-node/src/index.ts:859
return new TSError(diagnosticText, diagnosticCodes, diagnostics);
^
TSError: ⨯ Unable to compile TypeScript:
error TS6046: Argument for '--module' option must be: 'none', 'commonjs', 'amd', 'system', 'umd', 'es6', 'es2015', 'es2020', 'es2022', 'esnext', 'node12', 'nodenext'.
at createTSError (/usr/local/lib/node_modules/ts-node/src/index.ts:859:12)
at reportTSError (/usr/local/lib/node_modules/ts-node/src/index.ts:863:19)
at createFromPreloadedConfig (/usr/local/lib/node_modules/ts-node/src/index.ts:874:36)
at phase4 (/usr/local/lib/node_modules/ts-node/src/bin.ts:543:44)
at bootstrap (/usr/local/lib/node_modules/ts-node/src/bin.ts:95:10)
at Object.<anonymous> (/usr/local/lib/no
발생 원인이 버전 문제이거나 내부 모듈의 충돌인 것 같아 ts-node와 typescript를 삭제 후 아래의 명령어를 통하여 다시 설치하였다.
npm install ts-node --save-dev
npm install typescript -g
npm install typescript --save-dev
중간에 설치할 때, ERR가 뜨길래 sudo를 이용하여 설치하였다.
실행은 매우 잘 되었다.
그리하여도 아래와 같은 에러가 발생하였다. 실행은 되나 매우 거슬렸다.
그리하여 아래의 코드를 실행하여 보았다.
tsc test.mts
error TS2688: Cannot find type definition file for 'node 2'.
The file is in the program because:
Entry point for implicit type library 'node 2'
Found 1 error.
위와 같은 에러가 발생하였기에 모듈끼리 충돌을 일으켰다고 생각이 들었다.
그리하여 아래의 명령어를 이용하여 충돌 난 것을 확인하였다.
npm audit fix --force
npm WARN using --force Recommended protections disabled.
npm WARN audit Updating grpc to 1.3.0,which is a SemVer major change.
npm ERR! code ENOTEMPTY
npm ERR! syscall rename
npm ERR! path /Users/gojaemin/Desktop/progject/FSSN/node_modules/@grpc/proto-loader/node_modules/long
npm ERR! dest /Users/gojaemin/Desktop/progject/FSSN/node_modules/@grpc/proto-loader/node_modules/.long-ocOZNtoN
npm ERR! errno -66
npm ERR! ENOTEMPTY: directory not empty, rename '/Users/gojaemin/Desktop/progject/FSSN/node_modules/@grpc/proto-loader/node_modules/long' -> '/Users/gojaemin/Desktop/progject/FSSN/node_modules/@grpc/proto-loader/node_modules/.long-ocOZNtoN'
npm ERR! A complete log of this run can be found in:
npm ERR! /Users/gojaemin/.npm/_logs/2022-08-09T10_19_42_225Z-debug-0.log
역시 충돌이었다!!
node_modules을 모두 삭제하고 재설치 하였다. 그리하여 완전히 문제를 해결하였다.
코드를 짜는 것보다 환경 설정하는 것들이 어렵다. 이전에는 환경설정했던 것들을 까먹어 해결하는 데 애를 먹었기에 이제는 에러가 발생하면 반드시 바로바로 작성할 예정이다. 이렇게 작성되는 것들이 또 다른 개발자에게 도움이 되었으면 한다.
'TypeScript' 카테고리의 다른 글
[TypeScript] BlockChain(0) - 프로로그 (0) | 2022.08.16 |
---|