概要
表題にも書いた通り、Laravel9にてログイン機能を実装しました。
laravel9では、composer require laravel/ui
、php artisan ui bootstrap --auth
のコマンド叩く事でログイン機能が簡単に作成できるみたいです。ただ、これらのコマンドを使用するには、node.js
関連をインストールする必要があり、そこで凄く詰まったので、その修正方法を説明したいと思います。
修正方法
laravel9では、php artisan ui bootstrap --auth
のコマンドを叩いてログイン機能を作る場合、node.js
が必要(bootstrapの影響だと思われる)との事です。その為、dockerfile
にnode.js
関連をインストールするコードを付け加えました。下記がそのdockerfile
です
FROM php:8.1.13-bullseye
RUN apt-get update && apt-get install -y \
git \
vim \
zip \
unzip \
autoconf \
gcc \
g++ \
make \
curl \
gnupg \
nodejs \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/*
RUN curl -fsSL https://deb.nodesource.com/setup_10.x | bash -
RUN apt-get install -y nodejs
RUN npm install npm@latest -g
RUN docker-php-ext-install bcmath pdo_mysql
RUN cd /usr/bin \
&& curl -s http://getcomposer.org/installer | php \
&& ln -s /usr/bin/composer.phar /usr/bin/composer
RUN mkdir /app
WORKDIR /app
CMD ["/app/start.sh"]
ただ、これだけでは正常に動作しない事を分かっていたので、コンテナー内に入りnpm install && npm run dev
を叩きましたがそれでも正常に動作しませんでした。その時表示されたエラー分が下記の状態となります。
ERROR: npm v9.2.0 is known not to run on Node.js v12.22.12. You'll need to
upgrade to a newer Node.js version in order to use this version of npm. This
version of npm supports the following node versions: `^14.17.0 || ^16.13.0 ||
>=18.0.0`. You can find the latest version at https://nodejs.org/.
ERROR:
/usr/local/lib/node_modules/npm/lib/utils/exit-handler.js:22
const hasLoadedNpm = npm?.config.loaded
^
SyntaxError: Unexpected token '.'
at wrapSafe (internal/modules/cjs/loader.js:915:16)
at Module._compile (internal/modules/cjs/loader.js:963:27)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:1027:10)
at Module.load (internal/modules/cjs/loader.js:863:32)
at Function.Module._load (internal/modules/cjs/loader.js:708:14)
at Module.require (internal/modules/cjs/loader.js:887:19)
at require (internal/modules/cjs/helpers.js:74:18)
at module.exports (/usr/local/lib/node_modules/npm/lib/cli.js:76:23)
at Object.<anonymous> (/usr/local/lib/node_modules/npm/bin/npm-cli.js:2:25)
at Module._compile (internal/modules/cjs/loader.js:999:30)
エラー文を見ると、npm v9.2.0
とNode.js v12.22.12
のバージョンでは、正常に動作しないとエラー文が言うてますので、node.js
のバージョンを上げるようにdockerfileの修正を試みました。
しかし全然、node.js
のバージョンが上がらない為、途方に暮れていた時、Ubuntu 20.04にNode.jsをインストールする方法 の記事を眺めていたら、node.js
のバージョンの上げ方のヒントが書かれていたので、早速試して見ました。
ちなみに、node.js
のバージョンが上がらなかった根本の原因は下記の記述でした。
RUN curl -fsSL https://deb.nodesource.com/setup_10.x | bash -
setup_10.x
と書いてあったので、かなり古いnode.js
のバージョンをインストールしていたみたいです。
NodeSource Node.js Binary Distributionsを確認して、指定のバージョンのnode.js
を取り込む方法を見つけ、dockerfile
に追加しました。
下記が修正したコードとなります。
RUN curl -fsSL https://deb.nodesource.com/setup_18.x | bash -
少しの修正でしたが、凄く勉強になりました。
感想
バージョン管理はシビアに行わないといけないと改めて痛感しました。この教訓を生かして、バージョン管理関連の問題はサクッと修正していきたいと思います。