@ angular / material / index.d.ts 'bukan modul

40

Dengan Angular 8, Saat membangun aplikasi, kami menemukan kesalahan berikut:

app/modules/admin-module/pages/editor/editor.component.ts:6:27 - error TS2306: 
File ...node_modules/@angular/material/index.d.ts' is not a module.
ForestG
sumber

Jawaban:

87

Setelah memutakhirkan ke Angular 9 (dirilis hari ini), saya juga mengalami masalah ini dan menemukan bahwa mereka membuat perubahan yang disebutkan dalam jawaban . Saya tidak dapat menemukan alasan mengapa mereka melakukan perubahan ini.

Saya memiliki file material.module.ts yang saya impor / ekspor semua komponen material (bukan yang paling efisien, tetapi berguna untuk pengembangan cepat). Saya memeriksa dan memperbarui semua impor saya ke folder material individual, meskipun barrel index.ts mungkin lebih baik. Sekali lagi, tidak yakin mengapa mereka melakukan perubahan ini, tapi saya kira itu ada hubungannya dengan efisiensi yang mengguncang pohon.

Termasuk materi saya.module.ts di bawah ini jika itu membantu siapa pun, itu terinspirasi dari modul materi lain yang saya temukan:

CATATAN : Seperti posting blog lain yang disebutkan dan dari pengalaman pribadi saya, berhati-hatilah saat menggunakan modul bersama seperti di bawah ini. Saya memiliki 5 ~ modul fitur yang berbeda (malas dimuat) di aplikasi saya yang saya impor modul materi saya. Karena penasaran, saya berhenti menggunakan modul bersama dan sebagai gantinya hanya mengimpor masing-masing komponen material yang diperlukan setiap modul fitur. Ini mengurangi ukuran bundel saya sedikit, hampir pengurangan 200kb. Saya berasumsi bahwa proses optimisasi build akan menjatuhkan komponen apa pun yang tidak digunakan oleh modul saya, tetapi sepertinya tidak demikian ...

// material.module.ts
import { ModuleWithProviders, NgModule} from "@angular/core";
import { MAT_LABEL_GLOBAL_OPTIONS, MatNativeDateModule, MAT_DATE_LOCALE } from '@angular/material/core';
import { MatIconRegistry } from '@angular/material/icon';
import { MatAutocompleteModule } from '@angular/material/autocomplete';
import { MatBadgeModule } from '@angular/material/badge';
import { MatButtonModule } from '@angular/material/button';
import { MatButtonToggleModule } from '@angular/material/button-toggle';
import { MatCardModule } from '@angular/material/card';
import { MatCheckboxModule } from '@angular/material/checkbox';
import { MatChipsModule } from '@angular/material/chips';
import { MatStepperModule } from '@angular/material/stepper';
import { MatDatepickerModule } from '@angular/material/datepicker';
import { MatDialogModule } from '@angular/material/dialog';
import { MatExpansionModule } from '@angular/material/expansion';
import { MatFormFieldModule } from '@angular/material/form-field';
import { MatGridListModule } from '@angular/material/grid-list';
import { MatIconModule } from '@angular/material/icon';
import { MatInputModule } from '@angular/material/input';
import { MatListModule } from '@angular/material/list';
import { MatMenuModule } from '@angular/material/menu';
import { MatPaginatorModule } from '@angular/material/paginator';
import { MatProgressBarModule } from '@angular/material/progress-bar';
import { MatProgressSpinnerModule } from '@angular/material/progress-spinner';
import { MatRadioModule } from '@angular/material/radio';
import { MatRippleModule } from '@angular/material/core';
import { MatSelectModule } from '@angular/material/select';
import { MatSidenavModule } from '@angular/material/sidenav';
import { MatSliderModule } from '@angular/material/slider';
import { MatSlideToggleModule } from '@angular/material/slide-toggle';
import { MatSnackBarModule } from '@angular/material/snack-bar';
import { MatSortModule } from '@angular/material/sort';
import { MatTableModule } from '@angular/material/table';
import { MatTabsModule } from '@angular/material/tabs';
import { MatToolbarModule } from '@angular/material/toolbar';
import { MatTooltipModule } from '@angular/material/tooltip';
import { MatTreeModule } from '@angular/material/tree';

