【发布时间】:2017-10-17 03:35:18
【问题描述】:
我正在尝试使用 typescript 下的模块分辨率。
如果我有:
/modulename/index.ts
应该通过以下方式解决:
import * as modulename from "modulename"
?
我无法让它工作。但是
import * as modulename from "modulename/index"
效果很好。
编辑
aluan-haddad 建议我正确配置 tsc。
这个对我有用:
{
...
"baseUrl": ".",
"module": "commonjs",
"moduleResolution": "node",
...
}
编辑
请注意,此配置在与 VS 一起使用时不起作用。如果将其放在外部 tsconfig 文件中,则编译效果很好,但语言服务无法处理。如果它同时放在 msconfig (csporj) 中,编译和语言服务都会失败。
我发现只有一个可以 100% 工作的解决方案是创建类似的东西:
src
node_modules
module_being_currently_developed
submodules
在这种情况下,模块解析工作正常。
【问题讨论】:
-
这是本地模块吗?如果是这样,我认为它应该是像
import * as m from "./modulename"这样的相对路径。 -
它目前是一个本地模块,但我想稍后把它放到npm。所以基本上,我想在 node_modules 文件夹下模拟它。
-
要小心,因为正如我在回答中指出的那样,baseUrl 不是原生 NodeJS 概念,因此您需要从它加载 Webpack 或 SystemJS 之类的东西。如果您的目标是服务器上的 NodeJS,您可能需要考虑添加一个存根 package.json 并使用 npm 链接
-
是的,我需要先让它在 IDE 中工作,然后我会以某种方式处理它。我最终以“amd”为目标,所以我会以某种方式处理它。我只是想避免到处都有那个索引。非常感谢。
-
没问题。 RequireJS 是一个优秀的、久经考验的真正工具。您会发现
--paths选项对 AMD 或 System.register 加载程序也很有帮助。 GL HF!
标签: typescript commonjs es6-modules