以前に作った Cordova + React のプロジェクトに、react-leaflet ライブラリをインストールしたら遭遇したエラーです。
ライブラリをインストール後に npm run build を実行したところ、下記のようなエラーが発生しました。
Module build failed (from ./node_modules/babel-loader/lib/index.js): Error: Plugin/Preset files are not allowed to export objects, only functions.
全文は長すぎるので、最初の2行分くらいを抜粋しました。
表示されたメッセージによると node_modules\babel-preset-react\lib\index.js 内でエラーが発生しているようなので、npm を使って babel-preset-react を再インストールし、更新しましたがエラーは解消できず…。
で、エラーメッセージを検索した結果、こちらの記事が大変参考になりました。
【React】Error: Plugin/Preset files are not allowed to export objects, only functions. が吐き出される – Laravelとねころっけくん5.8
https://nekorokkekun.hatenablog.com/entry/2019/09/06/093711
こちらによると、下記コマンドで不足しているライブラリをインストールする必要があるとのことでした。
npm install --save-dev @babel/preset-react
エラーメッセージに babel-preset-react とあったので、必死にこちらをインストールしていたのですが…正しくは @babel/preset-react をインストールしなければならなかったようです…!
エラーメッセージわかりにくいよ…!
で、上記のコマンドでライブラリのインストールが完了したら、.babelrc の presets の項目を下記のように変更します。
"presets": [
[
"@babel/preset-env",
{
"targets": {
"node": true
}
},
],
"@babel/preset-react",
],
参考サイトでは、"presets": ["@babel/preset-env", "@babel/preset-react"], に変更する、となっていましたが、私の環境では別のエラーの対処のために上記のように変更しました。
上記の変更をした後、再度ビルドしたところ、無事 npm run build が通りました…!
以上、npm run build を実行時に、「Module build failed (from ./node_modules/babel-loader/lib/index.js): Error: Plugin/Preset files are not allowed to export objects, only functions.」エラーが発生する時の対処法でした。