1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

docker、Laravel9環境にて、認証機能(ログイン機能)を作成する際、node.jsの問題が発生したので、その問題を修正する方法

Last updated at Posted at 2023-01-03

概要

表題にも書いた通り、Laravel9にてログイン機能を実装しました。
laravel9では、composer require laravel/uiphp artisan ui bootstrap --authのコマンド叩く事でログイン機能が簡単に作成できるみたいです。ただ、これらのコマンドを使用するには、node.js 関連をインストールする必要があり、そこで凄く詰まったので、その修正方法を説明したいと思います。

修正方法

laravel9では、php artisan ui bootstrap --authのコマンドを叩いてログイン機能を作る場合、node.jsが必要(bootstrapの影響だと思われる)との事です。その為、dockerfilenode.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.0Node.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 -

少しの修正でしたが、凄く勉強になりました。

感想

バージョン管理はシビアに行わないといけないと改めて痛感しました。この教訓を生かして、バージョン管理関連の問題はサクッと修正していきたいと思います。

参考資料

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?