如何从nrwl工作区libs文件夹中延迟加载模块?

时间:2018-02-03 07:32:49

标签: angular angular-cli nrwl

我有一个名为myapp的主应用。我已经配置了如下路线:

const routes: Routes = [
  { path: 'home', loadChildren: 'libs/home/home.module#HomeModule'},
  { path: 'admin', loadChildren: 'libs/admin/admin.module#AdminModule' },

  { path: '', redirectTo: '/home', pathMatch: 'full' },
  { path: '**', component: PageNotFoundComponent }
];

我的homeadmin是具有自己路由功能的模块,位于libs。当我运行我的应用程序时,我的模块没有加载。我想这只是一个路径问题..有人可以指导我如何从nrwl工作区的库文件夹中正确配置延迟加载模块吗?

这是我得到的错误:

ERROR Error: Uncaught (in promise): Error: Cannot find module 'libs/home/home.module'.
Error: Cannot find module 'libs/home/home.module'.
    at eval (eval at ../../../../../apps/myapp/src/$$_lazy_route_resource lazy recursive (main.bundle.js:6), <anonymous>:5:9)
    at ZoneDelegate.invoke (webpack-internal:///../../../../zone.js/dist/zone.js:388)

注意:我更新了我的tsconfig.app.json和tslint.json,如下所示: tslint.json

"nx-enforce-module-boundaries": [
      true,
      {
        "lazyLoad": [
          "home",
          "admin"
        ],
        "allow": []
      }
    ]

和tsconfig.app.json:

 "include": [
    "**/*.ts",
    /* add all lazy-loaded libraries here: "../../../libs/my-lib/index.ts" */
    "../../../libs/home/index.ts",
    "../../../libs/admin/index.ts"    
  ],

感谢。

4 个答案:

答案 0 :(得分:0)

https://nrwl.io/nx/guide-nx-workspace#create-an-angular-module-lib

ng生成lib mymodule --routing     --lazy --parentModule = apps / myapp / src / myapp.module.ts

答案 1 :(得分:0)

我有一个类似的错误。我不完全理解原因,所以下面是我的假设:

对于延迟加载,您应该执行以下操作:

  1. 将所有惰性模块导出为与众不同 index.ts文件。你应该 不导入这些文件;
  2. 在应用程序级别index.ts中添加对这些tsconfig.app.json文件的引用。注意-不是在根tsconfig.json中,而是在app/tsconfig.app.json中;
  3. 也许您应该在懒惰的RouterModule.forChild(routes)中执行lib.module.ts
  4. 确保您不要在任何地方导入延迟模块,也不要导入导出延迟模块的index.ts

答案 2 :(得分:0)

如果在创建lib时忘记添加参数--parentModule,则可以通过将lib添加到 apps / yourapp / tsconfig.app.json文件进入您的应用目录,并将您的模块添加到

"include": ["**/*.ts", "../../libs/auth/src/index.ts", "../../libs/your-libname/src/index.ts"]

和在app.module.ts


{
path: 'mypath',
loadChildren: '@workspace/your-libname#YourLibnameModule'
}

答案 3 :(得分:0)

使用Angular v8加载您的延迟加载库的方式如下:

{ path: 'home', loadChildren: () => import('@yourprefix/home').then(m => m.HomeModule) },