typescript - Bagaimana saya bisa menggunakan file gambar sebagai sumber <img> menggunakan Rollup sebagai bundler?


Dalam kode sumber saya, jalur impor ini benar:

<img src={"../../../../assets/logo.svg"} />

Tetapi jalur relatif berubah selama proses penggabungan. Bagaimana saya bisa membuat kode tetap berfungsi setelah penggabungan?

Saya pikir jika proyek saya menggunakan JS murni, saya bisa menggunakan @rollup/plugin-image. Tapi saya belum berhasil membuatnya bekerja di proyek Typescript saya.

Ketika saya mencoba menggunakannya seperti yang dijelaskan dalam dokumen, saya mendapatkan kesalahan berikut dalam proyek saya:

Cannot find module '../../../../assets/logo.svg' or its corresponding type declarations.

Membaca beberapa thread lain tentang topik ini, saya telah mencoba memperbaiki masalah ini dengan menambahkan file types.d.ts ke proyek saya:

declare module "*.svg" {
  const content: any;
  export default content;
}

Tapi itu tidak membuat perbedaan. Kesalahan TypeScript tetap ada.

EDIT :

Menambahkan beberapa informasi

rollup.config.js

import typescript from "@rollup/plugin-typescript";
import resolve from "@rollup/plugin-node-resolve";
import commonjs from "@rollup/plugin-commonjs";
import replace from "@rollup/plugin-replace";
import image from "@rollup/plugin-image";
import copy from "rollup-plugin-copy";
import { terser } from "rollup-plugin-terser";

const pkg = require("./app/package.json");

const isProd = process.env.NODE_ENV !== "development";

export default [
  {
    input: "./src/renderer/renderer.tsx",
    output: [{ dir: "./app/build", format: "es", sourcemap: isProd ? false : true }],
    plugins: [
      typescript({ tsconfig: isProd ? "./tsconfig.prod.json" : "./tsconfig.dev.json" }),
      resolve({
        mainFields: ["module", "main", "jsnext:main", "browser"],
        extensions: [".js", ".jsx", ".ts", ".tsx"],
      }),
      commonjs(),
      replace({
        "process.env.NODE_ENV": JSON.stringify(process.env.NODE_ENV),
        // Gets rid of console warning to install React Dev Tools for a better development experience
        __REACT_DEVTOOLS_GLOBAL_HOOK__: "({ isDisabled: true })",
      }),
      isProd && terser(),
      copy({
        targets: [
          {
            src: ["./src/renderer/index.html", "./src/renderer/styles.css"],
            dest: "./app/build",
          },
        ],
      }),
      image(),
    ],
  },
];

tsconfig

{
  "compilerOptions": {
    // Output
    "target": "ESNext",
    "module": "ESNEXT",
    "jsx": "react",
    "noEmit": true,
    // Compile time code checking
    "strict": true,
    // Libraries
    "lib": ["dom", "esnext"],
    // Imports
    "moduleResolution": "node",
    "allowSyntheticDefaultImports": true,
    "esModuleInterop": true
  },
  "exclude": ["dist", "app"]
}

types.d.ts

declare module "*.svg" {
  const content: any;
  export default content;
}

App.tsx

import logo from "../../../../assets/logo.svg";
// Cannot find module '../../../../assets/logo.svg' or its corresponding type declarations.ts(2307)