본문 바로가기
프로젝트/node.js

[프로젝트] node.js / npm 버전 바꾸기

by 왕자두 2023. 6. 12.

node.js로 서버 구축을 한 후, 이를 띄우기 위해서 pm2를 사용했다. ec2 내부에 docker 띄우려고 했었는데 시간상 어려워서 일단 pm2로 띄워둔 상태고 나중에 docker 사용하게 되면 그때 또 포스팅할 예정이다.

pm2를 사용하던 중 프론트 팀에서 서버 쪽에서 연결이 끊긴 것 같다는 소식을 전했다. 그래서

pm2 logs

를 찍어서 로그 찍힌 내용을 확인해보니

/home/ubuntu/.pm2/logs/app-error.log last 15 lines:
0|app      | /home/ubuntu/Server/node_modules/mysql2/node_modules/lru-cache/dist/cjs/index.js:359
0|app      |     #initializeTTLTracking() {
0|app      |                           ^
0|app      |
0|app      | SyntaxError: Unexpected token '('
0|app      |     at wrapSafe (internal/modules/cjs/loader.js:915:16)
0|app      |     at Module._compile (internal/modules/cjs/loader.js:963:27)
0|app      |     at Object.Module._extensions..js (internal/modules/cjs/loader.js:1027:10)
0|app      |     at Module.load (internal/modules/cjs/loader.js:863:32)
0|app      |     at Function.Module._load (internal/modules/cjs/loader.js:708:14)
0|app      |     at Module.require (internal/modules/cjs/loader.js:887:19)
0|app      |     at Module.Hook._require.Module.require (/usr/local/lib/node_modules/pm2/node_modules/require-in-the-middle/index.js:101:39)
0|app      |     at require (internal/modules/cjs/helpers.js:74:18)
0|app      |     at Object.<anonymous> (/home/ubuntu/Server/node_modules/mysql2/node_modules/lru-cache/dist/cjs/index-cjs.js:5:36)
0|app      |     at Module._compile (internal/modules/cjs/loader.js:999:30)

이와 같은 오류가 발생했다. 당연하지만 puppeteer 을 사용했는데 모듈을 설치하지 않아서 난 오류였다. 그래서

npm install --save

를 실행해서 모듈을 설치하려고 했지만

npm WARN EBADENGINE Unsupported engine {
npm WARN EBADENGINE   package: '@puppeteer/browsers@1.4.0',
npm WARN EBADENGINE   required: { node: '>=16.0.0' },
npm WARN EBADENGINE   current: { node: 'v12.22.9', npm: '8.5.1' }
npm WARN EBADENGINE }

이와 같은 오류가 꽤 많이 떠있는 것을 볼 수 있었고 로그를 다시 찍어봐도 설치가 안된 것을 확인할 수 있었다. 프론트 팀께 여쭤보니 역시나 연결이 안된 게 맞았고 관련 오류를 찾아보니 요구하는 node의 버전과 맞지 않아서 생긴 문제였다.

 

Node.js 버전 변경하기

1. npm 캐시 제거하기

npm cache clean --force
npm cache verify

npm cache verify는 cache 폴더의 내용을 확인하고, 가비지 데이터들을 삭제하고 무결성을 확인하는 명령어라고 한다.

 

2. n 설치하기 (sudo 안하면 오류남)

sudo npm install -g n

 

3. node 버전 업데이트 하기 (sudo 안하면 오류남)

sudo n lts

 

4. npm 버전 확인하기

npm -v

근데 오류가 났다..

Error: Cannot find module 'semver'
Require stack:
- /usr/share/nodejs/npm/lib/utils/unsupported.js
- /usr/share/nodejs/npm/lib/cli.js
- /usr/share/nodejs/npm/bin/npm-cli.js
    at Module._resolveFilename (node:internal/modules/cjs/loader:1075:15)
    at Module._load (node:internal/modules/cjs/loader:920:27)
    at Module.require (node:internal/modules/cjs/loader:1141:19)
    at require (node:internal/modules/cjs/helpers:110:18)
    at Object.<anonymous> (/usr/share/nodejs/npm/lib/utils/unsupported.js:2:16)
    at Module._compile (node:internal/modules/cjs/loader:1254:14)
    at Module._extensions..js (node:internal/modules/cjs/loader:1308:10)
    at Module.load (node:internal/modules/cjs/loader:1117:32)
    at Module._load (node:internal/modules/cjs/loader:958:12)
    at Module.require (node:internal/modules/cjs/loader:1141:19) {
  code: 'MODULE_NOT_FOUND',
  requireStack: [
    '/usr/share/nodejs/npm/lib/utils/unsupported.js',
    '/usr/share/nodejs/npm/lib/cli.js',
    '/usr/share/nodejs/npm/bin/npm-cli.js'
  ]
}

