【问题标题】:How to get Typescript 2 to load all definition files in node_modules如何让 Typescript 2 加载 node_modules 中的所有定义文件
【发布时间】:2017-03-05 04:20:21
【问题描述】:

如何让 Typescript 2.0.3 加载安装到 node_modules 的任何包中的所有定义文件?

我编写了一个名为 somatic 的包,其中包含一个 index.d.ts 文件,并将其安装到一个测试项目中。我尝试了一切来加载定义,弄乱了我的 tsconfig.json 中的 types 和 typesRoot 选项,但无济于事。

这种隐式引用在几个小时前还有效,但突然停止工作。我已经重新安装了 TypeScript 2.0.3 和 Visual Studio Code,但问题仍然存在。

让 typescript 加载我的定义文件的唯一方法是添加对测试文件顶部的引用,如下所示:

/// <reference path="./node_modules/somatic/dist/index.d.ts" />

这是我的 tsconfig:

{
    "compilerOptions": {
        "allowJs": true,
        "target": "es5",
        "module": "commonjs",
        "noImplicitAny": false,
        "suppressImplicitAnyIndexErrors": true,
        "removeComments": false,
        "preserveConstEnums": true
    }
}

【问题讨论】:

  • 该包的package.json 文件包含此设置:"types": "/dist/somatic.d.ts"。我会尝试删除前导斜杠。
  • 我编辑了somatic包的本地安装文件夹(在node_modules中)删除了前导斜杠,但问题还是一样
  • "...突然停止工作" ...那么在停止工作之前发生了什么变化?
  • 这种情况以前发生过几次:我在一个d.ts文件中添加了一个新的类型声明,突然所有类型都无法识别(它们下面有波浪线)。我删除了刚刚添加的类型声明,问题仍然存在。在以前的情况下,重新安装 VsCode 可以解决问题,但这次没有

标签: javascript node.js typescript types


【解决方案1】:

如果您使用“节点”解析策略(我认为这是默认策略),那么 TypeScript 会在 node_modules 文件夹中搜索自身。您可以阅读更多关于 here 的信息以及它使用的路径示例。

也许你需要更新 TypeScript 或者你的 node_modules 文件夹没有放在合适的位置以便它可以找到它?

【讨论】:

  • 即使我删除 typeRoots 选项,行为也是一样的,并且我的 node-modules 文件夹位于 windows 上的标准位置。
  • 我不确定 Windows 上的标准位置是什么意思,如果我理解正确,它应该是文件的任何父级的直接子级。所以例如如果您有 C:\A\B\C\myfile.ts,那么 node_modules 应该位于 A、B 或 C 文件夹中,或者直接位于驱动器 C: 下。如果你使用例如Visual Studio 然后 node_modules 是项目根目录下的文件夹,因此项目根目录下的所有文件都可以访问。
  • 是的,我的项目文件夹下有本地 node_modules。而且我在 windows 上的标准位置也有全局 node_modules
  • 对不起,我不确定。您可以尝试将模块解析策略强制为“节点”,但在某些版本的 TS 之后无论如何这应该是默认的。也许 Visual Studio Code 任意更改了打字稿编译器使用的当前文件夹?您可以通过将 node_modules 放入根驱动器来检查是否需要,尽管“修复”并没有太大帮助。
猜你喜欢
  • 2016-12-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-09
  • 1970-01-01
相关资源
最近更新 更多