导入没有'。'的模块时。或者' ..'
例如:import File from 'FileClass';
ts编译器如何正确解析'FileClass'
?
Doc说
- 模块名称可以是相对的或顶级的。如果第一个术语是"则模块名称是相对的。"或" .."。
- 从概念模块名称空间根解析顶级名称。
https://github.com/Microsoft/TypeScript/blob/master/doc/spec.md#11.3.1
因此'FileClass'
必须是所谓的top-level
模块
但是,文档没有解释什么是top-level
模块。
对我来说,第一个问题是术语top-level
的含义是什么?什么是conceptual module name space root
?
继续阅读文档,我发现了这个
如果import声明指定了顶级模块名称,并且程序不包含AmbientModuleDeclaration(第12.2节),并且字符串文字指定了确切的名称,则该名称将以依赖于主机的方式解析(例如,通过考虑名称)相对于模块名称空间根)。如果找不到匹配的模块,则会发生错误。
这对我来说很难理解。这有真实世界的例子吗?
PS:我正在使用TypeScript 1.5
答案 0 :(得分:1)
这取决于您使用编译器的模块系统。例如,如果您使用--module commonjs
,则模块语法将转换为node.js模块语法,例如var module = require('module');
在这种情况下,如果您不使用相对路径'./module'
但仅使用模块名称,则依赖性将被解析在node_modules
文件夹中。对于AMD它的工作原理类似,但我不知道AMD模块的根源是什么。