【问题标题】:Not able to import "@angular/material" module无法导入“@angular/material”模块
【发布时间】:2020-05-25 06:34:40
【问题描述】:

我对堆栈完全陌生,我在使用 Angular 的材料模块时遇到了一些问题。我正在尝试在我的代码中导入“@angular/material”模块,但每当我导入它时都会出错。错误如下:

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.

这是我的 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"
  }
}

这是我的 app.module.ts 文件:

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 { }

确切地说,我正在尝试执行import { MatInputModule } from '@angular/material';,但遇到了上述错误。

我尝试将上述模块导入为import { MatInputModule } from '@angular/material/input';,但随后它会抛出一堆错误,说node_modules/@angular/material/input/input.d.ts:138:9 - error TS1086: An accessor cannot be declared in an ambient context.

任何帮助将不胜感激。谢谢!

更新

我创建了一个 Angular 应用程序的新实例,然后尝试在其中导入 Angular 材质,但它以某种方式工作,因为我在导入它时没有遇到任何错误。谢谢!

【问题讨论】:

  • 你把npm install添加到你的项目后运行了吗?
  • 是的,我在将它添加到我的项目后也执行了该命令,但没有成功:-(
  • 同时发布您的导入声明
  • 我已经在问题中添加了上面的导入语句。
  • 这可能是因为 @angular/material 是 v9 和 Angular v8,但不完全确定。你能确定 Angular 和 Angular Material 的版本是一样的吗? (删除 node_modules,重新安装等)

标签: javascript node.js angular angular-material mean-stack


【解决方案1】:

创建一个新的 module.ts 文件。例如,您可以创建 material.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 { }

在 app.module.ts 中导入这个模型

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

【讨论】:

  • 不错!在导入中添加了这一行: import { MatFormFieldModule } from '@angular/material/form-field';
  • 问题是文件夹两层以上时vscode不导入。这是解释这一点的线程。 github.com/microsoft/TypeScript/issues/31763
【解决方案2】:

你需要更具体:

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

不只是

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

然后 将其添加到您的导入中

【讨论】:

  • 我也尝试过这种方法,但没有成功。我在上面的问题中提到了这种方法,请参阅问题了解更多详细信息。
  • 尝试重启 angular。
  • 不幸的是,没有运气!
【解决方案3】:

我第一次开始使用 Angular Material 时也遇到了同样的问题,但不知道安装过程。

首先需要通过命令安装angular material:

npm install --save @angular/material

然后使用以下命令在您的项目中添加角度材质:

ng add @angular/material

对我来说,它是通过这两个简单的命令开始工作的。

【讨论】:

    【解决方案4】:

    您是否运行了命令ng add @angular/material?

    您也可以尝试在此处浏览 angular material 文档:https://material.angular.io/guide/getting-started

    另外,您是否在接受马克西米利安·施瓦茨米勒(Maximilian Schwarzmüller)的刻薄路线?如果你不是太深入,试着看看你是否错过了任何步骤(我猜是因为他的项目也使用了“mean-course”这个名字:)

    编辑: 在你的导入模块中,你把这条线 import { MatInputModule } from '@angular/material/input'; 但忘记将其添加到您的导入数组中:)

    改成这样:

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

    编辑 2: 如果这仍然不起作用,请尝试运行以下命令: ng update --next @angular/cli --force 或使用npm install -g typescript@latestnpm update 更新打字稿

    【讨论】:

    • 我查看了文档,并确保遵循文档中提到的每个步骤,但不幸的是,我仍然收到错误消息。是的,我正在接受马克西米利安·施瓦茨米勒 (Maximilian Schwarzmüller) 的平均路线。我已经多次查看视频以确保我遵循了每一步,但不幸的是,没有任何效果。
    • 其实我也有这门课,真巧!我不确定每当编辑答案时堆栈溢出是否会给您通知,但我认为问题出在您的 app.module.ts
    • 尝试进行您上面提到的更改,但仍然向我抛出以下错误:' node_modules/@angular/material/input/input.d.ts:138:9 - error TS1086 : 不能在环境上下文中声明访问器 '
    • 你试过升级打字稿吗?还可以尝试查看课程的评论部分,有时人们在那里遇到同样的问题,Max 通常会回复并帮助他们解决问题。
    【解决方案5】:

    您的 package.json 中似乎有很多版本不匹配。

    你可以试试ng update,然后你会看到这样的:

    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
    

    那么请更新所需的依赖项

    【讨论】:

      【解决方案6】:

      首先确保您使用ng add @angular/material 导入材料,然后只需右键单击您的项目,从磁盘重新加载,错误就会消失..

      【讨论】:

        【解决方案7】:

        我遇到了与 OP 相同的问题。我无法确定原因,但我认为可能是包管理器添加了 Material 包的冲突版本。我最近切换到在 NPM 上使用 PNPM。我在运行pnpm install @angular/material 后第一次开始看到这个问题。软件包安装成功,但每当我运行服务器时,我都会遇到上面的错误,ng serve。 像 OP 我尝试了所有的建议,但没有一个奏效。我什至尝试安装以前工作的特定版本的材料pnpm i @angular/material@8.2.3,但这也不起作用。

        有效的是全局setting PNPM as my package manager in the Anglar CLI configurations

        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
        

        之后,我创建了一个新项目并使用ng add @angular/material 安装了 Material 包。花了一段时间,但一切都安装成功。 在这两种情况下,都使用 PNMP 而不是 NPM。 我还能够使用旧语法导入 Material 模块。

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

        【讨论】:

          【解决方案8】:

          对我来说,它是通过从“@angular/material/input”导入 MatInputModule 来解决的。

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2020-10-24
            • 2020-05-11
            • 2020-09-29
            • 2017-07-11
            • 1970-01-01
            • 1970-01-01
            • 2017-11-29
            相关资源
            最近更新 更多