dumi封装组件中引用svg图片报错Cannot find module的解决办法

使用 dumi 开发组件包,在组件中引用 svg 图片时 TS 报错,执行 pnpm build 命令无法正常打包,报错如下:

# pnpm build
error - src/index.tsx:19:22 - TS2307: Cannot find module '../assets/img1.svg' or its corresponding type declarations.
error - src/index.tsx:20:18 - TS2307: Cannot find module '../assets/img2.svg' or its corresponding type declarations.
...

原因分析:

  • TypeScript 类型缺失:未声明 .svg 文件的模块类型,导致 TS 无法识别导入路径。

  • 路径引用错误:相对路径 ../assets/... 计算不准确,实际文件位置与代码中路径不匹配。

  • 构建配置未处理资源:若 father-build 未正确配置静态资源处理,可能导致文件未被复制到输出目录。

解决方案:

1. 添加 SVG 类型声明文件

在项目根目录或 src 目录下创建 typings.d.ts 文件(如已存在则直接修改),添加以下内容:

// typings.d.ts
declare module '*.svg' {
  const content: string;
  export default content;
}

检查 TypeScript 配置,在项目根目录下的 tsconfig.json 文件中增加 "typings.d.ts" 引用:

{
  "compilerOptions": {
    "typeRoots": ["./typings.d.ts", "./node_modules/@types"]
  },
//- "include": [".dumirc.ts", "src/**/*"]
    "include": [".dumirc.ts", "src/**/*", "typings.d.ts"]
}

2. 检查并修正 SVG 文件路径

验证代码中引用路径与文件实际位置是否一致。

假设项目结构如下:

src/
  index.tsx
  assets/
    img1.svg
    img2.svg

则正确引用路径应为:

// index.tsx
import img1 from '../assets/img1.svg';
import img2 from '../assets/img2.svg';

3. 验证 SVG 文件位置

确保 img1.svg 和 img2.svg 实际存在于 src/assets 目录下。

若路径错误,调整代码引用路径或移动文件位置。

4. 清理缓存并重新构建

# 删除构建缓存
rm -rf dist node_modules/.cache
# 重新安装依赖并构建
yarn install
yarn build

验证以上方法是否有效。


未经允许不得转载:前端资源网 - w3h5 » dumi封装组件中引用svg图片报错Cannot find module的解决办法

赞 (0)
分享到: +

评论 沙发

Avatar

换个身份

  • 昵称 (必填)
  • 邮箱 (选填)