일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- BFS
- 코딩테스트
- 2748 자바
- 10810 자바
- 자바 2164
- 10813 자바
- dfs
- 백준 10866 자바
- 파이썬
- 백준
- 자바
- IAM 사용자
- 그리디
- 백준 2346 자바
- 티움투어
- 자바 2346
- 2798 자바
- 1764 자바
- 10807 자바
- 백준 1764 자바
- 백준 28278 자바
- 데보션영 3기
- IAM Identity Center
- 자바 1003
- 자바 10866
- 28278 스택 2
- 자바 28278
- 2346 풍선 터뜨리기
- 2164 자바
- 1010 자바
- Today
- Total
자두의 데브로그
[프로젝트] node.js / npm 버전 바꾸기 본문
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
'프로젝트 > node.js' 카테고리의 다른 글
[프로젝트] 네이버 클라우드로 서버 구축(2) (0) | 2023.06.19 |
---|---|
[프로젝트] 네이버 클라우드로 서버 구축하기(1) (0) | 2023.06.19 |
[프로젝트] node.js에서 params로 id 받기 (0) | 2023.06.18 |
[프로젝트] puppeteer 사용 오류 해결 (0) | 2023.06.17 |
[프로젝트] ec2에서 node.js 연결하기 (0) | 2023.06.14 |