Barrel
TypeScriptのBarrel
前提
方法
こんな感じで書く
code:hoge/index.ts
export { hoge } from './model';
export { piyo } from './view';
するとimport側がこうなる
code:ts
// before
import { hoge } from 'src/hoge/model'
import { piyo } from 'src/hoge/view'
// after
import { hoge, piyo } from 'src/hoge'
こうも書ける
code:hoge/index.ts
export * from './model';
export * from './view';
後述するが、これは問題があったりなかったりする
良い点
そのModuleが何を公開しているのかが明示的になる
ただしこれは*で書いてたら効能はない
Barrelを使わなくても、ファイル内のexportの有無でもpublicかどうかは明示できるが、testが絡むと少し話が変わる
tsはtestは別ファイルに書かないといけないので、そのためにexportしないといけない
Barrelによって、testのためのexportなのか、本当に公開したいのか、が明示できる
ファイル名の変更をしてもindex.tsを修正するだけで済む
微妙な点
わざわざ書くのがダルい
しかし*にすると、「index.tsがでかくなってきたら(exportが増えたら)、コードの不吉な匂いとしてる」ができない
'cmd-.'の自動importはbarrelの方を見てくれない(?)
ちゃんと見てくれるmrsekut.icon
こういう話もあるらしい
でもこれ「biuildサイズを減らす時に障害になる」という説明ではないか
なんでこのscprapsにまとめられているのかよくわからん #?? 結局やりたいことって、
package外への公開
package内への公開
を区別したいだけ