🦁
Cloudflare環境ではNode.jsに依存したモジュールは使えない
まあその通りっちゃその通りなのですが、先日特に何も確認せずにbcryptをimportした状態でビルドし、wrangler pages dev
を行うと下記のエラーが発生しました。
⛅️ wrangler 3.80.0 (update available 3.80.4)
-------------------------------------------------------
✘ [ERROR] Could not resolve "fs"
../node_modules/.pnpm/@mapbox+node-pre-gyp@1.0.11/node_modules/@mapbox/node-pre-gyp/lib/node-pre-gyp.js:20:19:
20 │ const fs = require('fs');
╵ ~~~~
The package "fs" wasn't found on the file system but is built into node. Are you trying to bundle for node? You can use "platform: 'node'" to do that, which will remove this error.
✘ [ERROR] Could not resolve "path"
../node_modules/.pnpm/@mapbox+node-pre-gyp@1.0.11/node_modules/@mapbox/node-pre-gyp/lib/node-pre-gyp.js:21:21:
21 │ const path = require('path');
╵ ~~~~~~
The package "path" wasn't found on the file system but is built into node. Are you trying to bundle for node? You can use "platform: 'node'" to do that, which will remove this error.
✘ [ERROR] Could not resolve "events"
../node_modules/.pnpm/@mapbox+node-pre-gyp@1.0.11/node_modules/@mapbox/node-pre-gyp/lib/node-pre-gyp.js:27:19:
27 │ const EE = require('events').EventEmitter;
╵ ~~~~~~~~
The package "events" wasn't found on the file system but is built into node. Are you trying to bundle for node? You can use "platform: 'node'" to do that, which will remove this error.
エラーを見ると、「nodeの環境でバンドルしているか?」的なことを聞かれています。
ただ、この環境はNode.jsではなくCloudflareの環境なので、Node.jsが提供しているメソッド、またはそれを使っているモジュールを使用しているライブラリを使うとこのようなエラーが発生します。
bcryptはまさにその一つであり、npmの依存関係をみてみると、エラー文にある@mapbox+node-pre-gyp
を使用しており、これが原因でエラーが発生した模様です。
bcryptの場合は、代わりにbcryptjsを使えば解決できます。
npm i bcrypt
npm i --save-dev @types/bcryptjs
もしこういったエラーが出た際にご参考になれれば幸いです。
また、他に解決方法等がありましたらご指摘いただけますと幸いです。
Discussion