Max*_*Max 7 typescript webpack angular nrwl nrwl-nx
背景:
我正在构建一个 Angular 仪表板,在其中动态导入小部件(Angular 模块和组件)(无需路由)。我在这篇精彩文章的帮助下实现了这一点https://netbasal.com/welcome-to-the-ivy-league-lazy-loading-components-in-angular-v9-e76f0ee2854a。
我也在使用 Nx,我的每个小部件都是一个“NX Angular 库”。
问题:
在我的代码中,我想使用 Nx 设置的路径别名,如下所示:
import { Injectable } from '@angular/core';
@Injectable({
providedIn: 'root'
})
export class LayoutService {
loadWidget(name: string) {
return import(
/* webpackMode: "lazy" */
/* webpackPrefetch: true */
`@dashboard/widget-${name}`
);
}
}
Run Code Online (Sandbox Code Playgroud)
但这会导致错误提示@dashboard找不到模块。但是,如果我以非动态方式使用路径,例如:
import { Injectable } from '@angular/core';
@Injectable({
providedIn: 'root'
})
export class LayoutService {
loadInfoWidget() {
return import(
/* webpackMode: "lazy" */
/* webpackPrefetch: true */
`@dashboard/widget-info`
);
}
}
Run Code Online (Sandbox Code Playgroud)
然后一切正常。我知道问题是 Webpack 没有获取动态路径?可以配置吗?
笔记:
如果我使用没有别名的相对路径,如下所示:
import { Injectable } from '@angular/core';
@Injectable({
providedIn: 'root'
})
export class LayoutService {
loadWidget(name: string) {
return import(
/* webpackChunkName: "[request]" */
/* webpackMode: "lazy" */
/* webpackPrefetch: true */
`../../../../widgets/${name}-widget/src/lib/${name}-widget.component`
);
}
}
Run Code Online (Sandbox Code Playgroud)
然后它就可以工作了,但这有点“丑陋”,还不确定它是否会导致任何其他问题。另外,它给出的块文件名info-widget-src-lib-info-widget-component.js也比“dashboard-widget-info.js”更“难看”。
问题:
那么,是否可以使用 NX、Typescript 和 Angular 配置动态别名路径,如果可以,如何配置?或者如果您有更好的方法来解决这个问题,请分享您的想法。
谢谢你!