Skip to main content

c8r/genといライブラリのリファクタリングの進捗

· 4 min read

こいつの進捗でも書きますか。

ライブラリのバージョンを上げた

yarn outdatedで確認

Package            Current  Wanted  Latest  Location
chokidar 2.0.4 1.7.0 2.0.4 @compositor/gen
gray-matter 4.0.1 3.1.1 4.0.1 @compositor/gen
load-json-file 5.1.0 4.0.0 5.1.0 @compositor/gen
meow 5.0.0 4.0.1 5.0.0 @compositor/gen
read-pkg 4.0.1 3.0.0 4.0.1 @compositor/gen
read-pkg-up MISSING 3.0.0 4.0.0 @compositor/gen
remark 9.0.0 8.0.0 9.0.0 @compositor/gen
remark-slug 5.1.0 4.2.3 5.1.0 @compositor/gen
styled-components 3.4.9 2.4.1 3.4.9 @compositor/gen
styled-system 3.1.4 1.1.7 3.1.4 @compositor/gen
ws 6.0.0 3.3.3 6.0.0 @compositor/gen

次のアップグレードコマンドで何も考えずに最新バージョンまですべて上げた。

yarn upgrade-interactive

結果として、wsに至っては3.3.3はバグ(ページリロード時にプロセスが死ぬ)を持っていたが、6.0.0にしたら自然と修正された。styled-systemは型があたり、むしろ保守性が向上した。

型があたっていないのを解消

次の2つのライブラリの型があたっていないライブラリがあったので、型定義ファイルを用意しました。

gray-matterは同種のPRが2つ投げらてているが、マージされていないので静観することにする。

glamorに至っては、型定義ファイルが用意されているにもかかわらず、最新版(v2.20.40)をnpmリポジトリインストールするとserver.d.tsが落ちてこない。ISSUEも上がっている。

これも静観。

とりあえず

tsconfig.jsonのルールを厳しくしていて、それに則って修正をしている。 今回の型定義ファイルを当てることで、

"noImplicitAny": true

trueで維持された。

どうやったか

tsconfigファイルにpathsを与えただけ。

{
"compilerOptions": {
"paths": {
"gray-matter": [
"./typings/grapy-matter"
],
"glamor*": [
"./typings/glamor*"
],
}
}
}

依存関係は次の画像のようになっていて、工事中、という感じ。 types.tssverweij/dependency-cruiser: Validate and visualize dependencies. With your rules. JavaScript, TypeScript, CoffeeScript. ES6, CommonJS, AMD.に怒られないように、と逃げ道っぽくおいている。

依存関係

型を当てただけで、どこが何をしているのかを完全に把握はしていない。 まずはそこからやっていく。パット見面白かったのがReactのrenderToStaticMarkupというメソッド。 これを使うとreactから静的なHTMLファイルを出力することができる。こんなのがあったのかぁ。

脱線

画像はpahen/madge: Create graphs from your CommonJS, AMD or ES6 module dependenciesで出力した。 小規模ならこれで十分事足りている。

コマンドはこんな感じ。

madge src/index.ts --image output.png