使用moduleResolution NodeNext时,如何阻止TypeScript解析同名文件?
NodeNext模块解析下,避免本地同名文件覆盖npm包导入的方法
当配置moduleResolution: "nodenext"时,若当前目录存在zod.ts,裸模块导入语句export { z } from 'zod'会被转译为相对路径export { z } from './zod';——这是因为TypeScript的nodenext策略会优先查找本地同名文件/目录,而非直接去node_modules匹配npm包。要让原导入语句保持原样,可通过以下方法解决:
方法一:配置moduleSuffixes
在tsconfig.json的compilerOptions中添加moduleSuffixes,指定TypeScript先尝试无后缀的npm包解析,再查找本地带后缀的文件:
{ "compilerOptions": { "moduleResolution": "nodenext", "moduleSuffixes": [".js", ".ts"] } }
方法二:用package.json的exports区分模块
在包含本地zod.ts的目录下创建package.json,通过exports明确本地模块的访问路径,避免和npm包名冲突:
{ "name": "local-modules", "exports": { "./zod": "./zod.ts" } }
之后导入本地文件需用import { ... } from 'local-modules/zod',而import { z } from 'zod'会正常指向npm包。
方法三:重命名本地文件
直接将本地的zod.ts改名为其他名称(如app-zod.ts),从根源上避免命名冲突,是最简单直接的方案。
内容的提问来源于stack exchange,提问作者Gajus
相关产品推荐
相关产品推荐

