首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >角单点错误TS6059:文件“ng-youtube-api.service.ngypecheck.ts”不在“rootDir”之下。“rootDir”应该包含所有源文件

角单点错误TS6059:文件“ng-youtube-api.service.ngypecheck.ts”不在“rootDir”之下。“rootDir”应该包含所有源文件
EN

Stack Overflow用户
提问于 2021-07-05 21:56:54
回答 5查看 2.3K关注 0票数 1

我创建了3个角库/包:

现在,我想创建一个包含VideoPlayerComponent的库,只使用提供YoutubeApiServiceDailymotionApiServiceVimeoApiService的包。为了不不必要地包含其他组件,我想将每个库分成3个,这样我就只能安装Service类了。

您可能会争辩说,rather使用了树抖动,所以无论如何,组件都不会与应用程序捆绑在一起,但是无论如何,为了简洁起见,我还是希望分离这些依赖关系。

我尝试过设置一个包含2个库和一个测试应用程序的monorepo,但是从我从另一个库引用服务的那一刻起,构建就失败了。我创建了一个非常基本的示例工作区来重现这个问题:

代码语言:javascript
运行
复制
git clone https://github.com/PieterjanDeClippel/angular-monorepo-test
cd angular-monorepo-test
npm install
ng build @mintplayer/ng-youtube-api
ng build @mintplayer/ng-youtube-player
ng build ng-youtube-player-demo

# All projects compile successfully
# Now go to the NgYoutubePlayerComponent and uncomment the injection parameter in the constructor (line 16)

ng build @mintplayer/ng-youtube-player

生成失败时会出现大量以下错误:

代码语言:javascript
运行
复制
✖ Compiling with Angular sources in Ivy partial compilation mode.
projects/mintplayer/ng-youtube-api/src/lib/ng-youtube-api.service.ts:1:1 - error TS6059: File 'C:/Users/user/source/repos/Tmp/mintplayer-ng-youtube-player/projects/mintplayer/ng-youtube-api/src/lib/ng-youtube-api.service.ngtypecheck.ts' is not under 'rootDir' 'C:\Users\user\source\repos\Tmp\mintplayer-ng-youtube-player\projects\mintplayer\ng-youtube-player\src'. 'rootDir' is expected to contain all source files.
1 import { Injectable } from '@angular/core';
 
projects/mintplayer/ng-youtube-api/src/public-api.ts:1:1 - error TS6059: File 'C:/Users/user/source/repos/Tmp/mintplayer-ng-youtube-player/projects/mintplayer/ng-youtube-api/src/public-api.ngtypecheck.ts' is not under 'rootDir' 'C:\Users\user\source\repos\Tmp\mintplayer-ng-youtube-player\projects\mintplayer\ng-youtube-player\src'. 'rootDir' is expected to contain all source files.

这里有两个主要问题:

  1. 您必须按正确的顺序分别构建每个项目。
  2. 您不能在其他库中使用来自库的服务。

我已经读过以下类似的问题,但这并没有帮助我:

代码

我的测试代码是托管的这里。所有再现该问题的指令都在上面的代码块中注明。我所做的主要更改是根tsconfig.json中的

代码语言:javascript
运行
复制
{
  ...
  "compilerOptions": {
    ...,
    "paths": {
      "@mintplayer/ng-youtube-api": [
        "projects/mintplayer/ng-youtube-api/src/public-api.ts"
      ],
      "@mintplayer/ng-youtube-player": [
        "projects/mintplayer/ng-youtube-player/src/public-api.ts"
      ]
    }
  }
}

我已经设置了一个包含库和应用程序的工作区,其中应用程序使用库中的类,没有任何问题(请参阅问题顶部的3个存储库),但是从库使用来自另一个库的类开始,构建就中断了。

我如何解决这个问题,并拥有一个带有2个库和一个测试应用程序的工作空间?

EN

Stack Overflow用户

发布于 2022-05-11 19:00:30

也许我在这里有点晚了,但是我在这里遇到了这个问题,我只是使用常规的角度CLI来管理我的workspace...after搜索和模块分辨率上的类型记录文档,我相信我理解发生了什么:

路径映射对于角库来说是一件常规的事情(特别是在使用二次入口点策略时),但是它的行为有点棘手。当我们在同一个工作区中有多个库时,事情会变得更加复杂:有时IDE会因错误而疯狂;有时看起来很好,但在构建过程中会中断;有时在库的构建过程中一切正常,但是在构建消费者应用程序/库时,它们都会爆炸。

问题是:消费者需要构建的库版本才能正常工作,所以他们应该查看dist文件夹。我解决这个问题的方法是:

  • 保持开发时映射(解析到项目/.)在根tsconfig.json中
  • 将映射添加到用于构建使用者库的tsconfig中构建的工件(在angular.json配置中列出)

IDE很高兴,ng-packagr很高兴

干杯!

票数 4
EN
查看全部 5 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68262454

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档