generated at
Barrel
TypeScriptのBarrel

前提
tsconfigのmoduleResolution "node" にしておく


方法
こんな感じで書く
hoge/index.ts
export { hoge } from './model'; export { piyo } from './view';
するとimport側がこうなる
ts
// before import { hoge } from 'src/hoge/model' import { piyo } from 'src/hoge/view' // after import { hoge, piyo } from 'src/hoge'
こうも書ける
hoge/index.ts
export * from './model'; export * from './view';
後述するが、これは問題があったりなかったりする

良い点
そのModuleが何を公開しているのかが明示的になる
ただしこれは * で書いてたら効能はない
Barrelを使わなくても、ファイル内の export の有無でもpublicかどうかは明示できるが、testが絡むと少し話が変わる
tsはtestは別ファイルに書かないといけないので、そのためにexportしないといけない
Barrelによって、testのためのexportなのか、本当に公開したいのか、が明示できる
ファイル名の変更をしてもindex.tsを修正するだけで済む


微妙な点
わざわざ書くのがダルい
TypeScript Barrel Generatorを使えばいい
しかし * にすると、「index.tsがでかくなってきたら(exportが増えたら)、コードの不吉な匂いとしてる」ができない
'cmd-.'の自動importはbarrelの方を見てくれない(?)
ちゃんと見てくれるmrsekut
こういう話もあるらしい
でもこれ「biuildサイズを減らす時に障害になる」という説明ではないか
なんでこのscprapsにまとめられているのかよくわからん #??


結局やりたいことって、
package外への公開
package内への公開
を区別したいだけ
eslint-plugin-import-accessを使えば、もっとシンプルに目的を達成できる