typescript忽略NODE_PATH变量

时间:2016-06-30 14:20:25

标签: node.js typescript module

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

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

如果我想在folder2的util2中使用folder1中的服务,我需要import { ServiceName } from "../folder1/service"。使用深层嵌套文件夹可能会变得乏味。

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

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

所以问题是,如何强制打字稿编译器使用NODE_PATH值?

2 个答案:

答案 0 :(得分:2)

值得注意的是,您在那里使用的两个模块名称根本不同:一个是相对的(" ../ folder1 / service")而另一个不是( "文件夹1 /服务&#34)。 TypeScript完全分开处理相对和非相对模块:在文档中查看module resolution以获取完整的详细信息。

现在解决此问题的一种方法可能是将您的模块解析策略设置为“经典”,这应该意味着" folder1 / service"在当前目录中搜索(找不到任何内容),但随后移动到上面的目录(匹配的位置)。一般来说,这不能回答你的问题,因为你可以提出其中没有工作的其他NODE_PATH选项,它可能会破坏你依赖于节点&#39的地方。 ;样式模块分辨率。原则上它会解决您的具体问题。

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

我知道现在还没有解决你的问题,对不起,但我希望在接下来的几周内,只要有2.0就可以很好地解决问题。

答案 1 :(得分:1)