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
原因は、
- このエラーが出る前くらいにnpmから要求される
node-gyp
というライブラリを動かす為のネイティブ用ライブラリが足りていないから、らしい。 - bcryptのversionが悪い
参考:
- https://blog.cloud-acct.com/posts/u-docker-nuxtjs-vuetify-install/
- https://qiita.com/take_o/items/b6fca800932bcb998f3c
解決方法としては、
- 「
make
,gcc
,g++
,python
をコンテナにインストール」 - 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