6
votes

Impossible d'importer le module "@ angular / material"

Je suis totalement nouveau pour dire pile et je suis confronté à des problèmes avec le module matériel d'Angular. J'essaye d'importer le module "@ angular / material" dans mon code mais j'obtiens une erreur chaque fois que je l'importe. L'erreur est la suivante:

import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
import { FormsModule } from '@angular/forms';
import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
import { MatInputModule } from '@angular/material/input';

import { AppRoutingModule } from './app-routing.module';
import { AppComponent } from './app.component';
import { PostCreateComponent } from './posts/post-create/post-create.component';

@NgModule({
  declarations: [
    AppComponent,
    PostCreateComponent
  ],
  imports: [
    BrowserModule,
    AppRoutingModule,
    FormsModule,
    BrowserAnimationsModule
  ],
  providers: [],
  bootstrap: [AppComponent]
})
export class AppModule { }

Voici mon fichier package.json:

   {
  "name": "mean-course",
  "version": "0.0.0",
  "scripts": {
    "ng": "ng",
    "start": "ng serve",
    "build": "ng build",
    "test": "ng test",
    "lint": "ng lint",
    "e2e": "ng e2e"
  },
  "private": true,
  "dependencies": {
    "@angular/animation": "^4.0.0-beta.8",
    "@angular/animations": "~8.2.7",
    "@angular/cdk": "^9.0.0",
    "@angular/common": "~8.2.7",
    "@angular/compiler": "~8.2.7",
    "@angular/core": "~8.2.7",
    "@angular/forms": "~8.2.7",
    "@angular/material": "^9.0.0",
    "@angular/platform-browser": "~8.2.7",
    "@angular/platform-browser-dynamic": "~8.2.7",
    "@angular/router": "~8.2.7",
    "rxjs": "~6.4.0",
    "tslib": "^1.10.0",
    "zone.js": "~0.9.1"
  },
  "devDependencies": {
    "@angular-devkit/build-angular": "~0.803.5",
    "@angular/cli": "~8.3.5",
    "@angular/compiler-cli": "~8.2.7",
    "@angular/language-service": "~8.2.7",
    "@types/node": "~8.9.4",
    "@types/jasmine": "~3.3.8",
    "@types/jasminewd2": "~2.0.3",
    "codelyzer": "^5.0.0",
    "jasmine-core": "~3.4.0",
    "jasmine-spec-reporter": "~4.2.1",
    "karma": "~4.1.0",
    "karma-chrome-launcher": "~2.2.0",
    "karma-coverage-istanbul-reporter": "~2.0.1",
    "karma-jasmine": "~2.0.1",
    "karma-jasmine-html-reporter": "^1.4.0",
    "protractor": "~5.4.0",
    "ts-node": "~7.0.0",
    "tslint": "~5.15.0",
    "typescript": "~3.5.3"
  }
}

Voici mon fichier app.module.ts:

ERROR in src/app/app.module.ts:5:32 - error TS2306: File '/Users/anmolsarraf/Desktop/MEAN Stack/mean-course/node_modules/@angular/material/index
.d.ts' is not a module.

Pour être exact, j'essaye d' import { MatInputModule } from '@angular/material'; et j'obtiens l'erreur mentionnée ci-dessus.

J'ai essayé d'importer le module ci-dessus comme import { MatInputModule } from '@angular/material/input'; mais alors il jette un tas d'erreur en disant node_modules/@angular/material/input/input.d.ts:138:9 - error TS1086: An accessor cannot be declared in an ambient context.

Toute aide serait très appréciée. Merci!

MISE À JOUR

J'ai créé une nouvelle instance d'une application angulaire, puis j'ai essayé d'y importer du matériel angulaire, cela a fonctionné d'une manière ou d'une autre, car je n'obtiens aucune erreur lors de son importation. Merci!


6 commentaires

Avez-vous exécuté npm install après l'avoir ajouté à votre projet?


Ouais, j'ai aussi exécuté cette commande après l'avoir ajoutée à mon projet, mais sans succès :-(


Publiez également votre déclaration d'importation


J'ai ajouté les déclarations d'importation ci-dessus dans la question.


Cela peut être dû au fait que @angular/material est v9 et Angular v8, mais pas tout à fait sûr. Pouvez-vous vous assurer que les versions de matériau angulaire et angulaire sont identiques? (supprimer node_modules, réinstaller etc)


J'ai essayé de supprimer les node_modules et de les réinstaller, mais toujours sans succès.


6 Réponses :


1
votes

Avez-vous exécuté la commande ng add @angular/material? ?

Vous pouvez également essayer de parcourir la documentation sur les matériaux angulaires ici: https://material.angular.io/guide/getting-started

De plus, suivez-vous le cours moyen de Maximilian Schwarzmüller? Si vous n'êtes pas trop loin, essayez de voir si vous avez manqué des étapes (je suppose que le nom "Mean-Course" est également utilisé pour son projet :)

EDIT: Dans votre module d'import, vous mettez la ligne import { MatInputModule } from '@angular/material/input'; mais j'ai oublié de l'ajouter à votre tableau d'import :)

