やりたいこと
TypeScriptで開発している方は、@types/ooo
になってるパッケージお世話になっていると思います。この記事では、DefinitelyTypedにある不要になった型定義を削除する方法に関して紹介します。
こういう話は、日本語とかだとあんまり説明ない気がするのと、公式のドキュメントよりは少し抽象的なので、具体的にどんなコマンドを打てばいいかを書くことがこの記事の一番の目的です。
型定義を削除する経緯
get-portというパッケージがあります。get-port@4.2.0で公式で型定義が用意さました。それに伴って@types/get-port
を削除することになりました。
公式のREADME.mdのRemoving packageにどうやって削除したらよいか書いてあります。それを頼りに削除して、それをコミットしました。そのリンクの説明に具体例がなかったので、それを書くことがこの記事の目的です。
型定義の削除方法
以下のように、削除はコマンドを一つ打つだけの親切な設計になっています。ただ、具体的な例がなかったので、この記事ではそれを書きたいです。
npm run not-needed -- typingsPackageName asOfVersion sourceRepoURL [libraryName]
以下が、実際に打ったコマンドです。
npm run not-needed -- get-port 4.2.0 https://github.com/sindresorhus/get-port
実際のコミットです。
notNeededPackages.json
にget-port
が加わり、DefinitelyTyped/types/get-port
が削除されていることが分かります。
あとは、変更したものをforkしたリポジトリにpushして、プルリクエストを出せばOKです。
今回の@types/get-port
の削除プルリクエスト: https://github.com/DefinitelyTyped/DefinitelyTyped/pull/34165
無事にマージされました
--
以降の引数に関しての説明
-
get-port
の部分はDefinitelyTyped/types/get-port
だから、get-port
になるはずです。 -
4.2.0
はget-port
でのバージョンです。- 公式の
README.md
によると、@types/get-port
で公開されているものより高いバージョンを指定する必要があるらしいです。 - そしてこのバージョンはnpm上の
get-port
で公開されているバージョンでなければならないようです。
- 公式の
-
https://github.com/sindresorhus/get-port
は型定義があるリポジトリのURL - その次にも引数を指定できて、DefinitelyTypedを置き換える型定義のnpmパッケージの名前を書くぽいです
- 大体の場合、最初の引数(今回の場合
get-port
)と同じだから省略できます
- 大体の場合、最初の引数(今回の場合
TravisCI上で、CIが通ったURL: https://travis-ci.org/DefinitelyTyped/DefinitelyTyped/builds/510980452
(CIうまく通らないときに、実行結果を比較すると参考になるかも知れません)
最初、勘違いしたところ
「4.2.0
のバージョンは@types/get-port
より高いバージョンを指定してね」と書いてあるだけだったので、現在の@types/get-port
が4.0.1
なので、4.0.2
にした。ただこの解釈は間違いでした。
CIで出たエラーはこちらです。https://travis-ci.org/DefinitelyTyped/DefinitelyTyped/builds/510977291
エラーを見ると「The specified version 4.0.2 of get-port is not on npm.」となっていて、「4.0.2
は存在してないnpmパッケージだよ」といっています。
これを頼りに、get-port
公式で で型定義が対応した4.2.0
を指定してCIも通りました。
PRの具体的な経緯
実は最初はあのPRは削除する用のPRじゃなかったです。それを書くとごちゃごちゃすると思って触れていません。
もし、詳細知りたいよって方は、Qiita投稿前に書いていた:https://scrapbox.io/nwtgck/DefinitelyTyped(@types)%E3%81%AE%E5%9E%8B%E5%AE%9A%E7%BE%A9%E3%82%92%E5%89%8A%E9%99%A4%E3%81%99%E3%82%8BPR%E3%82%92%E5%87%BA%E3%81%99%E3%81%A8%E3%81%8Dに書いてあります。