汇总,样式组件 - "withComponent is not a function" 错误
rollup, styled-components - "withComponent is not a function" error
rollup 还很陌生,遇到过这个问题。我已经用谷歌搜索了,但我似乎找不到答案,但我很确定这是由于汇总配置造成的。
我想做什么
我创建了一个 React 库,它使用(除其他外)样式化组件,包括一些组件,这些组件扩展了通过 .withComponent 使用样式化组件创建的其他组件。
代码示例
Badge.js:-
import styled from "styled-components"
const Badge = styled.span`
...
`
export default Badge
Button.js:-
import Badge from "@my/library/Badge"
import styled from "styled-components"
export const Button = styled(Badge.withComponent("button"))`
...
`
rollup.config.js:-
import multiEntry from "rollup-plugin-multi-entry"
import babel from "rollup-plugin-babel"
export default {
input: __dirname + "/src/*.js",
plugins: [
babel({}),
multiEntry()
],
output: {
dir: __dirname + "/lib/",
format: "esm",
},
preserveModules: true,
external: ["@my/library", "styled-components"],
}
babel.config.js:-
module.exports = {
presets: [
'@babel/preset-env',
'@babel/preset-react',
],
plugins: [
"@babel/plugin-proposal-class-properties",
"babel-plugin-styled-components"
],
};
rollup 生成以下代码:-
Badge.js:-
import { taggedTemplateLiteral as _taggedTemplateLiteral } from './_virtual/_rollupPluginBabelHelpers.js';
import styled from 'styled-components';
function _templateObject() {
var data = _taggedTemplateLiteral([
...
]);
_templateObject = function _templateObject() {
return data;
};
return data;
}
var Badge = styled.span(_templateObject(), function (props) {
...
});
Button.js:-
import styled from 'styled-components';
import Badge from '@my/library/Badge';
var Button = styled(Badge.withComponent("button"))(_templateObject(), function (props) {
...
});
问题
当我的应用程序 运行 webpack 时,我收到以下错误消息:-
var Button = (0, _styledComponents["default"])(_Badge["default"].withComponent("button"))(_templateObject(), function (props) {
^
TypeError: _Badge.default.withComponent is not a function
我不知道为什么会这样。我认为将 styled-components 列为外部可以解决这个问题,但事实并非如此。同样,我是汇总的新手。非常感谢任何帮助。
我不知道 rollup 但你可以尝试使用 styled-components 的新语法和 prop as
https://www.styled-components.com/docs/api#as-polymorphic-prop
import Badge from "@my/library/Badge"
import styled from "styled-components"
export const Button = styled(Badge).attrs({
as: "button"
})`
...
`
您必须确保您的组件 Badge 是一个 styled-components。如果没有,您可以使用 styled
对其进行转换。
https://www.styled-components.com/docs/basics#styling-any-component
如果没有帮助,请尝试在配置汇总的输出全局中添加样式组件
const globals = {
react: 'React',
'styled-components': 'styled',
}
rollup 还很陌生,遇到过这个问题。我已经用谷歌搜索了,但我似乎找不到答案,但我很确定这是由于汇总配置造成的。
我想做什么
我创建了一个 React 库,它使用(除其他外)样式化组件,包括一些组件,这些组件扩展了通过 .withComponent 使用样式化组件创建的其他组件。
代码示例
Badge.js:-
import styled from "styled-components"
const Badge = styled.span`
...
`
export default Badge
Button.js:-
import Badge from "@my/library/Badge"
import styled from "styled-components"
export const Button = styled(Badge.withComponent("button"))`
...
`
rollup.config.js:-
import multiEntry from "rollup-plugin-multi-entry"
import babel from "rollup-plugin-babel"
export default {
input: __dirname + "/src/*.js",
plugins: [
babel({}),
multiEntry()
],
output: {
dir: __dirname + "/lib/",
format: "esm",
},
preserveModules: true,
external: ["@my/library", "styled-components"],
}
babel.config.js:-
module.exports = {
presets: [
'@babel/preset-env',
'@babel/preset-react',
],
plugins: [
"@babel/plugin-proposal-class-properties",
"babel-plugin-styled-components"
],
};
rollup 生成以下代码:-
Badge.js:-
import { taggedTemplateLiteral as _taggedTemplateLiteral } from './_virtual/_rollupPluginBabelHelpers.js';
import styled from 'styled-components';
function _templateObject() {
var data = _taggedTemplateLiteral([
...
]);
_templateObject = function _templateObject() {
return data;
};
return data;
}
var Badge = styled.span(_templateObject(), function (props) {
...
});
Button.js:-
import styled from 'styled-components';
import Badge from '@my/library/Badge';
var Button = styled(Badge.withComponent("button"))(_templateObject(), function (props) {
...
});
问题
当我的应用程序 运行 webpack 时,我收到以下错误消息:-
var Button = (0, _styledComponents["default"])(_Badge["default"].withComponent("button"))(_templateObject(), function (props) {
^
TypeError: _Badge.default.withComponent is not a function
我不知道为什么会这样。我认为将 styled-components 列为外部可以解决这个问题,但事实并非如此。同样,我是汇总的新手。非常感谢任何帮助。
我不知道 rollup 但你可以尝试使用 styled-components 的新语法和 prop as
https://www.styled-components.com/docs/api#as-polymorphic-prop
import Badge from "@my/library/Badge"
import styled from "styled-components"
export const Button = styled(Badge).attrs({
as: "button"
})`
...
`
您必须确保您的组件 Badge 是一个 styled-components。如果没有,您可以使用 styled
对其进行转换。
https://www.styled-components.com/docs/basics#styling-any-component
如果没有帮助,请尝试在配置汇总的输出全局中添加样式组件
const globals = {
react: 'React',
'styled-components': 'styled',
}