1

我正在使用 nrwl nx 工作区。我有一个工作区库 ( libs/jobs),其中包含我的“工作”模块的所有逻辑。它包含服务器端代码以及角度模块。角度模块对服务器代码没有依赖关系,但是如果我通过它加载模块失败,因为它在编译时import('@reporting/jobs').then(m => m.JobsClientModule)找不到节点 api 。fs

我认为摇树会消除未使用的服务器代码。为什么不呢?

我目前的解决方法是在tsconfig.json--> path:中添加一个新条目"@reporting/jobs-client": ["libs/jobs/src/client/index.ts"]。仅从模块中导入客户端内容。但这感觉很hacky :(

有什么建议可以为一个功能创建一个包含所有代码(服务器和客户端)的库/模块吗?

4

1 回答 1

2

Angular 使用 webpacks 包加载器,而后者又使用原生动态导入。

WebPack 将找到所有 import('') 并为它们创建入口点。所以我认为 Angular 没有办法神奇地解决这个问题。

你这样做的方式很好,但你会错过能够使用 nx 标签来执行规则的机会。

我在我们的仓库中所做的是将具有客户端和服务器代码的模块拆分为多个库。

像这样的东西:

// contains the business logic / interfaces that can be used both client and server side. (cannot contain any node imports)
@reporting/jobs/domain

// the angular feature module that contains routing and can be lazy loaded via loadChildren
@reporting/jobs/feature-job-dashboard

// the cloud function that gets invoked by cloud scheduler
@reporting/jobs/backend-scheduled-import

我发现后端和前端实现细节的强烈分离使得更容易掌握在哪里运行什么,并导致更清洁、更容易测试代码。但是很难选择何时创建新库。

祝你好运 :)

于 2020-02-11T09:59:41.597 回答