Node.js v18.16.0

node.js 버전이 먹히기는 했는데 도대체 어떤 module이 없다는 건지.... 그래서 해당 오류를 찾아봤더니 node를 재설치하라고 되어있어서 node를 아예 지우고 재설치하기로 했다.

 

node/npm 재설치 하기

1. node.js 제거: 디렉터리와 bash에 있는 내용을 모두 삭제

sudo rm -rf /usr/local/bin/npm /usr/local/share/man/man1/node* /usr/local/lib/node_modules/ ~/.npm
sudo rm -rf /usr/local/include/node*
sudo rm -rf /usr/local/bin/node*
sudo apt-get purge nodejs npm

마지막 줄의 purge 명령어가 뭔지 찾아봤는데 purge의 경우, 패키지와 그 패키지의 환경설정을 모두 삭제하는 기능이었다. apt-get remove와 차이점은 remove의 경우, 패키지만 삭제하고 환경설정은 삭제하지 않는데 apt-get purge(= apt purge)를 사용하게 되면 환경설정도 삭제한다. 

 

2. node.js 설치

sudo apt install -y nodejs npm
sudo npm cache clean -f

 

3. node / npm 업데이트

sudo npm install npm
sudo npm install -g n
sudo n stable

 

4. node / npm 버전 확인

node -v
npm -v

이렇게 하고 나니까 제대로 출력되는 것을 확인할 수 있었고 

다시 모듈 설치를 위해

npm install

명령어를 사용하니까 제대로 실행이 되며 모듈이 오류 없이 설치되는 것을 확인할 수 있었다. 이때 서버를 키기 위해

pm2 start app.js

를 실행하였지만 pm2 명령어를 찾을 수 없다는 오류가 나서 다시 pm2를 설치해주고 시작을 해줬더니 제대로 실행되고 있는 것을 확인할 수 있었다. 여기서 만약 pm2 로 돌아가는 프로세스 상태들을 보고 싶다면

pm2 status

를 사용하면 된다.

 

출처 

https://mine-it-record.tistory.com/664

 

[Node.js] Node와 NPM 버전 확인 및 최신 버전 업데이트

오랜만에 공부 시작 겸 블로그를 작성한다. 그동안 시간이 너무 없었지만 틈내서 작성한 게 12월 1일인가 그렇다. 마침 급한일은 다 처리를 했으며, 다시 공부할 겸 가볍게 nodejs와 npm 버전 업데이

mine-it-record.tistory.com

https://codechacha.com/ko/linux-apt-purge-vs-remove/

 

apt remove, purge, autoremove 명령어 차이점

apt로 Linux의 패키지를 삭제할 때 apt-get remove package_name와 apt-get purge package_name 명령어가 있습니다. 모두 패키지를 삭제하는 명령어지만 약간 차이가 있습니다. remove 명령어는 패키지는 삭제하고

codechacha.com

https://code-hoon.tistory.com/97

 

[ Node.js ] npm Error: Cannot find module 'semver' 에러 해결 하는 방법

Error: You are using an unsupported version of Node. Please update to at least Node v12.14 at assertSupportedNodeVersion Error: You are using an unsupported version of Node. Please update to at least Node v12.14 at assertSupportedNodeVersion 그래서 업

code-hoon.tistory.com

https://amkorousagi-money.tistory.com/entry/Error-Cannot-find-module-semver

 

Error: Cannot find module 'semver'

에러 내용 node:internal/modules/cjs/loader:933 const err = new Error(message); ^ Error: Cannot find module 'semver' Require stack: - /usr/share/nodejs/npm/lib/utils/unsupported.js - /usr/share/nodejs/npm/lib/cli.js - /usr/share/nodejs/npm/bin/npm-cli.j

amkorousagi-money.tistory.com