changez-le en ceci:

@NgModule({
  declarations: [
    AppComponent,
    PostCreateComponent
  ],
  imports: [
    BrowserModule,
    AppRoutingModule,
    FormsModule,
    BrowserAnimationsModule,
    MatInputModule //new import
  ],
  providers: [],
  bootstrap: [AppComponent]
})
export class AppModule { }

Edit 2: si cela ne fonctionne toujours pas, essayez d'exécuter cette commande: ng update --next @angular/cli --force ou ng update --next @angular/cli --force aide de npm install -g typescript@latest ou npm update


4 commentaires

J'ai jeté un œil à la documentation et je me suis assuré de suivre chaque étape mentionnée dans la documentation, mais malheureusement, j'obtiens toujours l'erreur. Et oui, je prends le cours moyen de Maximilian Schwarzmüller. J'ai revu la vidéo plusieurs fois pour m'assurer de suivre chaque étape, mais malheureusement, rien n'a fonctionné.


J'ai aussi ce cours, quelle coïncidence! Je ne sais pas si le débordement de pile vous donne une notification chaque fois qu'une réponse est modifiée, mais je pense que le problème est dans votre app.module.ts


J'ai essayé d'apporter les modifications que vous avez mentionnées ci-dessus, mais cela me lance l'erreur suivante: 'node_modules/@angular/material/input/input.d.ts: 138: 9 - erreur TS1086: Un accesseur ne peut pas être déclaré dans un contexte ambiant '


avez-vous essayé de mettre à jour dactylographié? essayez également de vérifier la section des commentaires de votre cours, parfois les gens ont le même problème là-bas et Max répond généralement et les aide à le résoudre.



6
votes

Tu dois être plus précis:

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

pas seulement

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

puis ajoutez-le à vos importations


3 commentaires

J'ai également essayé cette approche, mais sans succès. J'ai mentionné cette approche ci-dessus dans ma question, veuillez vous reporter à la question pour plus de détails.


essayez de redémarrer angular.


malheureusement pas de chance!



6
votes

Créez un nouveau fichier module.ts. par exemple, vous pouvez créer material.module.ts et préparer toutes les bibliothèques de matériaux comme ci-dessous

@NgModule({
  declarations: [
    AppComponent        
  ],
  imports: [
    BrowserModule,
    AppRoutingModule,
    FormsModule,       
    MaterialModule    
  ],
  providers: [],
  bootstrap: [AppComponent]
})
export class AppModule { }

importer ce modèle dans le app.module.ts

