NX Angular下不同分组创建同名lib提示项目名已存在如何解决
NX多分组下创建同名lib报错解决方案
报错原因
- NX要求工作区下所有项目的名称全局唯一,默认创建lib时会将目录的最后一段作为项目名,因此先创建
libs/books/overview后,overview已被注册为项目名,再创建同后缀的libs/cars/overview就会触发重名报错。
最优解决方式(无需修改目录结构,避免冗余命名)
不需要将目录改为books-overview这类冗余格式,NX支持项目名与实际存储路径分离配置,仅需保证全局项目名唯一即可,有两种常用实现方案:
方案1:创建时手动指定参数
执行生成命令时同时指定--name(全局唯一项目名)和--directory(实际存储路径),还可通过--importPath自定义导入路径保持简洁:
# 创建books分组的overview lib nx g @nx/angular:library --name=books-overview --directory=libs/books/overview --importPath=@你的工作区名/books/overview # 创建cars分组的overview lib nx g @nx/angular:library --name=cars-overview --directory=libs/cars/overview --importPath=@你的工作区名/cars/overview
生成后目录结构完全符合最初的规划,导入时也可以直接使用@你的工作区名/books/overview这类简洁路径,不会出现冗余命名。
方案2:配置全局生成规则(推荐)
在工作区根目录的nx.json中添加生成器默认配置,开启自动按目录生成唯一项目名的规则,后续无需手动加参数:
{ "generators": { "@nx/angular:library": { "projectNameAndRootFormat": "derived" } } }
配置完成后直接执行常规生成命令即可:
# 自动生成项目名books-overview,目录为libs/books/overview nx g lib overview --directory=books # 自动生成项目名cars-overview,目录为libs/cars/overview nx g lib overview --directory=cars
效果验证
配置完成后可执行nx show projects查看所有项目,会看到books-overview和cars-overview两个唯一项目名,对应的存储路径和导入路径都保持原有简洁结构,没有冗余字段。
内容的提问来源于stack exchange,提问作者Konstantin Schütte
相关产品推荐
相关产品推荐

