[NPM] インストールで --save-dev オプションつけても動かないときは本番モードを疑おう


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 にすることを忘れずに。