오류 : 모듈에서 예기치 않은 값 '정의되지 않음'을 가져 왔습니다.


95

NgModule로 마이그레이션 한 후이 오류가 발생합니다. 오류가 너무 많이 도움이되지 않습니다. 조언을 부탁드립니다.

Error: Error: Unexpected value 'undefined' imported by the module 'AppModule'
        at new BaseException (http://localhost:5555/node_modules/@angular/compiler/bundles/compiler.umd.js:5116:27)
        at eval (http://localhost:5555/node_modules/@angular/compiler/bundles/compiler.umd.js:13231:35)
        at Array.forEach (native)
        at CompileMetadataResolver.getNgModuleMetadata (http://localhost:5555/node_modules/@angular/compiler/bundles/compiler.umd.js:13215:48)
        at RuntimeCompiler._compileComponents (http://localhost:5555/node_modules/@angular/compiler/bundles/compiler.umd.js:15845:51)
        at RuntimeCompiler._compileModuleAndComponents (http://localhost:5555/node_modules/@angular/compiler/bundles/compiler.umd.js:15769:41)
        at RuntimeCompiler.compileModuleAsync (http://localhost:5555/node_modules/@angular/compiler/bundles/compiler.umd.js:15746:25)
        at PlatformRef_._bootstrapModuleWithZone (http://localhost:5555/node_modules/@angular/core/bundles/core.umd.js:9991:29)
        at PlatformRef_.bootstrapModule (http://localhost:5555/node_modules/@angular/core/bundles/core.umd.js:9984:25)
        at Object.eval (http://localhost:5555/app/main.js:8:53)
    Evaluating http://localhost:5555/app/main.js
    Error loading http://localhost:5555/app/main.js "Report this error at https://github.com/mgechev/angular2-seed/issues"(anonymous function) @ contracts:142ZoneDelegate.invoke @ zone.js?1472711930202:332Zone.run @ zone.js?1472711930202:225(anonymous function) @ zone.js?1472711930202:586ZoneDelegate.invokeTask @ zone.js?1472711930202:365Zone.runTask @ zone.js?1472711930202:265drainMicroTaskQueue @ zone.js?1472711930202:491ZoneTask.invoke @ zone.js?1472711930202:435

app.module.ts :

    import { NgModule } from '@angular/core';
    import { BrowserModule } from '@angular/platform-browser';
    import { APP_BASE_HREF } from '@angular/common';
    import { RouterModule } from '@angular/router';
    import { HttpModule } from '@angular/http';
    import { AppComponent } from './app.component';
    import { routes } from './app.routes';

    import { provide } from '@angular/core';

    //dgf ng2-translate
    import { TRANSLATE_PROVIDERS, TranslateLoader, TranslateStaticLoader, MissingTranslationHandler } from 'ng2-translate/ng2-translate';
    import { HTTP_PROVIDERS, Http } from '@angular/http';
    import { FormsModule,ReactiveFormsModule } from '@angular/forms';
    import { TranslationNotFoundHandler } from './shared/common/TranslationNotFoundHandler';
    //dgf ng2-translate END

    import {CalendarModule,DataTableModule,DialogModule,PanelModule} from 'primeng/primeng';

    import {TranslateModule} from 'ng2-translate/ng2-translate';

    import { AuthGuard,AppConfigService,AppConfig,DateHelper,ThemeComponent,ToolbarComponent, RemoveHostTagDirective } from './index';
    import { HomeComponent,MessagesExampleComponent,PrimeNgHomeComponent,CalendarComponent,Ng2BootstrapExamplesComponent,DatepickerDemoComponent,UserListComponent,UserEditComponent,ContractListComponent,AboutComponent } from './index';


@NgModule({
  imports: [BrowserModule, HttpModule, RouterModule.forRoot(routes), /* AboutModule, HomeModule, SharedModule.forRoot()*/
          FormsModule,
          ReactiveFormsModule,
          //third-party
          ,TranslateModule.forRoot() //,
          //third-party PRIMENG
          ,CalendarModule,DataTableModule,DialogModule,PanelModule
  ],
  declarations: [
    AppComponent,ThemeComponent, ToolbarComponent, RemoveHostTagDirective,
    HomeComponent,MessagesExampleComponent,PrimeNgHomeComponent,CalendarComponent,Ng2BootstrapExamplesComponent,DatepickerDemoComponent,UserListComponent,UserEditComponent,ContractListComponent,AboutComponent
  ],
  providers: [{
      provide: APP_BASE_HREF,
      useValue: '<%= APP_BASE %>'
    },
    FormsModule,
    ReactiveFormsModule,
    provide(TranslateLoader, { //DGF ng2-translate
          useFactory: (http: Http) => new TranslateStaticLoader(http, 'assets/i18n', '.json'),
          deps: [Http]
      }),
    provide(MissingTranslationHandler, { useClass: TranslationNotFoundHandler }), //DGF ng2-translate

    AuthGuard,AppConfigService,AppConfig,
    DateHelper
  ],
  bootstrap: [AppComponent]
})

export class AppModule { }

3
나는 두 개의 모듈 모두 서로 가져가 있었을 때 나는이 문제를 가지고 있었다
마태 복음 Hegarty

나는 같은 문제가 있었고 편집기를 다시 시작하면 도움이되었습니다. 새로 추가 된 파일을 인식하지 못했습니다.
Jyotirmaya Prusty

6
누가 이런 오류를 더 설명해야한다고 생각합니까?
Pramesh Bajracharya

가져 오기 배열에 빈 항목이 있기 때문에이 오류가 발생했습니다., ,
wutzebaer

답변:


210

이 같은 오류에 직면 한 사람에게 내 상황은 수입 섹션에 이중 쉼표가 있다는 것입니다.

imports: [
      BrowserModule,
      HttpModule,
      FormsModule,
      RouterModule.forRoot(appRoutes), , // <-- this was the error
      // .... 
],

1
나는 처음에 쉼표를 가지고 있었다. [, BrowserModule
ozOli

1
나에게는 점 (.)이었다
Raghuram

1
나도 문제를 해결했습니다!
미채 악

81

모듈이 서로 가져 오지 않도록하십시오. 그래서,

모듈 A에서 : imports[ModuleB]

모듈 B : imports[ModuleA]


59

이는 다음과 같은 여러 시나리오로 인해 발생할 수 있습니다.

  1. 쉼표 누락
imports: [
    BrowserModule
   ,routing <= Missing Comma
   ,FeatureComponentsModule
  ],
  1. 이중 쉼표
imports: [
    BrowserModule, 
   ,routing <=Double Comma
   ,FeatureComponentsModule
  ],
  1. 모듈에서 아무것도 내보내기
  2. 구문 오류
  3. 오타 오류
  4. 객체, 배열 내부의 세미콜론
  5. 잘못된 수입 명세서

3
좋은 요약입니다. Angular가 모듈로드가 실패하는 위치와 방법에 대한 정보를 제공 할 수 있다면 좋을 것입니다. 현재 상태에서 디버깅하는 것은 가장 지루한 작업 중 하나입니다. "누락 된 쉼표"비트를 이해하는지 확실하지 않으면 제대로 컴파일되어야합니까?
unitario

누락 된 쉼표 부분을 이해합니다. app.module.ts 파일-imports :, provider :, declarations ... etc set of arrays-언급 된 문자열 값 목록에서 쉼표가 EXTRA인지 또는 누락되었는지 확인합니다.이 문제를 해결했습니다. 여분의 쉼표를 제거하여! @Ignatius Andrew ... 너는 신이다! Angular 2/4는 매우 기발합니다!
HydTechie

30

위의 솔루션 중 어느 것도 나를 위해 일하지 않았지만 단순히 "ng serve"를 중지하고 다시 실행합니다.


5
하하 예, 저도 그렇습니다. 라우팅을 엉망으로 만들 때 때때로 Angular는 다시 시작해야합니다. 중요한 핵심 가져 오기 또는 내보내기를 모듈간에 이동할 때도 마찬가지입니다.
Florian Leitgeb

여러 상황에서 일반적인 문제. Angular 팀이 작업해야합니다.
Dimitris Voudrias

저도 마찬가지입니다. Angular는이 문제에서 작동합니다. 내 시간 낭비 : /
Lint

저에게는circular dependency
Vishal Suthar


23

내가했기 때문에이 오류가 발생했습니다 index.ts내 수출 된 내 응용 프로그램의 루트에 파일을 app.component.ts. 그래서 다음을 할 수 있다고 생각했습니다.

import { AppComponent } from './';

이것은 효과가 있었고 빨간 구불 구불 한 선을주지 않았고 입력을 시작하면 intellisense가 AppComponent를 표시합니다. 그러나 그것이이 오류의 원인임을 알아보십시오. 내가 그것을 다음으로 변경 한 후 :

import { AppComponent } from './app.component';

오류가 사라졌습니다.


1
나는 또한 당신이 명시 적으로 './index'를 쓸 때 작동한다고 생각합니다. AoT 및 ng-packagr과 함께이 문제가 발생했습니다.
bersling

8

다음과 같은 모듈 / 구성 요소를 가져 오지 않아야합니다.

import { YOUR_COMPONENT } from './';

그러나 그것은

import { YOUR_COMPONENT } from './YOUR_COMPONENT.ts';


5

구성 요소 라이브러리를 구축 중이며 해당 라이브러리를 가져 오는 내 앱에서이 오류가 발생하기 시작했습니다. 실행 중이 ng build --prod거나 ng serve --aot앱에서 다음과 같이 표시됩니다.

Unexpected value 'undefined' imported by the module 'ɵm in node_modules/<library-name>/<library-name>.d.ts'

그러나 ng serve.NET에서 빌드 할 때도 라이브러리 자체에서 모듈을 사용 하거나 테스트 할 때 오류가 없습니다 --prod.

나는 또한 지능에 의해 오도되었다. 내 모듈 중 일부에 대해 자매 모듈을 다음과 같이 가져 왔습니다.

import { DesignModule } from '../../design';

대신에

import { DesignModule } from '../../design/design.module';

내가 설명한 것을 제외한 모든 빌드에서 잘 작동했습니다.

이것은 고정하기 끔찍했고 그보다 더 오래 걸리지 않은 것은 운이 좋았습니다. 이것이 누군가를 돕기를 바랍니다.


그것이 xD였습니다. 우연히 잘못된 버전을 선택하지 않도록 intellisense를 구성하는 방법을 알고 있습니까?
user2035039

죄송합니다.
Nayfin 19

4

Angular 5 응용 프로그램을 컴파일하려고 할 때 동일한 예외가 발생했습니다.

Unexpected value 'undefined' imported by the module 'DemoAppModule'

제 경우에는 madge 도구를 사용하여 찾은 순환 종속성 이었습니다 . 다음을 실행하여 순환 종속성이 포함 된 파일을 찾았습니다.

npx madge --circular --extensions ts src/

3

당신은 줄을 제거 할 필요가 import { provide } from '@angular/core';에서 app.module.tsprovide지금은 사용되지 않습니다. provide제공자에서 아래와 같이 사용해야 합니다.

providers: [
    {
      provide: APP_BASE_HREF,
      useValue: '<%= APP_BASE %>'
    },
    FormsModule,
    ReactiveFormsModule,
    // disableDeprecatedForms(),
    // provideForms(),
    // HTTP_PROVIDERS, //DGF needed for ng2-translate
    // TRANSLATE_PROVIDERS, //DGF ng2-translate (not required, but recommended to have 1 unique instance of your service)
    {
        provide : TranslateLoader,
        useFactory: (http: Http) => new TranslateStaticLoader(http, 'assets/i18n', '.json'),
        deps: [Http]
    },
    {
        provide : MissingTranslationHandler,
        useClass: TranslationNotFoundHandler
    },

    AuthGuard,AppConfigService,AppConfig,
    DateHelper
  ]

감각이 그, 나는 그것을 한 적이 있지만 오류가 여전히 동일합니다
surfealokesea

3

공급자를 forRoot에 넣는 것만으로도 작동합니다 : https://github.com/ocombe/ng2-translate

@NgModule({
  imports: [BrowserModule, HttpModule, RouterModule.forRoot(routes), /* AboutModule, HomeModule, SharedModule.forRoot()*/
          FormsModule,
          ReactiveFormsModule,
          //third-party
          TranslateModule.forRoot({
            provide: TranslateLoader,
            useFactory: (http: Http) => new TranslateStaticLoader(http, '/assets/i18n', '.json'),
            deps: [Http]
          })
          //third-party PRIMENG
          ,CalendarModule,DataTableModule,DialogModule,PanelModule
  ],
  declarations: [
    AppComponent,ThemeComponent, ToolbarComponent, RemoveHostTagDirective,
    HomeComponent,MessagesExampleComponent,PrimeNgHomeComponent,CalendarComponent,Ng2BootstrapExamplesComponent,DatepickerDemoComponent,UserListComponent,UserEditComponent,ContractListComponent,AboutComponent
  ],
  providers: [
    {
      provide: APP_BASE_HREF,
      useValue: '<%= APP_BASE %>'
    },
    // FormsModule,
    ReactiveFormsModule,
    { provide : MissingTranslationHandler, useClass: TranslationNotFoundHandler},
    AuthGuard,AppConfigService,AppConfig,
    DateHelper
  ],
  bootstrap: [AppComponent]
})

export class AppModule { }

3

이것에 대한 또 다른 간단한 해결책이 있습니다. 나는 서로를 사용하여 어떻게 든 구조에 깊은 2 개의 모듈이 있습니다. 나는 webpack과 angular 2의 순환 의존성에서 같은 문제에 부딪 혔습니다. 하나의 모듈이 선언되는 방식을 간단히 변경했습니다.

....

@NgModule({
    imports: [
        CommonModule,
        FormsModule,
        require('../navigation/navigation.module')
    ],
    declarations: COMPONENTS,
    exports: COMPONENTS
})
class DppIncludeModule {
    static forRoot(): ModuleWithProviders {
        return {
            ngModule: DppIncludeModule
        };
    }
}

export = DppIncludeModule;

이제 ngModule 속성에서 imports 문을 사용할 때 간단히 다음을 사용합니다.

@NgModule({
    imports: [
        CommonModule,
        ServicesModule.forRoot(),
        NouisliderModule,
        FormsModule,
        ChartModule,
        DppAccordeonModule,
        PipesModule,
        require('../../../unbranded/include/include.module')
    ],
....

이것으로 모든 문제가 사라졌습니다.


이것이 어떻게 작동하는지 좀 더 자세히 설명해 주시겠습니까? 예를 들어, 컴포넌트에서 DppIncludeModule을 어떻게 사용합니까?
Kate S

케이트, 답변이 늦어서 죄송합니다. 구성 요소에서 모듈을 사용하지 않고 구성 요소를 모듈로 캡슐화합니다. 모듈은 함께 사용됩니다. 정의되지 않은 오류로 인해 여기에 또 다른 문제가있을 수 있습니다.
Michael Baarz

3

내 문제는 index.ts에서 두 번 내보내기가 발생했습니다.

그중 하나를 제거하면 문제가 해결되었습니다.


이것은 나를 위해 일했습니다! index.ts에서 모듈을 내보내고 모듈이 동일한 index.ts에서 모듈 구성 요소를 가져 오면 순환 로딩이 발생하는 것 같습니다. 인덱스가 아닌 컴포넌트 파일에서 직접 모듈로 가져와야합니다. TNX
Tomas Katz

트러블 샷. 이 답변을 보지
않고이

3

나는이 문제가 있었지만 콘솔의 오류가 설명 적이 지 않은 것은 사실입니다. 그러나 angular-cli 출력을 보면 :

순환 종속성을 가리키는 경고가 표시됩니다.

WARNING in Circular dependency detected:
module1 -> module2
module2 -> module1

따라서 해결책은 모듈 중 하나에서 하나의 가져 오기를 제거하는 것입니다.


순환 종속성이 필요한 경우 어떻게합니까?
Evan Sevy

@RuneStar 종속성을 더 높은 수준의 모듈로 이동 한 다음 양쪽 (X) 모듈에서 새 모듈을 가져와야한다고 생각합니다.
T04435

2

문제는 소스 파일이 누락 된 가져 오기가 하나 이상 있다는 것입니다.

예를 들어 내가 사용할 때 동일한 오류가 발생했습니다.

       import { AppRoutingModule } from './app-routing.module';

그러나 './app-routing.module'파일은 주어진 경로에 없습니다.

이 가져 오기를 제거하고 오류가 사라졌습니다.


2

나는 같은 오류가 있었고 위의 팁 중 어느 것도 도움이되지 않았습니다.

제 경우에는 두 개의 가져 오기를 하나로 결합한 WebStorm에 의해 발생했습니다.

import { ComponentOne, ComponentTwo } from '../component-dir';

나는 이것을 두 개의 개별 수입품으로 추출했습니다.

import { ComponentOne } from '../component-dir/component-one.service';
import { ComponentTwo } from '../component-dir/component-two.model';

이 후 오류없이 작동합니다.


고마워 친구. 도움이되었습니다
DinoMyte 2018 년

이전 답변의 중복 : stackoverflow.com/a/49667611/1243048
Maelig

@Maelig 링크 된 답변에서 조금 다른 문제라고 생각합니다. 이 오타인지 모르겠어요하지만 문제는 너무 적절한 디렉토리에 존재 한 시간은 ./models그것이 다른 시간./model
야쿱 Rybiński

1

색인이 모듈을 내보내는 경우-해당 모듈은 동일한 색인에서 구성 요소를 가져 오지 않아야하며 구성 요소 파일에서 직접 가져와야합니다.

이 문제가 있었는데 색인을 사용하여 모듈 파일의 구성 요소를 가져 오는 것에서 직접 파일을 사용하여 가져 오는 것으로 변경했을 때이 문제가 해결되었습니다.

예 : 변경됨 :

import { NgModule } from '@angular/core';
import { MainNavComponent } from './index';
@NgModule({
  imports: [],
  exports: [MainNavComponent],
  declarations: [ MainNavComponent ],
  bootstrap:    [ MainNavComponent ]
})
export class MainNavModule {}

에:

import { NgModule } from '@angular/core';
import { MainNavComponent } from './MainNavComponent';
@NgModule({
  imports: [],
  exports: [MainNavComponent],
  declarations: [ MainNavComponent ],
  bootstrap:    [ MainNavComponent ]
})
export class MainNavModule {}

또한 색인에서 이제 불필요한 내보내기를 제거하십시오. 예 :

export { MainNavModule } from './MainNavModule';
export { MainNavComponent } from './MainNavComponent';

에:

export { MainNavModule } from './MainNavModule';

감사합니다. IDE는 폴더에서 가져옵니다. 예 : '/ components'내 라이브러리는 문제없이 빌드되었지만 다른 라이브러리에서 사용할 수 없습니다
Mosta

1

또 다른 이유는 다음과 같은 코드 일 수 있습니다.

import { NgModule } from '@angular/core';
import { SharedModule } from 'app/shared/shared.module';
import { CoreModule } from 'app/core/core.module';
import { RouterModule } from '@angular/router';
import { COMPANY_ROUTES } from 'app/company/company.routing';
import { CompanyService } from 'app/company/services/company.service';
import { CompanyListComponent } from 'app/company/components/company-list/company-list.component';

@NgModule({
    imports: [
        CoreModule,
        SharedModule,
		RouterModule.forChild(COMPANY_ROUTES)
    ],
    declarations: [
		CompanyListComponent
    ],
    providers: [
		CompanyService
    ],
    exports: [
    ]
})
export class CompanyModule { }

exports는 빈 배열이고를 가지고 있기 때문에 제거해야합니다.


1

동일한 문제가 발생하여 index.ts에 구성 요소를 추가했습니다. 하여 a = of 폴더 에 내보내기를 수행했습니다. 여전히 정의되지 않은 오류가 발생했습니다. 하지만 IDE는 빨간색 구불 구불 한 선을 표시합니다.

그런 다음 제안 된대로 변경

import { SearchComponent } from './';

import { SearchComponent } from './search/search.component';

1

잘못하고 있지 않다는 것이 확실하다면 "ng serve"를 종료하고 다시 시작하십시오. 이렇게하면 컴파일러가 모든 작업을 수행하고 앱이 예상대로 작동합니다. 모듈에 대한 이전 경험을 통해 "ng serve"가 실행되지 않을 때 모듈을 생성하거나 완료되면 터미널을 다시 시작하도록 배웠습니다.

"ng serve"를 다시 시작하는 것은 새 구성 요소를 다른 구성 요소에 내보낼 때도 작동합니다. 컴파일러가 새 구성 요소를 인식하지 못했을 수 있습니다. "ng serve"를 다시 시작하면됩니다.

이것은 불과 몇 분 전에 나를 위해 일했습니다.


0

모든 색인 내보내기 파일을 삭제하고 파이프, 서비스를 포함하여 수정합니다. 모든 파일 가져 오기 경로는 특정 경로입니다. 예.

import { AuthService } from './_common/services/auth.service';

바꾸다

import { AuthService } from './_common/services';

게다가 기본 클래스를 내 보내지 마십시오.


하지만 그게 어떻게 도움이 될까요? 파일 이름을 제거하면 할당중인 폴더의 index.ts가 사용됩니다.
Michael Baarz

그 당시 @MichaelBaarz, 색인 파일을 다시 사용하면 문제를 해결할 수 있습니다. 하지만 이제 ng 버전을 2.4.9로 업그레이드하면 문제가 없습니다. 즉, index.ts 파일 내보내기 참조를 사용할 수 있습니다. 그래서 나는 그것이 어쩌면 빌드 겨와 함께 발행 생각
wfsovereign

적어도 이것은 엣지 케이스이며 잘못된 패키지 구조의 결과입니다. 패키지에는 왕복이 없어야합니다. 패키지 구조를 명확히하면 문제가 해결됩니다.
Michael Baarz

@MichaelBaarz 네, 동의합니다.
wfsovereign

0

내 문제는 component.ts.

import 문에 오류가 표시되지 않았지만 선언이 표시되어 잘못되었습니다.


0

app.component.ts 의 생성자에서 사용되지 않은 " private http : Http "인수로 인해 동일한 오류가 발생 했으며 생성자의 사용하지 않는 인수를 제거하면 해결되었습니다.


0

대부분의 경우 오류는 AppModule.ts 파일과 관련이 있습니다.

이 문제를 해결하려면 모든 구성 요소가 선언되어 있고 우리가 선언하는 모든 서비스가 공급자 등에 포함되어 있는지 확인하십시오.

AppModule 파일에 모든 것이 올바르게 표시되고 여전히 오류가 발생하더라도 실행중인 앵귤러 인스턴스를 중지하고 다시 한 번 다시 시작하십시오. 모듈 파일의 모든 것이 올 바르고 여전히 오류가 발생하면 문제가 해결 될 수 있습니다.


0

나에게 문제는 가져 오기 순서를 변경하여 해결되었습니다.

하나는 오류가 있습니다.

imports: [ 
 BrowserModule, HttpClientModule, AppRoutingModule, 
 CommonModule
],

이것을 다음으로 변경했습니다.

   imports: [
    BrowserModule, CommonModule, HttpClientModule,
    AppRoutingModule
  ],

1
BrowserModule은 CommonModule을 내보내고 둘 다 중복되므로 문제와 관련이 없습니다.
Semir Deljić 2011

0

위의 솔루션은 저에게 효과적이지 않습니다.

그래서 1.4.4에 대해 1.6.4의 angular-cli 버전을 백업했고 이것은 내 문제를 해결했습니다.

이것이 최선의 해결책인지 모르겠지만 지금은 이것이 저에게 효과적이었습니다.


0

나는 같은 문제에 직면했다. 문제는 index.ts에서 일부 클래스를 가져오고 있다는 것입니다.

    import {className} from '..shared/index'

index.ts에는 export 문이 포함됩니다.

    export * from './models';

실제 클래스 객체를 포함하는 .ts 파일로 변경했습니다.

    import {className} from '..shared/model'

그리고 그것은 해결되었습니다.


0

나 에게이 오류는 사용하지 않은 가져 오기로 인해 발생했습니다.

import { NgModule, Input } from '@angular/core';

결과 오류 :

입력이 선언되었지만 값을 읽지 못함

주석 처리하면 오류가 발생하지 않습니다.

import { NgModule/*, Input*/ } from '@angular/core';

0

나는 상황에서이 문제를 만났다. - app-module --- app-routing // app router ----- imports: [RouterModule.forRoot(routes)] --- demo-module // sub-module ----- demo-routing ------- imports: [RouterModule.forRoot(routes)] // --> should be RouterModule.forChild!

단지이 있기 때문에 root.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.