[TypeScript] Node.js 환경설정 오류 해결

2022. 8. 9. 19:16TypeScript

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