返回

如何解决 CKEditor Webpack 配置中的「SVG 为空」错误?

vue.js

解决 CKEditor Webpack 配置中的「SVG 为空」错误

作为一名经验丰富的程序员和技术作家,我经常遇到各种技术挑战,其中之一就是 CKEditor 中的「SVG 为空」错误。今天,我将分享我解决此问题的步骤,以帮助其他遇到相同问题的开发人员。

错误根源

此错误通常是由 Webpack 配置不正确引起的,尤其是在排除 CKEditor 资源时。Webpack 是一个模块捆绑器,用于打包和优化 JavaScript 代码。如果 Webpack 未正确配置,它可能会从捆绑包中排除必要的 CKEditor 依赖项,导致 SVG 图标无法加载。

解决方案步骤

要解决此问题,请按照以下步骤进行操作:

1. 排除 CKEditor SVG 从 Mix 默认规则

Mix.listen('configReady', webpackConfig => {
    const rules = webpackConfig.module.rules
    const targetSVG = /(\.(png|jpe?g|gif|webp)$|^((?!font).)*\.svg$)/
    const targetCSS = /\.css$/

    // 排除 CKE regex 从 mix 的默认规则
    for (const rule of rules) {
        if (rule.test.toString() === targetSVG.toString()) {
            rule.exclude = CKERegex.svg
        } else if (rule.test.toString() === targetCSS.toString()) {
            rule.exclude = CKERegex.css
        }
    }
});

2. 添加自定义 CKEditor Webpack 规则

module: {
    rules: [
        {
            test: /ckeditor5-[^/\\]+[/\\]theme[/\\]icons[/\\][^/\\]+\.svg$/,
            use: [ 'raw-loader' ]
        },
        {
            test: /ckeditor5-[^/\\]+[/\\]theme[/\\].+\.scss$/,
            use: [
                {
                    loader: 'style-loader',
                    options: {
                        injectType: 'singletonStyleTag',
                        attributes: {
                            'data-cke': true
                        }
                    }
                },
                'css-loader',
                {
                    loader: 'postcss-loader',
                    options: {
                        postcssOptions: styles.getPostCssConfig( {
                            themeImporter: {
                                themePath: require.resolve( '@ckeditor/ckeditor5-theme-lark' )
                            },
                            minify: true
                        } )
                    }
                }
            ]
        }
    ]
},

3. 重新运行 Webpack

完成上述更改后,重新运行 Webpack。

常见问题解答

1. 我尝试了这些步骤,但仍然遇到「SVG 为空」错误。该怎么办?

检查你的 Webpack 配置是否准确,并确保排除规则正确应用于 CKEditor 资源。如果问题仍然存在,请尝试清除 Webpack 缓存并再次运行它。

2. 我可以排除其他文件类型吗?

当然可以。你可以根据需要排除任何文件类型。只需在排除规则中更新测试正则表达式即可。

3. 此解决方案是否适用于所有 CKEditor 版本?

此解决方案经过测试,适用于 CKEditor 5 及更高版本。

4. 如何自定义 SVG 图标?

要自定义 SVG 图标,请使用 SVG 编辑器(如 Inkscape 或 Adobe Illustrator)编辑 CKEditor 主题包中的 SVG 文件。

5. 我在使用不同的捆绑器(例如 Rollup)。这些步骤仍然适用吗?

这些步骤可能需要根据所使用的捆绑器进行修改。请查阅捆绑器的文档以获取更多详细信息。

结论

通过正确配置 Webpack,你可以轻松解决 CKEditor 中的「SVG 为空」错误。通过遵循本文中概述的步骤,你将能够成功构建自定义 CKEditor 5 构建,并获得完整的 SVG 图标集。