Угловая ошибка 6: нет фабрики модулей для типа зависимости: ContextElementDependency - PullRequest
0 голосов
/ 02 апреля 2019

Проблема: Когда я делаю ng build, я получаю эту ошибку:

No module factory available for dependency type: ContextElementDependency
Error: No module factory available for dependency type: ContextElementDependency
    at addDependency (/Users/kazuar/Projects/EducationFrontEnd/node_modules/webpack/lib/Compilation.js:696:12)
    at iterationOfArrayCallback (/Users/kazuar/Projects/EducationFrontEnd/node_modules/webpack/lib/Compilation.js:194:3)
    at addDependenciesBlock (/Users/kazuar/Projects/EducationFrontEnd/node_modules/webpack/lib/Compilation.js:714:5)
    at iterationOfArrayCallback (/Users/kazuar/Projects/EducationFrontEnd/node_modules/webpack/lib/Compilation.js:194:3)
    at addDependenciesBlock (/Users/kazuar/Projects/EducationFrontEnd/node_modules/webpack/lib/Compilation.js:717:5)
    at Compilation.processModuleDependencies (/Users/kazuar/Projects/EducationFrontEnd/node_modules/webpack/lib/Compilation.js:725:4)
    at afterBuild (/Users/kazuar/Projects/EducationFrontEnd/node_modules/webpack/lib/Compilation.js:857:15)
    at buildModule.err (/Users/kazuar/Projects/EducationFrontEnd/node_modules/webpack/lib/Compilation.js:901:11)
    at callback (/Users/kazuar/Projects/EducationFrontEnd/node_modules/webpack/lib/Compilation.js:630:5)
    at module.build.error (/Users/kazuar/Projects/EducationFrontEnd/node_modules/webpack/lib/Compilation.js:678:12)
    at resolveDependencies (/Users/kazuar/Projects/EducationFrontEnd/node_modules/webpack/lib/ContextModule.js:282:4)
    at ContextModule.result.resolveDependencies (/Users/kazuar/Projects/EducationFrontEnd/node_modules/@ngtools/webpack/src/angular_compiler_plugin.js:504:25)
    at ContextModule.build (/Users/kazuar/Projects/EducationFrontEnd/node_modules/webpack/lib/ContextModule.js:203:8)
    at Compilation.buildModule (/Users/kazuar/Projects/EducationFrontEnd/node_modules/webpack/lib/Compilation.js:635:10)
    at factory.create (/Users/kazuar/Projects/EducationFrontEnd/node_modules/webpack/lib/Compilation.js:884:14)
    at hooks.afterResolve.callAsync (/Users/kazuar/Projects/EducationFrontEnd/node_modules/webpack/lib/ContextModuleFactory.js:163:16)

Сначала я хотел бы сказать, что эта проблема возникла только тогда, когда я переключил маршрутизацию на отложенную загрузку с нетерпеливой загрузки. Когда я попытался вернуться к активной загрузке, у меня не было этой проблемы, так что, вероятно, это связано с этим, но я не знаю, что вызвало ее

Вот так выглядела моя таблица маршрутизации с энергичной загрузкой:

// Routing array - using eager loading
const appRoutes: Routes = [
  { path: 'login/:id', canActivate: [AuthGuard], children: [] },
  { path: '', canActivateChild: [AuthGuard], children: [
    { path: '', redirectTo: '/courses', pathMatch: 'full' },
    { path: 'courses', component: CourseListComponent,  pathMatch: 'full'},
    { path: 'courses/:courseId', component: CourseDetailComponent, pathMatch: 'full' },
    { path: 'courses/:courseId/unit/:unitId', component: CoursePlayComponent,
      children: [
        { path: '', component: CourseListComponent },
        { path: 'lesson/:lessonId', component: CourseLessonComponent, data:{ type: 'lesson'} },
        { path: 'quiz/:quizId', component: CourseQuizComponent, data: {type: 'quiz'} }
      ]}
    ]},
  { path: 'welcome', component: LandingPageComponent, pathMatch: 'full' },
  { path: '**', component: PageNotFoundComponent, pathMatch: 'full' }];

Это с ленивой загрузкой:

// app-routing.module

const routes:Routes = [
  { path: 'welcome', component: LandingPageComponent, pathMatch: 'full' },
  { path: 'login/:id', canActivate: [AuthGuard], children: [] },
  { path: '', canActivateChild: [AuthGuard], children: [
    { path: '', redirectTo: '/courses', pathMatch: 'full' },
    { path: 'courses', loadChildren: './courses/course.module#CourseModule', canLoad: [AuthGuard] }
  ]},
  { path: '**', component: PageNotFoundComponent, pathMatch: 'full' }
]


// course-routing.module

const routes:Routes = [
  {
    path: '',
    component: CourseListComponent,
    canActivate: [AuthGuard],
    canActivateChild: [AuthGuard],
    children:[
      { path: '', redirectTo: '/courses', pathMatch: 'full' },
      { path: ':courseId', component: CourseDetailComponent, pathMatch: 'full' },
      { path: ':courseId/unit/:unitId', component: CoursePlayComponent,
        children: [
          { path: '', component: CourseListComponent },
          { path: 'lesson/:lessonId', component: CourseLessonComponent, data:{ type: 'lesson'} },
          { path: 'quiz/:quizId', component: CourseQuizComponent, data: {type: 'quiz'} }
      ]}
  ]}
]

auth.guard:

import { Injectable } from '@angular/core';
import { Observable, throwError } from 'rxjs';
import { Router, CanActivate, CanActivateChild, CanLoad, ActivatedRouteSnapshot, RouterStateSnapshot, NavigationExtras, Route } from '@angular/router';
import { AuthUserService } from './users/auth-user.service';
import { LocalStorage } from '@ngx-pwa/local-storage';

@Injectable()
export class AuthGuard implements CanActivate , CanActivateChild {

    constructor(private authUserService: AuthUserService, private router: Router) {   }

    canActivate(route: ActivatedRouteSnapshot, state:
       RouterStateSnapshot): boolean |
       Observable<boolean> | Promise<boolean> {
         // save the id from route snapshot
         const id = +route.params.id;
         const course_id = +route.params.courseId;

         // if you try to logging with id
         if (id) {
           this.router.navigate(["/courses"]);
           return this.authUserService.login(id);
         }
         // if you're already logged in and navigate between pages
         else if (this.authUserService.isLoggedIn()){
           if (course_id){
             // check if someone try to access a locked course
             if (this.authUserService.isCourseNotPartOfTheSubscription(course_id)){
               this.router.navigate(["/welcome"]);
               return false;
             }
             else
               return true;
           }
           else
             return true;
         }
         else {
           this.router.navigate(["/welcome"]);
           return false;
         }
        }

      canActivateChild(route: ActivatedRouteSnapshot,state: RouterStateSnapshot): boolean |
      Observable<boolean> | Promise<boolean> {
         return this.canActivate(route, state);
       }

       canLoad(route: ActivatedRouteSnapshot,state: RouterStateSnapshot): boolean |
       Observable<boolean> | Promise<boolean> {
         return this.canActivate(route, state);
       }
}

Я добавил импорт в нужных местах и ​​следовал 3 различным учебникам. Я действительно не знаю, в чем проблема. Спасибо всем

1 Ответ

0 голосов
/ 03 апреля 2019

Я решил, мой веб-пакет не обновлялся и не поддерживал отложенную загрузку, поэтому я удалил его и установил последний, и он заработал

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...