皆さん、こんにちは。私の名前は Asim Khan です。現在、Meta Melon でフルスタック開発者を務めています。最近、結婚モバイルおよび Web アプリケーションである Naseebi.com のプロジェクトに取り組んでいるときに、イライラする問題に遭遇しました。この問題には、Node.js の punycode モジュールの非推奨が関係していたので、私の経験と解決策を共有したいと思います。
アプリケーションでプロファイル作成機能を作業中に、502 Bad Gateway エラーが発生しました。 AWS EC2 のサーバー ログを確認したところ、次の警告が見つかりました:
The punycode module is deprecated. Please use a userland alternative instead. (Use node --trace-deprecation ... to show where the warning was created)
コード内で Punycode を直接使用したことがなかったので、これは奇妙でした。しかし、package-lock.json ファイルを調べたところ、それがプロジェクト内のどこかに依存関係として含まれていることがわかりました。当時の Node.js のバージョンは v22.0.0 でした。 v20.9.0、さらには v18.18.0 にダウングレードしようとしましたが、警告は引き続き表示されます。
punycode モジュールは Node.js バージョン 21 で非推奨になりました。これを解決するには、推奨されるユーザーランドの代替手段である punycode.js に置き換える必要がありました。ただし、ユーザーランドモジュールをインストールするだけでは効果がないようです。
最終的に問題を解決するために私がとった手順は次のとおりです:
最新の Node.js バージョンを使用することに特にこだわりがない場合、簡単な解決策は 21 より前のバージョンにダウングレードすることです。
nvm install 20.5.1 nvm use 20.5.1
npm ls punycode を実行すると、punycode をまだ使用している依存関係を特定できます。
npm ls punycode
私の場合、犯人は ajv と whatwg-url-without-unicode でした。これらは次の手順で見つけました:
ajv の更新: package.json ファイル内の ajv を更新しました。
"overrides": { "ajv": "^8.17.1" }
whatwg-url を更新中: whatwg-url も更新しました。
"overrides": { "ajv": "^8.17.1", "whatwg-url": "^14.0.0" }
これらの更新後、警告は表示されなくなりました。ただし、問題が解決しない場合は、次の手順を実行できます。
3.警告を抑制する (一時的な修正)
package.json スクリプトで警告を抑制できます:
"scripts": { "start": "NODE_NO_WARNINGS=1 vite" }
これにより、コンソール出力から非推奨の警告が削除されます。
4. pm2 を使用してアプリケーションを管理する
最後に、2 つのクラスターのうち 1 つがダウンしていることに気づき、pm2 でアプリケーションを管理するためにプロジェクト ルートに Ecosystem.config.js ファイルを追加しました。
module.exports = { apps: [ { name: "my-app", script: "npm", args: "run start", instances: "max", exec_mode: "cluster", max_memory_restart: "1G", watch: false, autorestart: true, restart_delay: 5000, }, ], };
EC2 でコードをプッシュしてプルした後、pm2 サーバーを再起動すると、すべてがスムーズに動作し始めました。
この問題は、依存関係の管理と非推奨のモジュールの扱いについて多くのことを学びました。 Punycode モジュールは非推奨ですが、一時的に使用することはできますが、将来の問題を避けるために、今すぐ問題に対処することをお勧めします。同様の問題が発生した場合に、このガイドが役立つことを願っています。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3