@NgModule({
    imports: [
        MatAutocompleteModule,
        MatBadgeModule,
        MatButtonModule,
        MatButtonToggleModule,
        MatCardModule,
        MatCheckboxModule,
        MatChipsModule,
        MatStepperModule,
        MatDatepickerModule,
        MatDialogModule,
        MatExpansionModule,
        MatFormFieldModule,
        MatGridListModule,
        MatIconModule,
        MatInputModule,
        MatListModule,
        MatMenuModule,
        MatPaginatorModule,
        MatProgressBarModule,
        MatProgressSpinnerModule,
        MatRadioModule,
        MatRippleModule,
        MatSelectModule,
        MatSidenavModule,
        MatSliderModule,
        MatSlideToggleModule,
        MatSnackBarModule,
        MatSortModule,
        MatTableModule,
        MatTabsModule,
        MatToolbarModule,
        MatTooltipModule,
        MatTreeModule,
        MatNativeDateModule
    ],
    exports: [
        MatAutocompleteModule,
        MatBadgeModule,
        MatButtonModule,
        MatButtonToggleModule,
        MatCardModule,
        MatCheckboxModule,
        MatChipsModule,
        MatStepperModule,
        MatDatepickerModule,
        MatDialogModule,
        MatExpansionModule,
        MatFormFieldModule,
        MatGridListModule,
        MatIconModule,
        MatInputModule,
        MatListModule,
        MatMenuModule,
        MatPaginatorModule,
        MatProgressBarModule,
        MatProgressSpinnerModule,
        MatRadioModule,
        MatRippleModule,
        MatSelectModule,
        MatSidenavModule,
        MatSliderModule,
        MatSlideToggleModule,
        MatSnackBarModule,
        MatSortModule,
        MatTableModule,
        MatTabsModule,
        MatToolbarModule,
        MatTooltipModule,
        MatTreeModule,
        MatNativeDateModule
    ],
    providers: [     
    ]
})
export class MaterialModule {
    constructor(public matIconRegistry: MatIconRegistry) {
        // matIconRegistry.registerFontClassAlias('fontawesome', 'fa');
    }

    static forRoot(): ModuleWithProviders {
        return {
            ngModule: MaterialModule,
            providers: [MatIconRegistry]
        };
    }
}

Jeff Gilliland
sumber
1
Terima kasih untuk pembaruan yang sama di sini
Jimmy Kane
2
Saya memiliki masalah yang sama setelah memutakhirkan sudut 8 menjadi 9. Solusi Anda berhasil untuk saya. Jawaban ini harus diterima menurut saya karena ini sebenarnya memberikan solusi untuk versi yang ditingkatkan. Menurunkan versi 9 kembali ke 8 karena kesalahan ini tidak boleh dilihat sebagai solusi yang diterima untuk masalah tersebut. Terima kasih telah berbagi!
omostan
1
semua yang berikut berasal dari material / inti bukan angular / inti (kurasa): import {MAT_LABEL_GLOBAL_OPTIONS, MatNativeDateModule, MAT_DATE_LOCALE} dari '@ angular / material / core';
SwissCoder
1
Bagus, tergesa-gesa saya telah salah memasukkan MatNativeDateModule :), memperbaikinya dalam jawaban
Jeff Gilliland
1
@ MikeGledhill menyukai banyak hal dalam pengembangan, banyak hal bersifat esoteris. Mereka harus menerapkan solusi yang memberikan peringatan penghentian atau pesan kesalahan yang lebih spesifik sehingga Anda tahu cara memperbaikinya. Satu-satunya cara lain Anda akan tahu cara memperbaikinya adalah jika Anda memiliki pengalaman bekerja dengan Typecript & Angular, dan Anda tahu apa masalah yang mungkin terjadi ketika Anda melihat kesalahan dengan jenis file ".d.ts". Pengetahuan itu biasanya datang dari jam frustrasi ... perlu ada cara yang lebih baik untuk berbagi "pengetahuan domain" ini dengan orang lain!
Jeff Gilliland
37

Sepertinya utas ini mengatakan perubahan yang melanggar dikeluarkan:

Komponen tidak dapat lagi diimpor melalui "@ angular / material". Gunakan titik masuk sekunder individual, seperti @ angular / material / tombol.

