我正在尝试在打字稿下完成模块解析。
如果我有:
/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
在这种情况下,模块分辨率可以正常工作。
答案 0 :(得分:6)
主要取决于--moduleResolution
标记( tsconfig.json 中的compilerOptions.moduleResultion
)
将导入目录自动解析为名为index
的文件是NodeJS约定。
指定--moduleResolution node
时,TypeScript将遵循此惯例。
此外,当--module
标记( tsconfig.json 中的compilerOptions.module
)设置为commonjs
时,即使没有--moduleResolution
旗帜。
请注意,该设置适用于应用程序代码和node_modules
,jspm_packages
和bower_components
等目录中的依赖项。
虽然它对CommonJS项目最有意义,但设置--moduleResolution node
在其他模块格式中可能是有利的,因为它有助于解决依赖关系,并避免替代classic
带来的某些陷阱分辨率模式。
请注意,诸如RequireJS和SystemJS之类的加载器不会自动在本地应用程序代码中选择此约定,因此在导入您自己的应用程序代码时,仍然建议在模块说明符中使用显式索引文件。
尽管CommonJS弯曲了--moduleResolution node
设置,我仍然喜欢并推荐即使我不在浏览器中使用CommonJS,Webpack或Browserify(当我可以避免它们时)。
我选择的加载器是SystemJS,我的Choice包管理器是JSPM,但我仍然更喜欢使用节点解析方案,因为它使得导入依赖关系变得更容易,部分归功于JSPM自动配置SystemJS加载器。
现在,让我们转到--baseUrl
,因为它适用于您的方案。
您正尝试将本地模块导入为
import * as modulename from "modulename";
并设置--module commonjs
和--baseUrl /
,尝试导入本地模块,就好像它是第三方软件包一样,以准备代码库,将其拆分为独立的软件包。我可以补充说,这是一个很好的计划,所以:+10就是这样!
但是,如果您计划使用CommonJS模块(我再次建议不再使用仅限浏览器的应用程序),您最好将"baseUrl"
设置为"."
而不是"/"
。即便如此,像Native NodeJS这样的工具需要的功能也不支持源自浏览器工具世界的baseUrl概念。然而,Webpack确实支持它。
无论如何,要将您的第一方代码视为第三方代码,我建议以下内容(请注意装载机要求!):
"baseURl"
设为"."
"moduleResolution"
设为"node"
,"module"
明确设置为"commonjs"
,"system"
或"amd"
(我建议不要使用“UMD”)。"commonjs"
,请考虑使用"paths"
,因为它允许进行一些非常复杂的重组。答案 1 :(得分:0)
您必须在文件夹(模块)名称中添加斜杠,这会将 index.ts 视为文件夹索引。
num1 = num1 ^ num2;