관련지식
node.js, n, sqlite3

기존에 sqlite3를 node v8 환경에서 잘 사용하고 있었지만 node 버전을 업그레이드 할 필요가 있었습니다.

기존 사용환경

node.js : 8.11.1
sqlite3 : 3.1.13
https://www.npmjs.com/package/sqlite3

모든 버전을 테스트해보진 못했고 제가 설치한 버전으로 작성하겠습니다.

sqlite3 는 현재 4.1.0 입니다. sqlite3는 4.X 버전부터 node v10을 지원하는것으로 알고 있으므로 최신버전으로 업데이트 하겠습니다.

  1. npm install sqlite3

node.js 설치는 n 을 이용하면 매우 편리합니다. 따라서 n 을 설치해서 진행하겠습니다. root 사용자로 진행할 경우 sudo 명령어를 삭제하면 됩니다.

  1. sudo npm install n -g

n 명령어로 노드를 설치합니다. 버전 10.16.3 을 설치하겠습니다.

  1. sudo n v10.16.3

정상적으로 설치가 되었는지 확인하려면 node -v를 입력하면 됩니다. 아래와 같은 형태로 보이면 정상압니다.

  1. root@nodejs:/# n ls
  2. node/8.11.1
  3. node/10.16.3
  4. root@nodejs:/# node -v
  5. v10.16.3
  6. `

이제 어플리케이션을 실행하려고 하면 아래와 같이 오류가 발생할것입니다.

  1. Error: Cannot find module '/nodejs/node_modules/sqlite3/lib/binding/node-v64-linux-x64/node_sqlite3.node'
  2. at Function.Module._resolveFilename (internal/modules/cjs/loader.js:636:15)
  3. at Function.Module._load (internal/modules/cjs/loader.js:562:25)
  4. at Module.require (internal/modules/cjs/loader.js:692:17)
  5. at require (internal/modules/cjs/helpers.js:25:18)
  6. at Object.<anonymous> (/nodejs/node_modules/sqlite3/lib/sqlite3.js:4:15)
  7. at Module._compile (internal/modules/cjs/loader.js:778:30)
  8. at Object.Module._extensions..js (internal/modules/cjs/loader.js:789:10)
  9. at Module.load (internal/modules/cjs/loader.js:653:32)
  10. at tryModuleLoad (internal/modules/cjs/loader.js:593:12)
  11. at Function.Module._load (internal/modules/cjs/loader.js:585:3)

노드 버전이 바뀌었기 때문에 현재 버전으로 다시 빌드해야 됩니다. 빌드를 시작하기 전에 실행중인 node.js 어플리케이션이 있다면 먼저 종료합니다. 그후 npm rebuild 을 입력합니다. 그럼 빌드가 진행되며 아래와 같이 많은 메시지가 보일것입니다.

  1. user1@nodejs:/nodejs$ npm rebuild
  2. > level@4.0.0 postinstall /nodejs/node_modules/level
  3. > opencollective-postinstall || exit 0
  4. Thank you for using level!
  5. If you rely on this package, please consider supporting our open collective:
  6. > https://opencollective.com/level/donate
  7. > leveldown@4.0.2 install /nodejs/node_modules/leveldown
  8. > prebuild-install || node-gyp rebuild
  9. > nodejieba@2.3.1 install /nodejs/node_modules/nodejieba
  10. > node-gyp rebuild
  11. make: Entering directory '/nodejs/node_modules/nodejieba/build'
  12. CXX(target) Release/obj.target/nodejieba/lib/index.o
  13. CXX(target) Release/obj.target/nodejieba/lib/nodejieba.o
  14. SOLINK_MODULE(target) Release/obj.target/nodejieba.node
  15. COPY Release/nodejieba.node

이제 완료입니다. 어플리케이션을 구동해서 잘 실행되는지 확인해보시면 됩니다. 만약 빌드과정에서 오류가 난다면 node_modules 경로에 있는 모든 파일을 삭제 -> npm install 을 하신후 실행해보시기 바랍니다.