@ angular / liệu / index.d.ts 'không phải là một mô-đun


40

Với Angular 8, trong khi xây dựng ứng dụng, chúng tôi gặp phải lỗi sau:

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.

Câu trả lời:


87

Sau khi nâng cấp lên Angular 9 (phát hành ngày hôm nay), tôi cũng gặp phải vấn đề này và thấy rằng họ đã thực hiện thay đổi đột phá được đề cập trong câu trả lời . Tôi không thể tìm thấy lý do tại sao họ thực hiện thay đổi này.

Tôi có tệp tin.module.ts mà tôi nhập / xuất tất cả các thành phần vật liệu (không hiệu quả nhất, nhưng hữu ích để phát triển nhanh). Tôi đã duyệt và cập nhật tất cả các bản nhập của tôi vào các thư mục vật liệu riêng lẻ, mặc dù một thùng index.ts có thể tốt hơn. Một lần nữa, không chắc tại sao họ lại thực hiện thay đổi này, nhưng tôi đoán nó có liên quan đến hiệu quả rung chuyển của cây.

Bao gồm tài liệu của tôi.module.ts bên dưới trong trường hợp nó giúp được bất kỳ ai, nó lấy cảm hứng từ các mô-đun vật liệu khác mà tôi đã tìm thấy:

LƯU Ý : Như các bài đăng trên blog khác đã đề cập và từ kinh nghiệm cá nhân của tôi, hãy cẩn thận khi sử dụng mô-đun được chia sẻ như bên dưới. Tôi có 5 ~ mô-đun tính năng khác nhau (tải chậm) trong ứng dụng của mình mà tôi đã nhập mô-đun vật liệu của mình vào. Vì tò mò, tôi đã ngừng sử dụng mô-đun chia sẻ và thay vào đó chỉ nhập các thành phần vật liệu riêng lẻ mà mỗi mô-đun tính năng cần thiết. Điều này làm giảm kích thước bó của tôi khá nhiều, giảm gần 200kb. Tôi đã giả định rằng quy trình tối ưu hóa bản dựng sẽ loại bỏ đúng bất kỳ thành phần nào không được sử dụng bởi các mô-đun của tôi, nhưng dường như nó không phải là trường hợp ...

// 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]
        };
    }
}


1
Tương tự ở đây, cảm ơn về bản cập nhật
Jimmy Kane

2
Tôi đã có vấn đề tương tự sau khi nâng cấp góc 8 lên 9. Giải pháp của bạn đã làm việc cho tôi. Điều này nên được chấp nhận câu trả lời theo ý kiến ​​của tôi bởi vì nó thực sự cung cấp một giải pháp cho phiên bản nâng cấp. Hạ cấp phiên bản 9 trở lại 8 vì những lỗi này không nên được xem là giải pháp được chấp nhận cho vấn đề. Cám ơn vì đã chia sẻ!
omostan

1
tất cả những điều sau đây đến từ vật liệu / lõi không phải là góc / lõi (tôi đoán): nhập {MAT_LABEL_GLOBAL_OPTIONS, MatNativeDateModule, MAT_DATE_LOCALE} từ '@ angular / liệu / core';
SwissCoder

1
Bắt tốt, trong sự vội vàng của tôi, tôi đã đưa MatNativeDateModule vào nhập sai :), đã sửa nó trong câu trả lời
Jeff Gilliland

1
@MikeGledhill giống như nhiều thứ đang phát triển, nhiều thứ là bí truyền. Họ nên thực hiện một giải pháp đưa ra cảnh báo khấu hao hoặc thông báo lỗi cụ thể hơn để bạn biết cách khắc phục. Cách duy nhất khác mà bạn có thể biết cách khắc phục là nếu bạn có kinh nghiệm làm việc với Typecript & Angular và bạn biết vấn đề có thể xảy ra khi bạn gặp lỗi với loại tệp ".d.ts". Kiến thức đó thường xuất phát từ hàng giờ thất vọng ... cần có cách tốt hơn để chia sẻ "kiến thức tên miền" này với người khác!
Jeff Gilliland

