環境
- Node.js: v16.20.2
- TypeScript: v4.2.4
- aspida: v1.7.1
経緯
先日openapi2aspidaを使用してAPIクライアントを生成した際、以下のようなimport文が生成されました。
import type { DefineMethods } from "aspida";
しかし、このプロジェクトではaspida v1.7.1を使用しており、DefineMethods
型が存在しないため、当然エラーが発生しました。
Cannot find export 'DefineMethods' from module 'aspida'
原因
直接的な原因はpackage.jsonに記載しているscriptでnpxを使用していることでした。
npxはローカルにインストールされていないパッケージを実行する場合、最新バージョンをダウンロードして実行します。
"build:api": "rm -rf ./api && npx openapi2aspida -i http://localhost:4001/docs-json"
これにより最新のopenapi2aspidaを使用してしまい、このプロジェクトのaspidaには存在しないDefineMethods型を前提に生成してしまっていたようです。
解決策
openapi2aspidaをdevDependenciesに追加し、scriptを変更する。
"scripts": {
"build:api": "rm -rf ./api && openapi2aspida -i http://localhost:4001/docs-json",
}
"devDependencies": {
"openapi2aspida": "0.23.2"
}
このようにopenapi2aspidaのバージョンを指定することで、無事生成できるようになりました。
まとめ
npx
は便利ですが、長期間放置していると今回のように意図しないタイミングでバージョンが上がってしまうため気をつけましょう。(n敗)