You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用TypeScript给HTML页面加头部时,img src无法识别怎么办?

解决TypeScript动态创建img时src路径无法识别的问题

问题详情

用TypeScript为多个HTML页面添加头部时,动态创建的img标签无法加载图片,浏览器报错:Cannot GET /src/main/resource/img/logo.png。

代码片段

const logoImage: HTMLImageElement = document.createElement('img');
logoImage.classList.add('h-10', 'w-10', 'inline-block');
logoImage.src = "./resource/img/logo.png"

目录结构

|-- html
|   |-- index.html
|-- resource
|   |-- img
|       |-- logo.png
|-- ts
|   |-- index.ts
|   |-- navbar.ts

技术栈

  • HTML
  • Node.js
  • Webpack
  • Tailwind/SCSS/SASS
  • TypeScript

已尝试路径:src/main/resource/img/logo.png、../resource/img/logo.png,均无效;TypeScript不支持\作为路径分隔符。


解决方案

1. 利用Webpack静态资源处理(推荐)

Webpack会对引入的静态资源进行打包和路径映射,这是最可靠的方式:

  • 配置Webpack图片规则
    在webpack.config.js中添加图片处理规则,确保图片被打包到输出目录:

    module.exports = {
      module: {
        rules: [
          {
            test: /\.(png|jpe?g|gif)$/i,
            type: 'asset/resource',
            generator: {
              filename: 'resource/img/[name].[hash][ext]' // 定义输出路径和文件名
            }
          }
        ]
      }
    };
    
  • 在TS中正确引入图片
    通过ES模块导入图片,Webpack会自动替换为打包后的正确路径:

    // 导入图片资源
    import logoSrc from '../resource/img/logo.png';
    
    const logoImage: HTMLImageElement = document.createElement('img');
    logoImage.classList.add('h-10', 'w-10', 'inline-block');
    logoImage.src = logoSrc; // 使用导入的变量作为src
    
  • 处理TypeScript类型报错
    如果TS提示找不到图片模块,新建typings/images.d.ts类型声明文件:

    declare module '*.png' {
      const value: string;
      export default value;
    }
    

    并在tsconfig.json中包含该声明文件:

    {
      "include": ["src/**/*", "typings/**/*"]
    }
    

2. 基于HTML文件位置写相对路径(仅适用于未打包场景)

如果不需要Webpack处理图片,确保路径是相对于html/index.html的位置:

logoImage.src = "../resource/img/logo.png";

注意:这种方式在Webpack打包后可能失效,因为输出目录结构会变化,仅适合开发阶段临时测试。


内容的提问来源于stack exchange,提问作者astro0725

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 14:00:23