tk_zawa Blog

bcrypt@v5.0.0がloader.jsによるエラーで利用できない問題とその解決方法

November 01, 2020

半年前に作ったWebシステムで認証用に使っていたbcrypt.jsを、
その半年後に同じバージョン(v5.0.0)で使おうとすると以下のようなぱっと見原因不明のエラーが出てしまい詰まってしまっていた。。
(どちらもnode-alpineイメージ(前者はバージョン指定せず

internal/modules/cjs/loader.js:1025
  return process.dlopen(module, path.toNamespacedPath(filename));
                 ^

Error: Error loading shared library /usr/src/app/node_modules/bcrypt/lib/binding/napi-v3/bcrypt_lib.node: Exec format error

原因は、

  1. このエラーが出る前くらいにnpmから要求されるnode-gypというライブラリを動かす為のネイティブ用ライブラリが足りていないから、らしい。
  2. bcryptのversionが悪い

参考:

解決方法としては、

  1. make, gcc, g++, pythonをコンテナにインストール」
  2. bcryptをrebuild

それを踏まえて構成したDockerfileを以下に記述する。(Nest.js用に作成)

Dockerfile
FROM node:12.13-alpine

WORKDIR /usr/src/app

COPY package*.json ./

RUN apk add --no-cache make gcc g++ python && \
  npm install && \
  npm rebuild bcrypt --build-from-source && \
  apk del make gcc g++ python

COPY . .

RUN npm run build