Pembaruan : dapat mengkonfirmasi, ini masalahnya. Setelah diturunkan @angular/[email protected]...ke @angular/[email protected]kita bisa menyelesaikan ini sementara. Kira kita perlu memperbarui proyek untuk solusi jangka panjang.

ForestG
sumber
1
setelah melakukan downgrade, lakukan ng update @angular/material, itu akan bermigrasi dan memperbarui semua impor untuk Anda :)
Nicolas
24

Ini dapat diselesaikan dengan menulis jalur lengkap, misalnya jika Anda ingin menyertakan MatDialogModuleikuti:

Sebelum ke @ angular / material 9.xx

import { MatDialogModule } from "@angular/material";
//leading to error mentioned

Sesuai @ sudut / bahan 9.xx

import { MatDialogModule } from "@angular/material/dialog";
//works fine 

Referensi perubahan perubahan log resmi resmi: https://github.com/angular/components/blob/master/CHANGELOG.md#material-9

Khushi Raval
sumber
Yang ini berhasil untuk saya.
Shinoy Shaji
Bekerja untuk saya juga .. Terima kasih.
Sidhartha Shankar
8

Komponen tidak dapat lebih jauh (Dari Sudut 9) diimpor melalui direktori umum

Anda harus menambahkan jalur komponen tertentu seperti

import {} from '@angular/material'; 

import {} from '@angular/material/input';

Ali Ashraf
sumber
5
import { MatDialogModule } from '@angular/material/dialog';
import { MatTableModule } from '@angular/material/table';
import { MatFormFieldModule } from '@angular/material/form-field';
import { MatInputModule } from '@angular/material/input';
import { MatButtonModule } from '@angular/material/button';
Владимир
sumber
Selamat datang @ Владимир di StackOverflow, Akan sangat membantu untuk membaca jika Anda menambahkan kode bahasa dengan `` `(Tanpa spasi yaitu` `` javascript) dan tutup. untuk bantuan lebih lanjut silakan kunjungi stackoverflow.com/help/how-to-answer Terima kasih. Terus berkontribusi
Rajan
Halo! Sementara kode ini dapat menyelesaikan pertanyaan, termasuk penjelasan tentang bagaimana dan mengapa ini menyelesaikan masalah akan sangat membantu untuk meningkatkan kualitas posting Anda, dan mungkin menghasilkan lebih banyak suara. Ingatlah bahwa Anda menjawab pertanyaan untuk pembaca di masa depan, bukan hanya orang yang bertanya sekarang. Harap edit jawaban Anda untuk menambahkan penjelasan dan berikan indikasi tentang batasan dan asumsi apa yang berlaku.
Brian
Kode ini sangat bagus, tetapi akan lebih baik jika Anda menjelaskannya. Otdelna, Ya ne smog paniat.
Dr. MAF
2

Dan juga ng update @angular/materialakan memperbarui kode Anda dan memperbaiki semua impor

Sivuyile TG Magutywa
sumber
Ini hanya akan memperbarui package.json dan package-lock.json. Tidak akan mengubah apa pun dalam kode kami
Joel K Thomas
1
Baru saja ditingkatkan dari 7 menjadi 9, itu memang memperbaiki impor saya, sebenarnya.
Tobias Stangl
Anda menyelamatkan hari saya, terima kasih !!!
Nicolas
0

Jawaban yang diterima benar, tetapi itu tidak sepenuhnya berfungsi untuk saya. Saya harus menghapus file package.lock, jalankan kembali "npm install", dan kemudian tutup dan buka kembali studio visual saya. Semoga ini bisa membantu seseorang

Feargal Kavanagh
sumber
0

Cukup perbarui @ angular / materi dari 7 hingga 9 ,

npm uninstall @ angular / material --save

npm instal @ angular / material @ ^ 7.1.0 - simpan

ng perbarui @ angular / materi

Tunggu dan lihat Angular melakukan Migrasi sendirian,

Semoga ini bisa membantu seseorang :)

Nicolas
sumber
-5

Lakukan npm i -g @angular/material --saveuntuk menyelesaikan masalah

Narendra Sagadevan
sumber
Pertimbangkan untuk menambahkan rincian lebih lanjut dan penggunaan kode yang diformat
MehrdadEP