打字稿会忽略NODE_PATHvariables

NODE_PATH环境variables可用于指定备用模块文件夹。 这可以用于防止长相对path。 想象一下下面的文件夹结构:

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

如果我想从folder2的util中使用folder1的服务,我需要import { ServiceName } from "../folder1/service"进行import { ServiceName } from "../folder1/service" 。 这可能会变得沉闷的嵌套文件夹繁琐。

当您将NODE_PATH环境variables设置为“./src”时,您可以从"folder1/service"导入相同的服务。 正如你所看到的,没有恼人的相对path。

我已经testing了一个普通的JavaScript项目,它的效果很好。 但是,当我使用打字机它会给编译错误,告诉它找不到指定的模块,因为它似乎不使用NODE_PATH值。

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

需要注意的是,这里使用的两个模块名称根本不同:一个是相对的(“../folder1/service”),而另一个不是(“folder1 / service”)。 TypeScript将相对和非相关模块完全分开处理:请参阅文档中的模块parsing以获取完整的详细信息。

现在解决这个问题的一种方法很可能就是将你的模块parsing策略设置为“classic”,这意味着在当前目录中search到“folder1 / service”(找不到任何内容),然后移动到上面的目录它匹配的地方)。 这通常不能回答你的问题,因为你可以想出其他NODE_PATH选项,如果它不起作用,它可能会打破你所依赖的“节点”风格模块分辨率的地方。 原则上它会解决你的具体问题。

否则,现在就没有一个正确的答案。 虽然TypeScript 2.0将会很快到来(计划在六月底,最后我听说,这是今天 ),其中包括path映射和虚拟根目录 。 这些是你可以添加到你的configuration选项tsconfig.json,它允许你任意映射一个path到另一个模块查找。 这应该让你复制你的NODE_PATH映射到你的编译configuration,一切都应该正常工作。

我知道,现在并不能解决你的问题,对不起,但我希望它能在未来几周内很好地解决,一旦2.0可用。

这之前已经被要求: https : //github.com/Microsoft/TypeScript/issues/8760 (你可以按照更新那里)。

build议使用path映射: https : //github.com/Microsoft/TypeScript-Handbook/blob/release-2.0/pages/Module%20Resolution.md#path-mapping