重映射导入路径
deno.json 中的 imports 字段是一个导入映射:任何导入标识符前缀都可以
重映射到任意位置。除了用于命名包之外,它还替代了 tsconfig.json 中的 paths
部分,可用于像 @/ 这样的路径别名。
为目录设置别名 Jump to heading
以 / 结尾的键会映射整个前缀。常见约定是将源代码根目录设为别名:
deno.json
{
"imports": {
"@/": "./src/"
}
}
项目中任何位置的导入现在都可以从根目录访问文件,而不必
逐层计算 ../ 段数:
src/pages/about.ts
import { greet } from "@/greet.ts";
为单个模块设置别名 Jump to heading
不带尾部斜杠的键会将一个裸名称映射到一个文件,这对于处处都会用到的模块来说 读起来很自然:
deno.json
{
"imports": {
"@/": "./src/",
"logger": "./src/utils/logger.ts"
}
}
main.ts
import { greet } from "@/greet.ts";
import { log } from "logger";
log(greet("import maps"));
>_
$ deno run main.ts
[log] 你好,import maps!
编辑器支持 Jump to heading
Deno 语言服务器会读取同一个文件,因此补全和
跳转到定义会跟随这些别名,无需额外的 tsconfig.json 配置。
如果你迁移的是一个包含 compilerOptions.paths 的项目,请将这些条目
移动到 imports 中。
作用域覆盖 Jump to heading
标准导入映射中的 scopes 字段同样适用,它会仅对
来自指定路径前缀下的导入重映射某个标识符:
deno.json
{
"imports": {
"logger": "./src/utils/logger.ts"
},
"scopes": {
"./vendor/": {
"logger": "./vendor/legacy_logger.ts"
}
}
}
vendor/ 下的模块会使用旧版 logger;其他所有内容都会使用默认值。