vue + quill - 图标显示为文本(由文件加载器引起)

vue + quill - icons are shown as text (caused by file-loader)

已更新以展示重复的问题

SVG 正在通过文件加载器导入,我无法使用 raw-loaderhtml-loaderhttps://codesandbox.io/s/llr8x89j47

它目前显示为 "img/redo.01da1a6f.svg" 而不是

<svg viewbox="0 0 18 18"> <polygon class="ql-fill ql-stroke" points="12 10 14 12 16 10 12 10"></polygon> <path class="ql-stroke" d="M9.91,13.91A4.6,4.6,0,0,1,9,14a5,5,0,1,1,5-5"></path> </svg>

我无法用当前最有希望的答案解决这个问题。

添加"svg-inline-loader":

yarn add svg-inline-loader

然后在你的vue.config.js(如果不存在则在项目根目录创建这个文件),copy/paste这条规则:

module.exports = {
  lintOnSave: false,
  configureWebpack: {
    module: {
      rules: [
        {
          test: /\.(svg)(\?.*)?$/,
          use: [
            {
              loader: 'svg-inline-loader',
            }
          ]
        }
      ]
    }
  },
  chainWebpack: config => {
    config.module
      .rule('svg')
      .test(() => false)
      .use('file-loader')
  }
}

应该可以。


发生这种情况是因为 quill 期望图像是原始 svg 字符串。 要修复它,请添加 raw-loaderhtml-loader 并修改您的 vue.config.js

module.exports = {
  chainWebpack: config => {
    // Exclude quill assets from file-loader
    config.module
      .rule("svg")
        .exclude
          .add(/node_modules[\/]quill/)
          .end()

    // Add rule to load quill svg images as raw strings
    config.module
      .rule('quill-svg')
        .include
          .add(/node_modules[\/]quill/)
          .end()
        .test(/\.(svg)(\?.*)?$/)
        .use('raw-loader')
          .loader('raw-loader')
  }
};

如果您有要与 quill 一起使用的自定义 svg 文件,则可以添加其他 include 规则。

答案非常简单,只需使用 !!loader!

覆盖任何规则

import UndoIcon from "!!raw-loader!quill/assets/icons/undo.svg"