遇到同样的问题;我正在制作可以同时使用react-dom
和react-native
(使用react-native-web
)的组件。我还使用 Storybook 单独测试/开发组件。
这里描述的解决方案对我有用。
据我了解,问题是由于@babel/plugin-proposal-class-properties
在编译期间未包含该插件。
我最终得到以下结果.storybook/webpack.config.js
;因为我链接的解决方案格式有点错误。
const path = require('path')
module.exports = async ({config, mode}) => {
config.module.rules.push({
test: /\.(js|jsx|ts|tsx)$/,
loader: 'babel-loader',
include: path.resolve(__dirname, '../node_modules/'),
options: {
presets: [
"@babel/env",
"@babel/preset-react",
"module:metro-react-native-babel-preset",
],
plugins: [
"react-native-web",
"@babel/plugin-proposal-class-properties"
]
}
})
config.module.rules.push({
test: /\.ttf$/,
loader: 'url-loader',
include: path.resolve(__dirname, '../node_modules/react-native-vector-icons/Fontisto.js')
})
config.resolve.alias = {
'react-native': 'react-native-web'
}
return config
}
PS我使用这个人的问题来获得推荐的“网络”安装。我的.storybook/preview.js
长相与此类似:
... (export parameters, export globalTypes, etc..)
// ==
import Fontisto from '../node_modules/react-native-vector-icons/Fontisto'
import iconFont from '../node_modules/react-native-vector-icons/Fonts/Fontisto.ttf'
const iconFontStyle =`
@font-face {
src: url(${iconFont});
font-family: Fontisto;
}
`
const style = document.createElement('style')
style.type = 'text/css'
if (style.styleSheet) {
style.styleSheet.cssText = iconFontStyle
} else {
style.appendChild(document.createTextNode(iconFontStyle))
}
document.head.appendChild(style)
//
希望一切顺利!
PPS抱歉,值得一提的是,我不确定这个 Babel 配置是否更适合.storybook/main.js
Storybook.js 的推荐。我无法使这种方法起作用;并且找不到任何关于我将如何去做的例子;我上面提到的解决方案首先出现。