先日Windows10の開発環境を更新する機会がありました。
Angular7でAngular Materialを使っているプロジェクトがあったので、「せっかくだしAngular9に上げてみようかな?」とか思いながら作業を進めたところ、表題のエラーが発生したのです。。
今までは問題なくビルドできていたのに、Angular9に上げてからAngular Materialのビルドが失敗します。
調べたところ、Angular9からはAngular Materialのインポート方法が少し変わったようです。
修正したところ、問題なく動くようになりましたので、同じように困っている方向けに記事にまとめようと思います。
そんなわけで、今回はAngular9に更新したら@angular/material/index.d.ts is not a module.
が出た場合の対処法について、ご紹介しますね。
今回のエラーが発生した環境は以下の通りです。
- OS:Windows10 Pro 64ビット
- Angular CDK:9.2.0
- Angular CLI:9.1.0
- Angular Material:9.2.0
原因はAngular Materialのインポート方法の変更にあった!
さてさて、今回エラーが発生したファイルはapp.module.ts
です。
今までは以下のように記述していました。
// app.module,ts
import { MatTableModule, MatToolbarModule } from '@angular/material';
どうやら、Angular9の変更で、このように一括でインポートする方法はダメになったようです。
公式にも記載されていました。
Breaking changes:
GitHub : angular/components/CHANGELOG.md
・Components can no longer be imported through “@angular/material”. Use the individual secondary entry-points, such as @angular/material/button.
Angular9からは以下のように個別でインポートするスタイルに変更になっています。
// app.module.ts
import { MatTableModule } from '@angular/material/table'
import { MatToolbarModule } from '@angular/material/toolbar'
今までの一括インポートに慣れていると、個別にインポートするのはちょっと面倒かもしれませんね。
ですが、未使用のモジュールまでインポートしてしまって、気づいたらアプリのサイズが肥大化してしまうことを考えると、この方がいいと思います。
特にAngularですとアプリのサイズが初回ロード時間に直結するので、特別な事情がなければユーザービリティ的にも個別インポートの方が良さそうですね。
終わりに
今回はAngular9に更新したら@angular/material/index.d.ts is not a module.
が出た場合の対処法について、ご紹介しました。
- Angular9からはAngular Materialは個別にインポートすること!
- バージョンを上げるときは公式の記述をチェックすること!
以上です。それでは!