37

Có vẻ như chủ đề này nói rằng một sự thay đổi đột phá đã được ban hành:

Các thành phần không còn có thể được nhập thông qua "@ angular / liệu". Sử dụng các điểm nhập cảnh thứ cấp riêng lẻ, chẳng hạn như nút @ góc / vật liệu /.

Cập nhật : có thể xác nhận, đây là vấn đề. Sau khi hạ cấp @angular/material@9.0...để @angular/material@7.3.2chúng tôi có thể giải quyết điều này tạm thời. Đoán chúng tôi cần cập nhật dự án cho một giải pháp lâu dài.


1
Sau khi thực hiện hạ cấp, thực hiện ng update @angular/material, nó sẽ di chuyển và cập nhật tất cả các mục nhập cho bạn :)
Nicolas

24

Điều này có thể được giải quyết bằng cách viết đường dẫn đầy đủ, ví dụ nếu bạn muốn bao gồm MatDialogModuletheo:

Trước @ góc / vật liệu 9.xx

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

Theo @ góc / vật liệu 9.xx

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

Tham chiếu thay đổi bản ghi thay đổi chính thức: https://github.com/angular/components/blob/master/CHANGELOG.md#m vật-9


Cái này làm việc cho tôi
Shinoy Shaji

Làm việc cho tôi là tốt .. Cảm ơn.
Sidhartha Shankar

8

Các thành phần không thể được thêm (Từ Angular 9) được nhập qua thư mục chung

bạn nên thêm một đường dẫn thành phần được chỉ định như

import {} from '@angular/material'; 

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


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';

Chào mừng bạn @ Вддииии để được trợ giúp thêm, vui lòng truy cập stackoverflow.com/help/how-to-answer Cảm ơn bạn. Tiếp tục đóng góp
Rajan

Xin chào! Mặc dù mã này có thể giải quyết câu hỏi, bao gồm giải thích về cách thức và lý do giải quyết vấn đề này thực sự sẽ giúp cải thiện chất lượng bài đăng của bạn và có thể dẫn đến nhiều lượt bình chọn hơn. Hãy nhớ rằng bạn đang trả lời câu hỏi cho độc giả trong tương lai, không chỉ người hỏi bây giờ. Vui lòng chỉnh sửa câu trả lời của bạn để thêm giải thích và đưa ra dấu hiệu về những hạn chế và giả định được áp dụng.
Brian

Mã này rất hay, nhưng sẽ đẹp hơn nếu bạn giải thích nó. Otdelna, Ya ne khói paniat.
Tiến sĩ MAF

2

Và cũng ng update @angular/materialsẽ cập nhật mã của bạn và sửa tất cả nhập khẩu


Điều này sẽ chỉ cập nhật gói.json và gói-lock.json. Sẽ không thay đổi bất cứ điều gì trong mã của chúng tôi
Joel K Thomas

1
Chỉ cần nâng cấp từ 7 lên 9, nó đã sửa lỗi nhập khẩu của tôi, thực sự.
Tobias Stangl

Bạn đã cứu ngày của tôi, cảm ơn !!!
Nicolas

0

Câu trả lời được chấp nhận là đúng, nhưng nó không hoàn toàn phù hợp với tôi. Tôi đã phải xóa tệp pack.lock, chạy lại "npm install", sau đó đóng và mở lại studio hình ảnh của tôi. Hy vọng điều này sẽ giúp ai đó


0

Chỉ cần cập nhật @ angular / liệu từ 7 đến 9 ,

npm gỡ cài đặt @ angular / liệu - lưu

npm cài đặt @ angular / liệu @ ^ 7.1.0 - lưu

ng cập nhật @ góc / vật liệu

Chỉ cần chờ đợi và xem Angular thực hiện Di chuyển một mình,

Hy vọng nó sẽ giúp được ai đó :)


-5

Làm npm i -g @angular/material --saveđể giải quyết vấn đề


Xem xét thêm chi tiết và việc sử dụng mã được định dạng
MehrdadEP
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.