gpt4 book ai didi

javascript - Storybook:无法使用 @svgr/webpack 在 svg 文件上执行 'createElement'

转载 作者:行者123 更新时间:2023-12-03 13:37:51 35 4
gpt4 key购买 nike

我的第一个错误与描述的错误完全相同here 。我正在使用@svgr/webpack包将我的 .svg 文件导入为 React 组件,如下所示:

import Shop from './icons/shop.svg'

return <Shop />

它在我的应用程序上运行良好,但是当我尝试在 Storybook 中执行相同操作时我收到此错误:

Failed to execute 'createElement' on 'Document': The tag name provided ('static/media/shop.61b51e05.svg') is not a valid name.

所以我将加载器添加到我的 .storybook/main.js 文件中以扩展默认的 Storybook webpack 配置:

// ...
webpackFinal: async config => {
config.module.rules.push({
test: /\.svg$/,
enforce: 'pre',
loader: require.resolve('@svgr/webpack'),
});

错误仍然发生,因此我尝试按照 answer of the previous question 中的建议覆盖 .svg 文件的默认 Storybook 测试。 :

const fileLoaderRule = config.module.rules.find(rule => { rule.test !== undefined ? rule.test.test('.svg') : '' });
fileLoaderRule.exclude = /\.svg$/;

但是我收到了这个错误:

TypeError: Cannot set property 'exclude' of undefined

所以我决定为 rule.test 创建一个 console.log ,奇怪的是来自 Storybook 配置的唯一默认测试是这些:

{
test: /\.md$/,
...
}
{
test: /\.(js|mjs|jsx|ts|tsx)$/,
...
}
{
test: /\.js$/,
...
}
{
test: /\.(stories|story).mdx$/,
...
}
{
test: /\.mdx$/,
...
}
{
test: /\.(stories|story)\.[tj]sx?$/,
...
}
{
test: /\.(ts|tsx)$/,
...
}

如您所见,没有影响 .svg 文件的测试。那么有人知道为什么我的配置无法使用:

{
test: /\.svg$/,
enforce: 'pre',
loader: require.resolve('@svgr/webpack'),
}

我的故事书版本是6.0.0-beta.3

最佳答案

您的 find 回调始终返回 undefined。更改它以返回正确的 bool 值:

const fileLoaderRule = config.module.rules.find(rule => rule.test && rule.test.test('.svg'));

无论如何,故事书默认配置应该有一个针对此测试的图像的规则:/\.(svg|ico|jpg|jpeg|png|gif|eot|otf|webp|ttf|woff|woff2|cur|ani|pdf)(\?.*)?$/ 。所以你的代码(但具有正确的查找回调)对我来说效果很好。

最终的main.js:

module.exports = {
stories: ['../src/**/*.stories.[tj]s'],
webpackFinal: config => {
// Default rule for images /\.(svg|ico|jpg|jpeg|png|gif|eot|otf|webp|ttf|woff|woff2|cur|ani|pdf)(\?.*)?$/
const fileLoaderRule = config.module.rules.find(rule => rule.test && rule.test.test('.svg'));
fileLoaderRule.exclude = /\.svg$/;

config.module.rules.push({
test: /\.svg$/,
enforce: 'pre',
loader: require.resolve('@svgr/webpack'),
});

return config;
}
};

关于javascript - Storybook:无法使用 @svgr/webpack 在 svg 文件上执行 'createElement',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61498644/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com