Avec Angular 8, lors de la construction de l'application, nous rencontrons l'erreur suivante:
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.
Semble comme ce fil dit un changement de rupture a été émis:
Les composants ne peuvent plus être importés via "@ angular/material". Utilisez les points d'entrée secondaires individuels, tels que @ angulaire/matériau/bouton.
Mise à jour : peut confirmer, c'était le problème. Après rétrogradation @angular/[email protected]...
à @angular/[email protected]
nous pourrions résoudre ce problème temporairement. Je suppose que nous devons mettre à jour le projet pour une solution à long terme.
Après la mise à niveau vers Angular 9 (publié aujourd'hui), j'ai également rencontré ce problème et j'ai constaté qu'ils avaient apporté le changement de rupture mentionné dans la réponse . Je ne peux pas trouver une raison pour laquelle ils ont fait ce changement.
J'ai un fichier material.module.ts que j'importe/exporte tous les composants matériels (pas le plus efficace, mais utile pour un développement rapide). J'ai parcouru et mis à jour toutes mes importations dans les dossiers de matériaux individuels, bien qu'un baril index.ts pourrait être mieux. Encore une fois, je ne sais pas pourquoi ils ont apporté ce changement, mais je suppose que cela a à voir avec l'efficacité de l'agitation des arbres.
Y compris mon material.module.ts ci-dessous au cas où cela aiderait quelqu'un, il est inspiré d'autres modules matériels que j'ai trouvés:
// 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]
};
}
}
Cela peut être résolu en écrivant le chemin complet, par exemple si vous souhaitez inclure MatDialogModule, suivez:
Avant:import { MatDialogModule } from "@angular/material"; //leading to error mentioned
Après:import { MatDialogModule } from "@angular/material/dialog"; //works fine
Les composants ne peuvent plus être importés (From Angular 9) via le répertoire général
vous devez ajouter un chemin de composant spécifié comme
import {} from '@angular/material';
import {} from '@angular/material/input';
Et aussi ng update @angular/material
mettra à jour votre code et corrigera toutes les importations