【问题标题】:Angular CLI ERROR in Cannot read property 'loadChildren' of null无法读取 null 的属性“loadChildren”中的 Angular CLI 错误
【发布时间】:2017-08-24 02:48:16
【问题描述】:

我正在将一个项目转换为使用 Angular cli,并且一切正常(一旦构建),但我在构建过程中出现了奇怪的行为。

ng serve 我第一次尝试时总是收到此错误:ERROR in Cannot read property 'loadChildren' of null

ng build 会抛出同样的错误

但如果我使用ng build --watch 在第一次构建失败并且我编辑一个文件以再次触发构建之后,它将成功。我对ng build -prod --watch也有同样的行为@

任何想法如何在第一次就正确构建?

请注意,我的项目中没有任何子路由/模块,也没有任何其他输出来查看导致此问题的原因。

更新:用子路由测试,我仍然得到相同的行为

更新:将 @angular 库从 4.0.0 降级到 2.4.0,我仍然得到完全相同的行为,但错误消息不同;

AppModule 中的错误不是 NgModule

【问题讨论】:

  • 你看过这个吗? github.com/angular/angular-cli/issues/3841 你在用 export default 吗?你还在用什么版本的cli?
  • 是的,我确实在 github 上看到了这个问题。但是,我不使用导出默认值。我不认为它可以解释这种行为,因为使用导出默认值总是会导致构建失败,你不觉得吗?
  • 嗯,您是否尝试过卸载 cli 并重新安装? npm uninstall -g @angular/cli 然后重新安装。在您的应用程序中,删除node_modules 文件夹,然后删除npm install 再次尝试ng serve。此外,可能值得尝试运行项目的本地 cli 而不是全局 cli。您可以通过运行npm start 来执行此操作,这基本上会在scripts 中调用start 脚本package.json 如果这不起作用,请在此处发布您的路由器配置
  • @Ahmed 不确定您想看什么?我的 AppModule 中有默认的 RouterModule.forRoot(appRoutes)
  • 我想看看 appRoutes

标签: angular angular-cli


【解决方案1】:

无法加载 app.module 中的 Angular CLI 错误 当内部路由文件中有一些语法错误时会出现此问题。 所以请检查路由数组中的语法

【讨论】:

【解决方案2】:

在我的情况下,这是因为相同的路由路径添加了两次以加载两个不同的组件,如下所示

{
   path: '', redirectTo: 'pageone', pathMatch: 'full'
},
{
   path: 'pageone',
   component: PageOneComponent
},
{
   path: '',
   children: [
  ...['PageTwoPartOne', 'PageTwoPartTwo', 'PageTwoPartOneQuickReference'].map(path => ({
      path,
      component: PageTwoComponent
    }))
   ]
},

更正路径之一(路径:'')后,它对我有用。