import { NgModule } from '@angular/core';
import { A11yModule } from '@angular/cdk/a11y';
import { ClipboardModule } from '@angular/cdk/clipboard';
import { DragDropModule } from '@angular/cdk/drag-drop';
import { PortalModule } from '@angular/cdk/portal';
import { ScrollingModule } from '@angular/cdk/scrolling';
import { CdkStepperModule } from '@angular/cdk/stepper';
import { CdkTableModule } from '@angular/cdk/table';
import { CdkTreeModule } from '@angular/cdk/tree';
import { MatAutocompleteModule } from '@angular/material/autocomplete';
import { MatBadgeModule } from '@angular/material/badge';
import { MatBottomSheetModule } from '@angular/material/bottom-sheet';
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 { MatDividerModule } from '@angular/material/divider';
import { MatExpansionModule } from '@angular/material/expansion';
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 { MatNativeDateModule, MatRippleModule } from '@angular/material/core';
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 { 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({
  exports: [
    A11yModule,
    ClipboardModule,
    CdkStepperModule,
    CdkTableModule,
    CdkTreeModule,
    DragDropModule,
    MatAutocompleteModule,
    MatBadgeModule,
    MatBottomSheetModule,
    MatButtonModule,
    MatButtonToggleModule,
    MatCardModule,
    MatCheckboxModule,
    MatChipsModule,
    MatStepperModule,
    MatDatepickerModule,
    MatDialogModule,
    MatDividerModule,
    MatExpansionModule,
    MatGridListModule,
    MatIconModule,
    MatInputModule,
    MatListModule,
    MatMenuModule,
    MatNativeDateModule,
    MatPaginatorModule,
    MatProgressBarModule,
    MatProgressSpinnerModule,
    MatRadioModule,
    MatRippleModule,
    MatSelectModule,
    MatSidenavModule,
    MatSliderModule,
    MatSlideToggleModule,
    MatSnackBarModule,
    MatSortModule,
    MatTableModule,
    MatTabsModule,
    MatToolbarModule,
    MatTooltipModule,
    MatTreeModule,
    PortalModule,
    ScrollingModule
  ],
  imports: [
    A11yModule,
    ClipboardModule,
    CdkStepperModule,
    CdkTableModule,
    CdkTreeModule,
    DragDropModule,
    MatAutocompleteModule,
    MatBadgeModule,
    MatBottomSheetModule,
    MatButtonModule,
    MatButtonToggleModule,
    MatCardModule,
    MatCheckboxModule,
    MatChipsModule,
    MatStepperModule,
    MatDatepickerModule,
    MatDialogModule,
    MatDividerModule,
    MatExpansionModule,
    MatGridListModule,
    MatIconModule,
    MatInputModule,
    MatListModule,
    MatMenuModule,
    MatNativeDateModule,
    MatPaginatorModule,
    MatProgressBarModule,
    MatProgressSpinnerModule,
    MatRadioModule,
    MatRippleModule,
    MatSelectModule,
    MatSidenavModule,
    MatSliderModule,
    MatSlideToggleModule,
    MatSnackBarModule,
    MatSortModule,
    MatTableModule,
    MatTabsModule,
    MatToolbarModule,
    MatTooltipModule,
    MatTreeModule,
    PortalModule,
    ScrollingModule
  ]
})
export class MaterialModule { }

1 commentaires

Agréable! Ajout de la ligne aux importations: import {MatFormFieldModule} de '@ angular / material / form-field';



0
votes

J'ai eu le même problème que l'OP. Je n'ai pas pu identifier la cause, mais je pense que cela peut avoir été un problème avec le gestionnaire de packages ajoutant des versions en conflit du package Material. Je suis récemment passé à l'utilisation de PNPM sur NPM. J'ai commencé à voir ce problème après avoir exécuté pnpm install @angular/material . Le package s'est installé avec succès mais j'ai eu les erreurs que l'OP avait ci-dessus chaque fois que j'ai exécuté le serveur, ng serve . Comme l'OP, j'ai essayé toutes les suggestions mais aucune n'a fonctionné. J'ai même essayé d'installer la version spécifique de Material qui fonctionnait auparavant pnpm i @angular/material@8.2.3 mais cela n'a pas fonctionné non plus.

Ce qui a fonctionné a été de définir globalement PNPM comme mon gestionnaire de paquets dans les configurations Anglar CLI .

import {MatCardModule, MatIconModule, MatToolbarModule} from '@angular/material'

Ensuite, j'ai créé un nouveau projet et installé le package Material en utilisant ng add @angular/material . Cela a pris un certain temps mais tout s'est installé avec succès. Dans les deux cas, PNMP a été utilisé à la place de NPM. J'ai également pu importer les modules Material en utilisant l'ancienne syntaxe.

ng config -g cli.packageManager pnpm // Set PNPM globally
ng config cli.packageManager pnpm    // Set PNPM for single project
ng config -g cli.packageManager npm  // Set NPM globally, default


0 commentaires

0
votes

Il semble qu'il y ait tellement d'incohérences de version dans votre package.json.

Pouvez-vous essayer la ng update , alors vous verrez quelque chose comme ceci:

Using package manager: 'npm'
Collecting installed dependencies...
Found 80 dependencies.
We analyzed your package.json, there are some packages to update:

  Name                                Version                  Command to update
 ---------------------------------------------------------------------------------
  @angular/cdk                        7.3.7 -> 10.1.3          ng update @angular/cdk
  @angular/cli                        8.3.25 -> 10.0.8         ng update @angular/cli
  @angular/core                       8.2.14 -> 10.0.14        ng update @angular/core
  @ngrx/store                         7.4.0 -> 10.0.0          ng update @ngrx/store
  rxjs                                6.5.4 -> 6.6.2           ng update rxjs

Ensuite, veuillez mettre à jour les dépendances requises


0 commentaires

0
votes

Assurez-vous d'abord que vous avez importé du matériel en utilisant ng add @angular/material , puis faites un clic droit sur votre projet, rechargez à partir du disque et l'erreur disparaîtra.


0 commentaires