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

Editor.js自定义插件引入外部SVG渲染为字符串如何解决

解决方案

问题核心

默认情况下你的打包工具导入SVG文件时,返回的是文件的访问路径而非原始SVG代码字符串,Editor.js的icon字段仅支持直接传入原生SVG字符串,因此无法正常渲染。


不同打包工具的配置方案

Webpack 环境

  1. 安装依赖:
npm install svg-inline-loader --save-dev
  1. 修改webpack配置文件,新增SVG处理规则:
module.exports = {
  // 其他配置保持不变
  module: {
    rules: [
      {
        test: /\.svg$/,
        loader: 'svg-inline-loader',
        exclude: /node_modules/
      }
    ]
  }
}

如果不想修改全局配置,可以在导入时临时指定loader:

const toolBoxIcon = require('!!svg-inline-loader!./image.svg');

Vite 环境

无需修改全局配置,导入时添加?raw后缀即可直接获取SVG原始字符串:

// CommonJS 写法
const toolBoxIcon = require('./image.svg?raw');
// ES 模块写法
import toolBoxIcon from './image.svg?raw';

替代方案(无需修改打包配置)

如果不想调整打包规则,可以直接把SVG代码封装为JS字符串导出使用:
新建icons.js文件:

export const ImageToolIcon = `<svg width="17" height="15" viewBox="0 0 336 276" xmlns="http://www.w3.org/2000/svg"><path d="M291 150V79c0-19-15-34-34-34H79c-19 0-34 15-34 34v42l67-44 81 72 56-29 42 30zm0 52l-43-30-56 30-81-67-66 39v23c0 19 15 34 34 34h178c17 0 31-13 34-29zM79 0h178c44 0 79 35 79 79v118c0 44-35 79-79 79H79c-44 0-79-35-79-79V79C0 35 35 0 79 0z"/></svg>`

使用时直接导入赋值即可:

import { ImageToolIcon } from './icons.js';
return {
  title: 'Image',
  icon: ImageToolIcon,
};

内容的提问来源于stack exchange,提问作者Yoofi Brown-Pobee

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 23:36:04