ESLint/Prettier配置npm包导入报错:无法找到'~'包
问题描述
我开发了一个包含Prettier、ESLint、tsconfig配置的npm模块,将其安装到测试项目后,执行pnpm lint命令时出现以下错误:
Oops! Something went wrong! :( ESLint: 9.4.0 Error [ERR_MODULE_NOT_FOUND]: Cannot find package '~' imported from C:\Users\Utilisateur\Workspace\boilerplate-node\node_modules\.pnpm\@seyrinian+seyrinian-tools@1.0.10\node_modules\@seyrinian\seyrinian-tools\dist\index.js at packageResolve (node:internal/modules/esm/resolve:854:9) at moduleResolve (node:internal/modules/esm/resolve:927:18) at defaultResolve (node:internal/modules/esm/resolve:1157:11) at ModuleLoader.defaultResolve (node:internal/modules/esm/loader:383:12) at ModuleLoader.resolve (node:internal/modules/esm/loader:352:25) at ModuleLoader.getModuleJob (node:internal/modules/esm/loader:227:38) at ModuleWrap.<anonymous> (node:internal/modules/esm/module_job:87:39) at link (node:internal/modules/esm/module_job:86:36) ELIFECYCLE Command failed with exit code 2.
错误指向工具包经TypeScript构建生成的dist/index.js文件,无法解析'~'这个导入路径。
原因分析
'~'是常见的TypeScript路径别名(通常在tsconfig.json的compilerOptions.paths中配置),但Node.js本身不识别这类自定义路径别名。如果工具包的构建流程没有将别名替换为实际的相对路径,就会导致Node.js/ESLint无法找到对应模块。
解决方案
检查工具包的TypeScript配置
- 确认
tsconfig.json的compilerOptions.paths中是否有"~/*": ["src/*"]这类别名配置,确保映射关系正确。 - 注意:TypeScript的
tsc编译器本身不会自动替换路径别名,需要额外工具处理。
- 确认
修复构建流程,替换路径别名
根据你使用的构建工具选择对应方案:- 使用tsc + tsc-alias:
安装依赖:
修改pnpm add -D tsc-aliaspackage.json的构建脚本:"scripts": { "build": "tsc && tsc-alias" } - 使用tsup:
在tsup.config.ts中启用tsconfigPaths插件:import { defineConfig } from 'tsup'; export default defineConfig({ // 其他配置 tsconfig: 'tsconfig.json', plugins: [require('tsup-plugin-tsconfig-paths')()] }); - 使用Rollup:
安装@rollup/plugin-alias:
在Rollup配置中添加别名映射:pnpm add -D @rollup/plugin-aliasimport alias from '@rollup/plugin-alias'; export default { // 其他配置 plugins: [ alias({ entries: [{ find: '~', replacement: './src' }] }) ] };
- 使用tsc + tsc-alias:
验证构建结果
执行构建命令后,查看dist/index.js文件,确认所有import '~/*'的语句都被替换为相对路径(比如import './utils/xxx.js')。重新发布并更新依赖
重新发布工具包的新版本,在测试项目中执行pnpm update @seyrinian/seyrinian-tools,然后再次运行pnpm lint验证问题是否解决。
内容的提问来源于stack exchange,提问作者Seyrinian
相关产品推荐
相关产品推荐

