Laravel

Laradock環境構築時のエラー(2020年11月遭遇)

こんにちはジャムです。

久しぶりにLaradockでLaravel環境を構築した際に2つのエラーに遭遇したので、現象と対策を紹介します。

問題1

現象

laradockでnginxとmysqlをビルド&コンテナ起動をするために、コマンド叩きました!

$ docker-compose up -d nginx mysql

しかし、次のようなエラーが発生

ERROR: Service 'workspace' failed to build : The command 
'/bin/sh -c if [ ${INSTALL_AST} = true ]; then    
 if [ $(php -r "echo PHP_MAJOR_VERSION;") != "5" ]; then 
        printf "\n" | pecl -q install ast-${AST_VERSION} &&
         echo "extension=ast.so" >> /etc/php/${LARADOCK_PHP_VERSION}/mods-available/ast.ini 
&&         phpenmod -v ${LARADOCK_PHP_VERSION} -s cli ast     ;fi ;fi' returned a non-zero code: 1

内容は、workspaceのビルドに失敗しました、そのコマンドは/bin/sh…ということです。astのインストールができなかったとのことです。

対策

astはPHPの解析用の拡張機能みたいなので、今回はインストールを無効にする事で対策としました。

laradockの.envファイル179行目にastをインストールするかを変更できますので、falseにする事でビルドできました!

- WORKSPACE_INSTALL_AST=true
+ WORKSPACE_INSTALL_AST=false

もしかしたら、バージョンダウンとかアップとかでも改善可能?とも思いましたが、今回は試していません。

問題2

現象

今回はlaravelのフロントページにvueを使うので、npm installを実施後、npm ru devでコンパイルしようとすると下記のエラーに遭遇

[webpack-cli] Invalid configuration object. Webpack has been initialized using a configuration object that does not match the API schema.
 - configuration.module.rules[10] has an unknown property 'loaders'. These properties are valid:
   object { compiler?, dependency?, descriptionData?, enforce?, exclude?, generator?, include?, issuer?, loader?, mimetype?, oneOf?, options?, parser?, realResource?, resolve?, resource?, resourceFragment?, resourceQuery?, rules?, sideEffects?, test?, type?, use? }
   -> A rule description with conditions and effects for modules.

内容を見ると、webpack-cliのwebpackに不明なloaderというプロパティがあるよ、とのこと。

対策

いろいろ調べましたが、バージョンを指定することで解決しました。

「webpack」,「webpack-cli」,「webpack-dev-server」を下記バージョンにしました。

    "devDependencies": {
        "axios": "^0.19",
        "bootstrap": "^4.0.0",
        "cross-env": "^7.0",
        "jquery": "^3.2",
        "laravel-mix": "^5.0.1",
        "lodash": "^4.17.19",
        "popper.js": "^1.12",
        "resolve-url-loader": "^3.1.2",
        "sass": "^1.20.1",
        "sass-loader": "^8.0.0",
        "vue": "^2.5.17",
        "vue-template-compiler": "^2.6.10",
 +       "webpack": "^4.35.3",
 +     "webpack-cli": "^3.3.6",
 +     "webpack-dev-server": "^3.7.2"
    },
    "name": "www",
    "dependencies": {
        "vue-router": "^3.4.8"
    }

以上です。

エラーが出るとやりたいと思っていた事がストップし、若干やる気が減る反面、解決すると自分の知識量が上がったり、自分では気づいていないライブラリの存在を知る事ができますね。