Vite构建的TS库出现TS2307模块查找错误求助
解决TS2307: 找不到模块'coanda-sdk-ts/myModule'或类型声明的问题
核心问题分析
问题根源在于Vite打包配置与package.json的exports字段不匹配,多入口打包生成了不符合预期的文件结构,导致TypeScript无法解析子模块的类型路径;同时src目录下意外生成的打包文件也会干扰模块解析。
具体修复步骤
1. 修正Vite配置,生成正确的子模块文件结构
修改vite.config.js,调整多入口的输出规则,确保文件路径与package.json声明的exports路径一致:
const path = require('path'); const { defineConfig } = require('vite'); module.exports = defineConfig({ resolve: {}, build: { lib: { entry: { index: path.resolve(__dirname, 'src/index.ts'), api: path.resolve(__dirname, 'src/api/index.ts'), computation: path.resolve(__dirname, 'src/computation/index.ts'), init: path.resolve(__dirname, 'src/init.ts') }, name: 'coanda-sdk-ts', // 按入口名称生成对应路径的文件 fileName: (format, entryName) => { if (entryName === 'index') { return `coanda-sdk-ts.${format}.js`; } return `${entryName}/index.${format}.js`; }, }, rollupOptions: { // 排除外部依赖(避免打包axios) external: ['axios'], output: { globals: { axios: 'axios' } } }, }, });
2. 同步package.json的exports字段
更新package.json中的exports,确保每个子模块的JS文件路径对应Vite生成的输出,同时保持类型路径正确:
{ "name": "coanda-sdk-ts", "version": "1.0.0", "files": ["dist"], "main": "./dist/coanda-sdk-ts.cjs.js", "module": "./dist/coanda-sdk-ts.es.js", "types": "./dist/index.d.ts", "exports": { ".": { "import": "./dist/coanda-sdk-ts.es.js", "require": "./dist/coanda-sdk-ts.cjs.js", "types": "./dist/index.d.ts" }, "./api": { "import": "./dist/api/index.es.js", "require": "./dist/api/index.cjs.js", "types": "./dist/api/index.d.ts" }, "./computation": { "import": "./dist/computation/index.es.js", "require": "./dist/computation/index.cjs.js", "types": "./dist/computation/index.d.ts" }, "./init": { "import": "./dist/init/index.es.js", "require": "./dist/init/index.cjs.js", "types": "./dist/init.d.ts" } }, // 其他配置保持不变 }
3. 清理无效文件,消除解析干扰
删除src目录下意外生成的打包文件:
src/coanda-sdk-ts.cjs.js src/coanda-sdk-ts.cjs2.js src/coanda-sdk-ts.cjs3.js src/coanda-sdk-ts.es.js src/coanda-sdk-ts.es2.js src/coanda-sdk-ts.es3.js
4. 重新构建并验证
执行构建命令:
npm run build
构建完成后检查dist目录,应生成如下结构:
- dist/coanda-sdk-ts.cjs.js
- dist/coanda-sdk-ts.es.js
- dist/index.d.ts
- dist/api/index.cjs.js | dist/api/index.es.js | dist/api/index.d.ts
- dist/computation/index.cjs.js | dist/computation/index.es.js | dist/computation/index.d.ts
- dist/init/index.cjs.js | dist/init/index.es.js | dist/init/index.d.ts
此时消费应用中使用import { SomeAPIFunction } from 'coanda-sdk-ts/api';将不再出现TS2307错误,类型提示也能正常工作。
额外验证点
- 确认tsconfig.json中
declaration: true已开启,outDir设置为./dist,确保tsc正确生成所有子模块的类型声明文件。 - 消费应用安装库时,使用重新构建后的.tgz文件;本地开发时重新执行
npm link同步更新。
内容的提问来源于stack exchange,提问作者Viveka BARNEAUD
相关产品推荐
相关产品推荐

