tsconfig中paths目录别名失效:使用$lib导入模块提示找不到包
解决ts-node无法识别SvelteKit路径别名
$lib的问题 问题场景
文件结构:
src/lib/db.ts:待导入的模块文件script.ts:通过import ... from "$lib/db"语句导入上述模块
tsconfig.json中的路径配置(由SvelteKit自动生成):
"paths": { "$lib": [ "src/lib" ], "$lib/*": [ "src/lib/*" ] }
执行以下命令时触发模块找不到错误:
node --experimental-specifier-resolution=node --loader ts-node/esm script.ts --project tsconfig.json
错误信息:
/home/..../node_modules/ts-node/dist-raw/node-internal-modules-esm-resolve.js:757 throw new ERR_MODULE_NOT_FOUND(packageName, fileURLToPath(base)); ^ CustomError: Cannot find package '$lib' imported from script.ts.
解决方法
1. 安装路径解析工具
ts-node的ESM加载器默认不处理tsconfig中的paths别名规则,需安装tsconfig-paths来补全这一能力:
npm install -D tsconfig-paths
2. 调整启动命令
添加tsconfig-paths/esm加载器,同时修正参数顺序(--project是传递给ts-node的配置项,必须放在脚本文件名之前):
node --experimental-specifier-resolution=node --loader ts-node/esm --loader tsconfig-paths/esm --project tsconfig.json script.ts
3. 检查baseUrl配置(可选)
确保tsconfig.json的compilerOptions中已设置baseUrl,SvelteKit通常默认配置为./,若缺失需手动添加:
"compilerOptions": { "baseUrl": ".", // 其他配置项... "paths": { "$lib": ["src/lib"], "$lib/*": ["src/lib/*"] } }
完成以上步骤后,Node.js即可正确解析$lib别名,成功导入目标模块。
内容的提问来源于stack exchange,提问作者Willem Vanhulle
相关产品推荐
相关产品推荐

