You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

NX带--buildable标记的共享库执行全量构建操作失败问题

当前行为

我使用--buildable标记创建了一个库,随后通过webpack.config.js文件中的sharedMappings配置将其共享给两个应用使用,之后我在库中添加了一个供上述两个应用调用的service。
dashboard应用会在创建的service中设置一个变量,点击Login按钮后,login应用会打印该变量的取值。
本地启动应用运行完全正常,但执行如下构建命令时程序报错:nx run-many --target=build --all

预期行为

构建操作可正常完成。奇怪的是,创建库时不添加--buildable标记的话,构建可以正常执行。

复现步骤

我Fork了公开的ng-mfe-example示例仓库,并按照上述当前行为描述进行了修改。

报错日志

./libs/awesomelib/libname/src/index.ts - Error: Module build failed (from ./node_modules/@ngtools/webpack/src/ivy/index.js):
Error: C:\Workspace\nx\ng-mfe-example\libs\awesomelib\libname\src\index.ts is missing from the TypeScript compilation. Please make sure it is in your tsconfig via the 'files' or 'include' property.
    at C:\Workspace\nx\ng-mfe-example\node_modules\@ngtools\webpack\src\ivy\loader.js:59:26

补充说明:NX官方团队已确认将修复该问题。


解决方案

根本原因

这是NX框架处理可构建库与微前端共享映射逻辑的已知缺陷:带--buildable标记的库默认不会被纳入上层应用的TS编译范围,要求先单独构建库产物再被引用;但sharedMappings配置会直接关联库的源码,导致生产构建时TS编译扫描不到对应的库文件触发报错。本地开发模式默认全量编译所有加载的源码,所以不会触发问题。

临时修复方案

任选以下一种方法即可规避问题:

  • 调整应用的tsconfig.app.json配置,在include数组中添加对应可构建库的源码路径,本次示例对应的路径为"../../libs/awesomelib/libname/src/**/*.ts",让TS编译时能覆盖到库文件
  • 构建命令新增--with-deps参数,修改为nx run-many --target=build --all --with-deps,让NX执行构建时优先编译所有依赖的可构建库,再构建上层应用
  • 如果没有单独构建库的需求,可暂时移除库的--buildable标记,待官方修复补丁发布后再恢复配置即可

内容的提问来源于stack exchange,提问作者Tom

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 06:54:03