如何解决 CKEditor Webpack 配置中的「SVG 为空」错误?
2024-03-22 05:07:36
解决 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 图标集。