Node, Next 開発を行っていて大きな負荷になっていることは、依存性の解決です。パッケージのバージョンが合わないでエラー、合うようにしたら他のパッケージでエラー、それも合わせたら、そもそものnodeがdeprecateと出て廃止予定と出たり。さらに最新にしたらまたパッケージが合わないと。。。
さて、この依存性解決状態の中で、開発、本番環境それらの違いを吸収するように設定が用意されています。
その設定は package.json にあります。
- 本番環境は dependencies
"dependencies": {
"firebase-admin": "^11.0.0 <12.0.0",
"firebase-functions": "^5.1.1",
"next": "^12.3.4 <13.0.0",
"react": "^18.2.0 <19.0.0",
"react-dom": "^18.2.0 <19.0.0"
},
- 開発環境は devDependencies
"devDependencies": {
"@typescript-eslint/eslint-plugin": "^8.35.0 <9.0.0",
"eslint": "^8.56.0 <9.0.0",
"eslint-config-google": "^0.14.0 <1.0.0",
"eslint-import-resolver-typescript": "^4.4.4 <5.0.0",
"eslint-plugin-import": "^2.32.0 <3.0.0",
"firebase-functions-test": "^0.2.0 <1.0.0",
"rimraf": "^3.0.2 <4.0.0",
"typescript": "^4.2.3 <5.0.0"
},
最近は AI に聞くと何が足りないのか、どのパッケージどうしが相性がよいのかを教えてくれます。このときに開発環境だけパッケージ更新されていない現象に遭遇しました。解決方法は AI も教えてくれませんでしたが、海外ブログにありました。開発環境への更新は、開発環境の環境変数である必要があります。つまり以下を行ってはいけないということです。
NODE_ENV=production
NODE_ENV 環境変数が本番向けになっていると、npm の --save-dev がきかなくなります。環境を調整する際は development にすることを忘れずに。