【问题标题】:typescript ignores NODE_PATH variable打字稿忽略 NODE_PATH 变量
【发布时间】:2016-11-02 17:11:27
【问题描述】:

NODE_PATH 环境变量可用于指定替代模块文件夹。这对于防止较长的相对路径很有用。想象一下以下文件夹结构:

/index.ts
/src/
---/folder1/
------/service.ts
---/folder2/
------/util.ts

如果我想在文件夹 2 的 util 中使用来自文件夹 1 的服务,我需要做一个 import { ServiceName } from "../folder1/service"。对于深度嵌套的文件夹,这可能会变得乏味。

当您将 NODE_PATH 环境变量设置为“./src”时,您可以从"folder1/service" 导入相同的服务。如您所见,没有烦人的相对路径。

我已经用一个普通的 javascript 项目对此进行了测试,效果很好。但是当我使用 typescript 时,它会给出一个编译错误,告诉它找不到指定的模块,因为它似乎没有使用 NODE_PATH 值。

所以问题是,我如何强制 typescript 编译器使用 NODE_PATH 值?

【问题讨论】:

    标签: node.js typescript module


    【解决方案1】:

    【讨论】:

      【解决方案2】:

      请务必注意,您在那里使用的两个模块名称根本不同:一个是相对的(“../folder1/service”),一个不是(“folder1/service”)。 TypeScript 将相对模块和非相对模块完全分开处理:请查看文档中的 module resolution 了解完整详细信息。

      现在解决此问题的一种方法可能是将您的模块解析策略设置为“经典”,这应该意味着在当前目录中搜索“folder1/service”(什么也没找到),然后移动到上面的目录(匹配的地方)。这通常不能回答您的问题,因为您可以提出其他不起作用的 NODE_PATH 选项,并且它可能会破坏您依赖“节点”样式模块解析的地方。原则上它会解决您的具体问题。

      否则,现在没有一个“正确的答案”来做好这件事。现在很快,尽管 TypeScript 2.0 将登陆(计划在 6 月底,我最后一次听说,即 今天),其中包括 path mappingvirtual root directories。这些是您可以添加到 tsconfig.json 的配置选项,它允许您将一个路径任意映射到另一个路径以进行模块查找。这应该让您将 NODE_PATH 映射复制到您的编译配置中,并且一切都应该正常工作。

      我知道现在不能解决您的问题,抱歉,但我希望它会在接下来的几周内很好地解决它,一旦 2.0 可用。

      【讨论】:

        猜你喜欢
        • 2020-10-12
        • 1970-01-01
        • 1970-01-01
        • 2019-12-16
        • 2020-01-13
        • 2021-07-24
        • 2021-11-29
        • 2017-05-21
        • 2023-03-16
        相关资源
        最近更新 更多