【讨论】:

    【解决方案3】:

    由于以下路由中的双逗号,我收到此错误

    【讨论】:

    • 是的!甚至我也有同样的错误,因为这个愚蠢的复制粘贴错误!角 10
    【解决方案4】:
    **Angular CLI ERROR in Cannot read property 'loadChildren' of null**
    

    当路由名称不遵循驼峰命名标准时会出现此问题。我将 dsar-config 命名为模块,当我将其更改为 dsarConfig 时,我没有收到任何编译错误。

    【讨论】:

      【解决方案5】:

      我遇到了同样的错误,但我的要求是将所有路由放在一个单独的文件中。我通过简单地像这样导出我的 Routes[] 来解决它:

      export const routes: Routes = [
       // ... all my route objects
      ];
      

      【讨论】:

        【解决方案6】:

        在我的情况下,我在尝试将一个路由数组连接到另一个时遇到了它:

        export const businesslogicState: Routes = BUSINESSLOGIC_ROUTES.concat(gamesRoutes);
        

        concat 的每个部分都是Route[]

        将一个元素数组 gamesRoutes 更改为 Route 对象本身没有帮助,仍然出现相同的错误。

        【讨论】:

          【解决方案7】:

          在我的情况下,this answer 到一个相关的 Github 问题修复了我的错误。

          如果它被删除,修复会改变这一点:

          export const ROUTES = MY_ROUTES.map(TO_ANGULAR_ROUTE)
          

          对此:

          export const ROUTES = [];
          ROUTES.push(...MY_ROUTES.map(TO_ANGULAR_ROUTE));
          

          【讨论】:

          • 啊啊就是这样..奇怪的是我们不能直接在导出的数组中休息
          【解决方案8】:

          为了完整性:我在从相关对象列表创建路由时遇到了这个问题:

          import { NgModule } from '@angular/core';
          import { RouterModule, Route } from '@angular/router';
          import { DashboardComponent } from './dashboard/dashboard.component';
          import { EXAMPLES, Example } from './examples-list';
          
          const routes = [
            ...EXAMPLES.map(toRoute), // this line produced the error
            { path: '', redirectTo: '/dashboard', pathMatch: 'full' },
            { path: 'dashboard', component: DashboardComponent },
            { path: '**', redirectTo: '/dashboard', pathMatch: 'full' }
          ];
          
          @NgModule({
            imports: [RouterModule.forRoot(routes)],
            exports: [RouterModule]
          })
          export class AppRoutingModule { }
          
          // `export`ing this function fixed the error
          export function toRoute(ex: Example): Route {
            return {
              path: ex.path,
              component: ex.component,
              data: { title: ex.title }
            };
          }
          

          我必须 export 我在 map() 中使用的函数。

          【讨论】:

            【解决方案9】:

            我在为我的应用程序提供服务后遇到了这个问题,并通过在一个甚至没有处于编辑/未保存状态的文件中按 Ctrl+s 解决了这个问题。现在它编译没有警告。然而,第一次编译是一件很奇怪的事情。

            将对象实例存储在变量中并将该变量设置为我的 [lazyLoaded] 路由的 data 对 TS/NG 编译器来说是不可接受的。但是,直接在路由的 data 属性上实例化对象是可以接受的。

            我很清楚以上所有内容都没有任何直观意义,但我希望这可以节省您自己找到此内容的时间。

            【讨论】:

              【解决方案10】:

              这可能是由于您的项目中存在一些语法错误,请使用

              构建

              ng build --prod --aot

              获取更详细的错误消息。

              【讨论】:

              • 虽然不是语法错误,但这种方式有助于理解问题所在:)
              【解决方案11】:

              Mocks、组件和 RouteGuards

              要检查的另一件事是,您是否在路由声明中为虚拟组件模拟/存根任何类。模拟的 RouteGuard 似乎也可能发生这种情况。

              【讨论】:

                【解决方案12】:

                我在使用 Angular CLI v1.6 时也遇到了类似的问题。

                就我而言,我没有使用.concat() 或任何其他类型的路由器定义动态操作。

                我在路由的数据属性中有一个函数,它是一个匿名箭头函数。将其更改为命名的导出函数为我解决了这个问题。

                之前:

                 {
                    path: ':id',
                    component: ProductDetailComponent,
                    data: {
                        breadcrumb: (data: any, params: any) => {
                            let id = params['id'];
                            return id === 'create' ? 'New Product' : data.product.ShortDescription;
                        }
                    }
                }
                

                之后:

                {
                    path: ':id',
                    component: ProductDetailComponent,
                    data: { breadcrumb: getBreadcrumb }
                }
                
                export function getBreadcrumb(data: any, params: any): string {
                    let id = params['id'];
                    return id === 'create' ? 'New Product' : data.product.ShortDescription;
                }
                

                【讨论】:

                • 我正在使用 .concat ,这给我带来了问题。我最终使用了扩展运算符,例如[...array1, ...array2] 并且有效。
                【解决方案13】:

                我的路由有多个 ts 文件,我所做的是在我的 app.routes 中导入所有这些路由,然后将它们全部连接在一起以调用 forRoot:

                export const appRoutes = xRoutes.concat(zRoutes)

                将我的所有路由放在一个文件/导出 const 语句中后,错误/奇怪的构建行为消失了。

                【讨论】:

                • 我遇到了同样的问题,但为什么会这样?我需要为我的一些路由添加一些属性,所以我肯定想先设置多个数组,然后操作其中一些,然后再连接它们。你知道问题出在哪里吗?
                猜你喜欢
                • 1970-01-01
                • 2017-09-25
                • 1970-01-01
                • 2019-01-14
                • 2020-09-06
                • 1970-01-01
                • 1970-01-01
                • 2021-11-07
                • 2021-11-14
                相关资源
                最近更新 更多