共通コンポーネントを全てのモジュールで読み込むことについて

私はよくSharedのコンポーネント、全てのモジュールで読み込んでしまうのですが、
LazyLoadする人たちは「そのモジュール配下で使うコンポーネントだけを読み込む」ようにしていますか?

特におおきなプロジェクトやってる人に聞きたいと思っています。

Slackにてlacoさんからお返事をもらいましたので、やり取りを引用させていただきます。


lacolaco (管理人) 19:31
そうしないとLazy Loadingの意味がないので遅延読み込みされるモジュールから依存するものには気を払ってますよ (編集済み)


akai 19:32
そうですよね、それが当たり前ですよね、、、!! ありがとうございます!


lacolaco (管理人) 19:33
アプリケーションの中で再利用性が必要な部分はそれぞれをAngular Materialの button とか dialog みたいな小さいドメイン領域でNgModuleを作って、各Lazy Moduleがそれぞれ必要なものだけ取捨選択する形を取ってます

19:34
src/app/shared/logger/logger.module.ts みたいな感じ。 間違っても SharedModule というNgModuleはつくらないようにしないと遅延読み込みの恩恵はすぐ消えちゃいますね

19:35
loggerはサービスだから例が悪いですねw


akai 19:35
(LazyLoadのプロジェクトじゃないけど)ふっっつーーにSharedModuleしてました、これからは鉄の意思でSharedModuleやめます

19:36
FormsModuleとか、どこでも読み込むからなぁ、、、CoreModuleしたくなるけどCoreModuleも今は作らないのが主流なんですよね、、?


lacolaco (管理人) 19:37
SharedModuleはスタイルガイドに書かれてるのが厄介なんですがAngular GDEのなかでもこの記載は消すべきじゃないかという議論はたびたび起きます 中規模程度までならまあ死にはしないんですけども
https://angular.io/guide/styleguide#shared-feature-module

19:38

FormsModuleはけっこう大きいので僕はimportすべきかどうか気にするモジュールランキングのなかでも結構上位


akai 19:38

気にするにしても使ってたら外せないですよね、それは使わないという選択肢を取るようにしているということですかね?


lacolaco (管理人) 19:39

単純なコンポーネントだったらFormsModule使わず [value](change) で済みそうなケースでは使わないようにしてます。バリデーションが必要になりそうかどうかが分け目かな…

19:39

僕個人の見解で、バンドルサイズチューニングが重要なときの話なので普通はFormsくらいはどこでも入れていいと思いますよ (編集済み)


akai 19:39

うおおおマジスか、、、コントロールコンポーネントはAngularのコントロール(すなわちngModelやFormName)で使えるように統一しようと積極的にNgFormでValueAccessor使っていた

19:40

これっていずれにせよLazyLoadにおいて、という話ですよね(いつだってLazyLoadを見据えて開発したほうが良いというのは置いておいて


lacolaco (管理人) 19:42

そうですね!Lazy Loadは従量課金に意味があるので、必要ないコードが遅れてやってくるんだったらそれはただネットワークリクエストが増えてるだけになっちゃいます

2 Likes