Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

react-three-drei を使いたい!

解決したいこと

macでreact nativeでアプリを作っています。
react-three-dreiを使いたいのですがエラーが出てしまいます。
解決したいです。

発生している問題・エラー

以下のコードでdreiをinstallしました。

npm install @react-three/drei

そして以下のコードでimportしました。

import { PerspectiveCamera, PositionalAudio } from '@react-three/drei/native'

すると以下のエラーが出ました。
While trying to resolve module three-mesh-bvh from file /Users/ss/memoapp001/node_modules/@react-three/drei/native/index.js, the package /Users/ss/memoapp001/node_modules/three-mesh-bvh/package.json was successfully found. However, this package itself specifies a main module field that could not be resolved (/Users/ss/memoapp001/node_modules/three-mesh-bvh/build/index.umd.cjs. Indeed, none of these files exist:

自分で試したこと

まずreact three fiberをinstall, importはできました。
その時も最初にエラーが出たのですが、この時はインストール元のversionとインストールするversionが同等でなかったという原因が分かったので、--save --legacy-peer-deps を付け足してinstallすることでエラーを解消しました。

しかし、dreiの場合にはなぜか three-mesh-bvh が関係しているエラーで,これに関して調べてみたところ、dreiのinstallに加え、three-mesh-bvh を独立でinstallしなければいけないのかもしれないと推測し、three-mesh-bvhを加えてinstallしたが同じエラーが出てきてしまいました。

dreiの公式ドキュメントを調べたら、
this package is using the stand-alone three-stdlib instead of three/examples/jsm
とあったので、three-stdlibは単独でinstallしなければいけないことは分かるのですが、なぜthree-mesh-bvhがエラー文で出てくるのか分かりませんでした。

1

1Answer

このエラーが出ている理由は、three-mesh-bvhライブラリの node_modules の中に入ってみると、package.jsonmainbuild/index.umd.cjsを指していることが分かります。。
どうやら、umd.cjs拡張子がデフォルトでコンパイルできないようです。。
そこで、私の場合は、Expoで開発していたため、metro.config.jsの中にエラーが出ている拡張子をこのように追加して、再度実行したら、動きました!

module.exports = {
    resolver: {
      // assetExtsの中に必要な拡張子を追加する
      assetExts: ['db', 'mp3', 'ttf', 'obj', 'png', 'jpg','glb','cjs','cjs.prod.js','umd.cjs','cjs.dev.js'], 
    },
  };

0Like

Your answer might help someone💌