【问题标题】:bundle d.ts without references directive捆绑没有引用指令的 d.ts
【发布时间】:2017-08-24 08:00:48
【问题描述】:

我正在构建没有 JS 模块的老式应用程序(是的,全局范围)。我正在使用编译器选项 outFiledeclaration 将单个项目中的所有 .ts 源捆绑到单个文件和单个 d.ts 文件中,这是我从其他项目中引用的。

我开始使用@types,并将node_modules 移动到我的项目的根目录,所以@typesvisible,并自动加载。我还将我所有项目中捆绑的d.ts 的监视和复制设置为node_modules\@types\,这进一步帮助我在我的项目之间交叉加载声明。甜蜜。

然后我在我的一个项目中加入了moment.js,发生了一些不愉快的事情。该库在node_modules\moment 目录中有自己的声明文件,tsc 将此d.ts 附加为带有显式路径的\\\ <references... 指令,显然,在复制到其他目标后,它无法匹配。

如果有一些选项可以通过复制而不是通过引用直接将外部声明附加到包中,那就太好了!有这样的吗?

【问题讨论】:

  • “我将 node_modules 移动到我的项目的根目录”你是什么意思?
  • @gilamran 你可以将library 换成project,我在Visual Studio(不是代码)中工作,项目是常见的概念。这意味着带有代码的文件夹,您出于某种目的创建了该文件夹,并且您将其作为单个项目使用。所以“我的项目的根”是指我的项目文件夹的根。
  • 这类似于所谓的 mono-repo。其中一个文件夹包含许多项目。您不应该将 node_modules 放在根文件夹中,并将其保留在每个项目中。因为每个项目都有自己的依赖项。
  • @gilamran top node_modules 仅包含 @types 依赖项,所以我认为没关系。
  • 我已经发布了一个答案,其中详细说明了您应该如何构建项目。

标签: typescript typescript-declarations


【解决方案1】:

每个项目都应该有自己的node_modules => 依赖项(包括@types)。

这样您就不会混合依赖项。这部分非常重要,您自己亲身经历过。

您应该使用npm link 命令来快速工作,而无需在每次更改时发布新版本。阅读它here

关于@types:TypeScript 会自动扫描所有@types 的子文件夹并自动包含它们(除非您将types 添加到tsconfig),这意味着您的“全局”模块应该可以用于依赖它的项目。阅读它here

多项目结构示例:

 - project1
  - node_modules
     - @types
         - project2
         - moment
         - lodash
  - src
     - main.ts
  - tsconfig.json

 - project2
  - src
     - library.ts
  - tsconfig.json

【讨论】:

  • 我的问题只是在开发过程中为 IDE 加载声明,并且我不想在每个项目文件夹中都使用声明来维护单独的 node_modules。我只是在利用 typescript 自动加载 @types 的功能,否则,我根本不需要 node_modules。如果我能够创建没有\\\ <references ... 指令的单个声明文件,那么我将免于所有npm 维护,更重要的是,我所有的同事也将免于所有这些npm 开销。
  • 当你使用npm并安装moment时你的问题开始了,如果你不想使用npm那么你没有问题...如果你想使用npm 遵守规则,否则你会遇到问题...
  • 我真正需要的是为我的每个项目构建我自己的@types 声明并将该声明加载到其他项目中。我目前正在研究如何实现它。
  • 你的方式可能会以某种方式让它工作......但如前所述:如果你不遵守要求,你会遇到问题。
猜你喜欢
  • 2017-05-24
  • 2015-07-13
  • 2021-09-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多