Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Component selectors can only be used in conjunction with babel-plugin-emotion #1305

Closed
stolinski opened this issue Apr 8, 2019 · 49 comments
Closed

Comments

@stolinski
Copy link

  • emotion 10.0.9:
  • react 16.8.0:

Relevant code:

My entire .bablerc file.

{
  "presets": ["@babel/preset-env"],
  "plugins": [
    "@babel/plugin-proposal-optional-chaining",
    [
      "@babel/plugin-proposal-class-properties",
      {
        "loose": true
      }
    ],
    "emotion",
    [
      "module-resolver",
      {
        "root": ["./"]
      }
    ],
    [
      "prismjs",
      {
        "languages": ["javascript", "css", "markup", "jsx"],
        "plugins": ["line-numbers"]
      }
    ],
    "react-loadable/babel"
  ]
}

What you did:

Just trying to get up and running. All of my other babel plugins and presets are working, so the .babelrc is being utilized correctly.

What happened:

Getting...

modules.js?hash=62fd6124b8e44fc05a98c40a20d419b909b3355e:3295 Uncaught Error: Component selectors can only be used in conjunction with babel-plugin-emotion.
    at handleInterpolation (modules.js?hash=62fd6124b8e44fc05a98c40a20d419b909b3355e:3295)
    at Object.serializeStyles (modules.js?hash=62fd6124b8e44fc05a98c40a20d419b909b3355e:3442)
    at modules.js?hash=62fd6124b8e44fc05a98c40a20d419b909b3355e:1422
    at updateContextConsumer (modules.js?hash=62fd6124b8e44fc05a98c40a20d419b909b3355e:27158)
    at beginWork (modules.js?hash=62fd6124b8e44fc05a98c40a20d419b909b3355e:27346)
    at performUnitOfWork (modules.js?hash=62fd6124b8e44fc05a98c40a20d419b909b3355e:30986)
    at workLoop (modules.js?hash=62fd6124b8e44fc05a98c40a20d419b909b3355e:31026)
    at renderRoot (modules.js?hash=62fd6124b8e44fc05a98c40a20d419b909b3355e:31109)
    at performWorkOnRoot (modules.js?hash=62fd6124b8e44fc05a98c40a20d419b909b3355e:32016)
    at performWork (modules.js?hash=62fd6124b8e44fc05a98c40a20d419b909b3355e:31928)

Reproduction:

Problem description:

Not sure what I'm doing wrong here. babel-plugin-emotion is installed, in my babelrc, but I'm still getting this error. No ideas what else to try here.

@tkh44
Copy link
Member

tkh44 commented Apr 8, 2019

I tried to create a reproduction of this here https://github.com/tkh44/plugin-help-thing. (npm i && npm run start)

Everything was working. I was trying to reduce the problem space a bit. I'm not sure how Meteor fits into here. I didn't see the jsx plugin (react-preset) in your babelrc so I didn't use it in the reproduction repo. Maybe just having some sort of reference to compare with your dependencies and imports may help.

@stolinski
Copy link
Author

Yeah, that's the tough part. I'm not sure why this plugin would differ from other babel plugins used in the app, including styled components. I can't imagine this is Meteor's doing specifically, but it seems like a tough thing to nail down what exactly is going on here. I'm only seeing this error when attempting to reference another component.

const Card = styled.article`
  &:hover {
    ${Background} {
      transform: scale(1.1);
    } 
  }
`;

@tkh44
Copy link
Member

tkh44 commented Apr 9, 2019

What do your package.json dependencies look like?

@stolinski
Copy link
Author

{

  "dependencies": {
    "@babel/cli": "^7.2.3",
    "@babel/core": "^7.2.2",
    "@babel/runtime": "^7.4.2",
    "@progress/kendo-drawing": "^1.5.7",
    "@progress/kendo-react-pdf": "^2.5.0",
    "apollo-cache-inmemory": "^1.3.12",
    "apollo-client": "^2.5.1",
    "apollo-engine": "^1.1.2",
    "apollo-link": "^1.2.6",
    "apollo-link-http": "^1.5.9",
    "apollo-link-schema": "^1.1.4",
    "apollo-server-express": "^2.3.1",
    "apollo-test-utils": "^0.3.2",
    "aws-sdk": "^2.381.0",
    "babel-polyfill": "^6.26.0",
    "bcrypt": "^3.0.5",
    "body-parser": "^1.18.3",
    "braintree": "^2.14.0",
    "braintree-web": "^3.41.0",
    "date-fns": "^1.30.1",
    "eazy-ease": "^1.0.2",
    "express": "^4.16.3",
    "formol": "^2.5.9",
    "graphql": "^14.0.2",
    "graphql-tag": "^2.10.0",
    "graphql-tools": "^4.0.3",
    "isomorphic-fetch": "^2.2.1",
    "js-cookie": "^2.2.0",
    "lodash": "^4.17.11",
    "logrocket": "^0.6.19",
    "markdown-to-jsx": "^6.8.4",
    "marked": "^0.5.2",
    "meteor-node-stubs": "^0.4.1",
    "mustache": "^3.0.1",
    "paypal-rest-sdk": "^2.0.0-rc.1",
    "picturefill": "^3.0.2",
    "prismjs": "^1.15.0",
    "prop-types": "^15.6.2",
    "raven": "^2.6.4",
    "raven-js": "^3.27.0",
    "react": "^16.8.0",
    "react-addons-test-utils": "^15.6.2",
    "react-addons-transition-group": "^15.6.2",
    "react-addons-update": "^15.6.2",
    "react-apollo": "^2.5.2",
    "react-async-script-loader": "^0.3.0",
    "react-autocomplete": "^1.8.1",
    "react-beautiful-dnd": "^10.0.3",
    "react-braintree-fields": "^1.1.0",
    "react-color": "^2.17.0",
    "react-confetti": "^2.3.0",
    "react-dom": "^16.8.0",
    "react-dropzone": "^5.1.0",
    "react-helmet": "^5.2.0",
    "react-inlinesvg": "^0.8.1",
    "react-lazyload": "^2.3.0",
    "react-loadable": "git+https://github.com/CaptainN/react-loadable.git",
    "react-month-picker-input": "^1.1.6",
    "react-render-html": "^0.6.0",
    "react-router": "^4.3.1",
    "react-router-dom": "^4.3.1",
    "react-router-prop-types": "1.0.4",
    "react-spring": "^8.0.18",
    "react-tagsinput": "^3.19.0",
    "react-toggle-switch": "^3.0.4",
    "react-transition-group": "^2.5.2",
    "react-tweet-embed": "^1.1.1",
    "react-waypoint": "^8.1.0",
    "react-youtube-player": "^2.0.1",
    "resize-observer-polyfill": "^1.5.1",
    "simpl-schema": "^1.5.3",
    "speakingurl": "^14.0.1",
    "stream-collect": "^2.1.3",
    "stripe": "^6.20.0",
    "styled-components": "4.1.3",
    "styled-components-modifiers": "^1.1.0",
    "url-search-params-polyfill": "^5.0.0",
    "victory": "^31.0.2",
    "youtube-player": "^5.5.1"
  },
  "devDependencies": {
    "@babel/helper-plugin-utils": "^7.0.0",
    "@babel/plugin-proposal-class-properties": "7.2.3",
    "@babel/plugin-proposal-object-rest-spread": "7.2.0",
    "@babel/plugin-proposal-optional-chaining": "^7.0.0",
    "@babel/plugin-transform-runtime": "7.2.0",
    "@babel/preset-env": "7.2.3",
    "@babel/preset-react": "7.0.0",
    "autoprefixer": "^9.4.3",
    "babel-core": "^7.0.0-0",
    "babel-eslint": "^10.0.1",
    "babel-jest": "^23.6.0",
    "babel-loader": "^8.0.4",
    "babel-plugin-dynamic-import-node": "^2.1.0",
    "babel-plugin-inline-import": "^3.0.0",
    "babel-plugin-inline-import-graphql-ast": "^2.4.1",
    "babel-plugin-module-resolver": "^3.1.1",
    "babel-plugin-prismjs": "^1.0.2",
    "babel-plugin-styled-components": "^1.10.0",
    "babel-runtime": "^6.26.0",
    "chromedriver": "^2.45.0",
    "core-js": "^2.6.1",
    "cypress": "^3.1.4",
    "eslint": "^5.11.1",
    "eslint-config-airbnb": "^17.1.0",
    "eslint-config-prettier": "^3.3.0",
    "eslint-import-resolver-meteor": "^0.4.0",
    "eslint-loader": "^2.1.1",
    "eslint-plugin-babel": "^5.3.0",
    "eslint-plugin-graphql": "^3.0.1",
    "eslint-plugin-import": "^2.14.0",
    "eslint-plugin-jsx-a11y": "^6.0.3",
    "eslint-plugin-meteor": "^5.1.0",
    "eslint-plugin-prettier": "^3.0.1",
    "eslint-plugin-react": "^7.12.0",
    "eslint-plugin-react-hooks": "^1.4.0",
    "jest": "^23.6.0",
    "jest-dom": "^3.0.0",
    "jest-meteor-stubs": "^1.5.1",
    "prettier": "^1.15.2",
    "react-test-renderer": "^16.7.0",
    "react-testing-library": "^6.0.3",
    "regenerator-runtime": "^0.13.1"
  }
}

@tkh44
Copy link
Member

tkh44 commented Apr 9, 2019

Maybe that's a previous version? I don't see any mention of emotion in there.

@stolinski
Copy link
Author

Blah. Wrong branch.

"dependencies": {
    "@babel/cli": "^7.2.3",
    "@babel/core": "^7.2.2",
    "@babel/runtime": "^7.4.2",
    "@emotion/core": "^10.0.9",
    "@emotion/styled": "^10.0.10",
    "@progress/kendo-drawing": "^1.5.7",
    "@progress/kendo-react-pdf": "^2.5.0",
    "apollo-cache-inmemory": "^1.3.12",
    "apollo-client": "^2.5.1",
    "apollo-engine": "^1.1.2",
    "apollo-link": "^1.2.6",
    "apollo-link-http": "^1.5.9",
    "apollo-link-schema": "^1.1.4",
    "apollo-server-express": "^2.3.1",
    "apollo-test-utils": "^0.3.2",
    "aws-sdk": "^2.381.0",
    "babel-polyfill": "^6.26.0",
    "bcrypt": "^3.0.5",
    "body-parser": "^1.18.3",
    "braintree": "^2.14.0",
    "braintree-web": "^3.41.0",
    "date-fns": "^1.30.1",
    "eazy-ease": "^1.0.2",
    "express": "^4.16.3",
    "graphql": "^14.0.2",
    "graphql-tag": "^2.10.0",
    "graphql-tools": "^4.0.3",
    "isomorphic-fetch": "^2.2.1",
    "js-cookie": "^2.2.0",
    "lodash": "^4.17.11",
    "logrocket": "^0.6.19",
    "markdown-to-jsx": "^6.8.4",
    "marked": "^0.5.2",
    "meteor-node-stubs": "^0.4.1",
    "mustache": "^3.0.1",
    "paypal-rest-sdk": "^2.0.0-rc.1",
    "picturefill": "^3.0.2",
    "prismjs": "^1.15.0",
    "prop-types": "^15.6.2",
    "raven": "^2.6.4",
    "raven-js": "^3.27.0",
    "react": "^16.8.0",
    "react-addons-test-utils": "^15.6.2",
    "react-addons-transition-group": "^15.6.2",
    "react-addons-update": "^15.6.2",
    "react-apollo": "^2.5.2",
    "react-async-script-loader": "^0.3.0",
    "react-autocomplete": "^1.8.1",
    "react-beautiful-dnd": "^10.0.3",
    "react-braintree-fields": "^1.1.0",
    "react-color": "^2.17.0",
    "react-confetti": "^2.3.0",
    "react-dom": "^16.8.0",
    "react-dropzone": "^5.1.0",
    "react-helmet": "^5.2.0",
    "react-inlinesvg": "^0.8.1",
    "react-lazyload": "^2.3.0",
    "react-loadable": "git+https://github.com/CaptainN/react-loadable.git",
    "react-month-picker-input": "^1.1.6",
    "react-render-html": "^0.6.0",
    "react-router": "^4.3.1",
    "react-router-dom": "^4.3.1",
    "react-router-prop-types": "1.0.4",
    "react-spring": "^8.0.18",
    "react-tagsinput": "^3.19.0",
    "react-toggle-switch": "^3.0.4",
    "react-transition-group": "^2.5.2",
    "react-tweet-embed": "^1.1.1",
    "react-waypoint": "^8.1.0",
    "react-youtube-player": "^2.0.1",
    "resize-observer-polyfill": "^1.5.1",
    "simpl-schema": "^1.5.3",
    "speakingurl": "^14.0.1",
    "stream-collect": "^2.1.3",
    "stripe": "^6.20.0",
    "url-search-params-polyfill": "^5.0.0",
    "victory": "^31.0.2",
    "youtube-player": "^5.5.1"
  },
  "devDependencies": {
    "@babel/helper-plugin-utils": "^7.0.0",
    "@babel/plugin-proposal-class-properties": "7.2.3",
    "@babel/plugin-proposal-object-rest-spread": "7.2.0",
    "@babel/plugin-proposal-optional-chaining": "^7.0.0",
    "@babel/plugin-transform-runtime": "7.2.0",
    "@babel/preset-env": "7.2.3",
    "@babel/preset-react": "7.0.0",
    "autoprefixer": "^9.4.3",
    "babel-core": "^7.0.0-0",
    "babel-eslint": "^10.0.1",
    "babel-jest": "^23.6.0",
    "babel-loader": "^8.0.4",
    "babel-plugin-dynamic-import-node": "^2.1.0",
    "babel-plugin-emotion": "^10.0.9",
    "babel-plugin-inline-import": "^3.0.0",
    "babel-plugin-inline-import-graphql-ast": "^2.4.1",
    "babel-plugin-module-resolver": "^3.1.1",
    "babel-plugin-prismjs": "^1.0.2",
    "babel-runtime": "^6.26.0",
    "chromedriver": "^2.45.0",
    "core-js": "^2.6.1",
    "cypress": "^3.1.4",
    "eslint": "^5.11.1",
    "eslint-config-airbnb": "^17.1.0",
    "eslint-config-prettier": "^3.3.0",
    "eslint-import-resolver-meteor": "^0.4.0",
    "eslint-loader": "^2.1.1",
    "eslint-plugin-babel": "^5.3.0",
    "eslint-plugin-graphql": "^3.0.1",
    "eslint-plugin-import": "^2.14.0",
    "eslint-plugin-jsx-a11y": "^6.0.3",
    "eslint-plugin-meteor": "^5.1.0",
    "eslint-plugin-prettier": "^3.0.1",
    "eslint-plugin-react": "^7.12.0",
    "eslint-plugin-react-hooks": "^1.4.0",
    "jest": "^23.6.0",
    "jest-dom": "^3.0.0",
    "jest-meteor-stubs": "^1.5.1",
    "prettier": "^1.15.2",
    "react-test-renderer": "^16.7.0",
    "react-testing-library": "^6.0.3",
    "regenerator-runtime": "^0.13.1"
  },

@tkh44
Copy link
Member

tkh44 commented Apr 9, 2019

What does you babelrc look like on this branch with all of these plugins?

@stolinski
Copy link
Author

{
  "presets": ["@babel/preset-env"],
  "plugins": [
    "emotion",
    "@babel/plugin-proposal-optional-chaining",
    [
      "@babel/plugin-proposal-class-properties",
      {
        "loose": true
      }
    ],
    [
      "module-resolver",
      {
        "root": ["./"]
      }
    ],
    [
      "prismjs",
      {
        "languages": ["javascript", "css", "markup", "jsx"],
        "plugins": ["line-numbers"]
      }
    ],
    "react-loadable/babel"
  ]
}

@tkh44
Copy link
Member

tkh44 commented Apr 9, 2019

You're not using jsx? Do you have some babel config in your package.json?

@stolinski
Copy link
Author

I am using jsx. Only other babel config exists for jest specifically.

@tkh44
Copy link
Member

tkh44 commented Apr 9, 2019

I'm kind of confused because you don't have @babel/preset-react anywhere in that babelrc so if you were to use jsx it would error. This makes me think that babel is being configured for React/jsx somewhere else in your project.

@stolinski
Copy link
Author

stolinski commented Apr 10, 2019

There is no other babel config. Regardless, throwing the styled components babel plugin in this exact same config worked without issue along with any others that I have here. This is the first time a babel plugin hasn't been recognized in this project & babelrc file. It's a bummer that the emotion plugin isn't being picked up. Thanks for your help.

@tkh44
Copy link
Member

tkh44 commented Apr 11, 2019

I'm wondering if you hit this issue: #1203

If so that makes more sense than the plugin just not working.

@hueitan
Copy link

hueitan commented Sep 26, 2019

@tkh44 I'm facing the same problem as the author, and I also tried the solution given in #1203, but it doesn't fix.

@brettinternet
Copy link

I hope this contributes to the discussion: I have found a similar issue with a Typescript project where I exported styled from a utility layer with a typed theme, as shown in the Typescript documentation example. Then, using import styled from 'utils/styled' I'd see this error when using nested component selectors, despite using the babel plugin. The macro didn't work for me either.

Uncaught Error: Component selectors can only be used in conjunction with babel-plugin-emotion.

I ended up having to use a direct import as import styled from '@emotion/styled', which is an unfortunate workaround.

@Andarist
Copy link
Member

Andarist commented Nov 4, 2019

@brettinternet thanks for the feedback. Custom styleds etc are currently not handled by our plugin - this will get fixed by #1220 this month though, so stay tuned!

@loweisz
Copy link

loweisz commented Jan 3, 2020

@Andarist @brettinternet With which version is this problem fixed?
I'm still facing the same issue when using a themed styled version of emotion.
I'm using:

    "@emotion/core": "^10.0.27",
    "@emotion/styled": "^10.0.27",
    "emotion": "^10.0.27",
    "babel-plugin-emotion": "^10.0.27",

And when I use a nested selector I get the same error as:

  Uncaught Error: Component selectors can only be used in conjunction with babel-plugin-emotion.

@Andarist
Copy link
Member

Andarist commented Jan 3, 2020

As far as I know this has never been broken. Could you prepare a repro case? I could take a look then.

EDIT:// sorry, I thought this was other thread. Are you using custom styled instance? Reexported from your file/module?

@loweisz
Copy link

loweisz commented Jan 3, 2020

@Andarist Yes this is what I am using

@Andarist
Copy link
Member

Andarist commented Jan 3, 2020

So support for this within a babel plugin has been added in #1220 . I'm afraid though that it's going to be a part of the upcoming v11 release, we don't have time to backport this to v10. I encourage you to try out the v11 though, it doesn't have many breaking changes - it's mostly just cleanup, hooks, and TS types rework.

@JonathanCallewaert
Copy link

@Andarist How do I use the CreateStyled then or inject my Theme Interface? As CreateStyled is not generic anymore in emotion V11

@Andarist
Copy link
Member

Andarist commented Jan 6, 2020

@JonathanCallewaert
Copy link

thx!!

@AlexanderMelox
Copy link

I also have this error. I installed the plugin and add it to my .babelrc and it still shows the Error: Component selectors can only be used in conjunction with babel-plugin-emotion. error. Has there been a fix for this?

@Andarist
Copy link
Member

@AlexanderMelox there is no issue to be fixed, you most likely have not configured things correctly. Could you share a runnable repro case of your problem?

@AlexanderMelox
Copy link

AlexanderMelox commented Jun 18, 2020

I just converted back to SASS files. I literally just did these steps.
I am using create-react-app and downloaded @emotion/styled and @emotion/core.

  1. I tried doing something like this
const Parent = styled.div`
...
`;

const Child = styled.div`
    ${Parent}:hover & {
         opacity: 1
    }
`;
  1. Then I got the error so I proceed to install the emotion babel plugin and added it to my plugins in my .babelrc

Still didn't fix my problem. I tried even ejecting react and still didn't work.

@Andarist
Copy link
Member

Can't tell you what you have done incorrectly if you don't share a repro case.

@AlexanderMelox
Copy link

@Andarist Here is a codesandbox of what I'm trying to do.

https://codesandbox.io/s/musing-snow-wzero?file=/src/App.js

I'm trying to get access to the parent component when it's hovered to do something in the child component. And still get the error after installing the babel-plugin-emotion and adding it to the .babelrc

@Andarist
Copy link
Member

This is using CRA template and CRA doesn't let you customize Babel plugins, so it doesn't even attempt to read your .babelrc. However, with CRA you can use our macros (just use @emotion/styled/macro instead of @emotion/styled): https://codesandbox.io/s/weathered-darkness-qbmso

@AlexanderMelox
Copy link

@Andarist What’s the difference between the macro and the regular package?

@Andarist
Copy link
Member

Macro includes targeted babel plugin when used with babel-plugin-macros (without this plugin used it wouldn't work at all). This makes it possible to add "custom babel plugins" to tools like CRA because CRA includes babel-plugin-macros in its preset, so no extra configuration is required on the user's side. You can read more here: https://github.com/kentcdodds/babel-plugin-macros and here: https://emotion.sh/docs/babel-macros

@JCMais
Copy link

JCMais commented Jul 18, 2020

This issue still happens if you are importing styled from somewhere else, which is the case if you are trying to have a typesafe Theme as you need to do something like this (from the docs):

import styled, { CreateStyled } from '@emotion/styled'

type Theme = {
  color: {
    primary: string
    positive: string
    negative: string
  }
  // ...
}

export default styled as CreateStyled<Theme>

@Andarist
Copy link
Member

@JCMais this will get easier in the upcoming v11 thanks to the new importMap option, but also you won't have to reexport custom styled just to define your theme: https://deploy-preview-1600--emotion.netlify.app/docs/typescript#define-a-theme

@Rolchau
Copy link

Rolchau commented Sep 1, 2020

@Andarist do you know if there is a workaround until v11 gets released? I am working on a component library where we need the typesafe theme, and ended up having to do a onMouseEnter/Leave in JS instead of using a simple :hover because of this error :(

@Andarist
Copy link
Member

Andarist commented Sep 1, 2020

@Rolchau do u provide a custom styled that your components need to use?

@Rolchau
Copy link

Rolchau commented Sep 1, 2020

@Andarist Yeah we used the example here to avoid theme warnings and get auto-suggestion working on the theme object.

Link didn't anchor correctly but its this:

import styled, { CreateStyled } from '@emotion/styled'

type Theme = {
  color: {
    primary: string
    positive: string
    negative: string
  }
  // ...
}

export default styled as CreateStyled<Theme>```

@Andarist
Copy link
Member

Andarist commented Sep 1, 2020

There is no workaround for this in Emotion 10 - unless you would fork our Babel plugin. I encourage you to try out v11 though - it's stable, already used by some at scale.

@vtereshyn
Copy link

I have the same issue when I use @emotion with cypress. Did someone have that figured out?

@Jacky-Rolo
Copy link

FYI @vtereshyn

Andarist 's another demo work for me, to solve this error message, NO NEED @emotion/styled/macro

Many many thanks Andarist hard work

@dkumar431
Copy link

Am I missing something here? Why this issue has been closed? I am still getting this issue with typescript, nextjs and emotion.
Does any able to solve this issue without the target hack?

@Andarist
Copy link
Member

If you are not using our Babel plugin or Next's Emotion plugin (the one based on SWC) then this won't work - TypeScript itself doesn't allow for custom transformers by default.

@techdiary
Copy link

techdiary commented Jun 29, 2022

 "devDependencies": {
...
"@emotion/babel-plugin": "^11.9.2",
}
"dependencies": {
...
    "@emotion/react": "^11.9.3",
    "@emotion/styled": "^11.9.3",
}
"plugins": [
  "@emotion",
  ["@babel/plugin-proposal-decorators", { "legacy": true }]
]
onst StyledCheckBox = styled.div<CheckBoxContainerProps>`

  ${SvgIcon} {
    visibility: ${props => props.checked ? 'visible' : 'hidden'};
    stroke: ${props => props.disabled ? 'grey' : 'white'};
  }

  border: ${props => props.disabled ? '1px solid rgba(0, 0, 0, 0.12)' : "1px solid #00C000"};
  transition: "all 150ms";
  border-radius: ${props => props.xSize * 1.75}px;
  width: ${props => props.xSize * 8}px;
  height: ${props => props.xSize * 8}px;
  background-color: ${props => props.checked && !props.disabled ? "#43b916" : "white"};

  :hover,:focus {
    background-color: '#E8F6E3';
    border: '1px solid #299300';
  }

  :hover ${SvgIcon}: {
    visibility: 'visible',
    stroke: '#43b916'
  },
`;

Component selectors can only be used in conjunction with @emotion/babel-plugin, the swc Emotion plugin, or another Emotion-aware compiler transform.

Seeing the issue after upgrading emotion to v11. Can someone please help me resolve this?
@Andarist @Jacky-Rolo

@srmagura
Copy link
Member

@techdiary Your code looks fine to me. Can you provide a runnable example that shows the issue?

@aehmt
Copy link

aehmt commented Jul 21, 2022

@techdiary Were you able to resolve your issue?

@techdiary
Copy link

@srmagura I've moved from this approach. I will try check into previous commits and come back.
@aehmt sorry but i changed my approach. Waiting for solution in here myself

@happy-nut
Copy link

For next js users, put this to your next.config.js. Then I solved this issue.

compiler: {
  emotion: true
}

@smiling-cobra
Copy link

smiling-cobra commented Feb 8, 2023

Had the same error while trying to run tests with jest. This workaround works for me.

const ComponentA = styled('div', { target: '' })'';

const ComponentB = styled('div')' ${ComponentA} {} ';

@mikematos84
Copy link

Had the same error while trying to run tests with jest. This workaround works for me.

const ComponentA = styled('div', { target: '' })'';

const ComponentB = styled('div')' ${ComponentA} {} ';

Awesome that there is a workaround, but I guess I fail to see how or why this works and is not just defaulted to using like a styled.div versus the way you have done it.

@AnsonH
Copy link

AnsonH commented Oct 3, 2023

I got mine working by following this solution.

Go to main.js and add the following Webpack config

const path = require("path")

const toPath = (_path) => path.join(process.cwd(), _path)

module.exports = {
  /* ... */
  babel: async (options) => ({
    ...options,
    // Remember to use the Emotion Babel plugin!
    plugins: ['@emotion']
  }),
  webpackFinal: async (config) => {
    return {
      ...config,
      resolve: {
        ...config.resolve,
        alias: {
          ...config.resolve.alias,
          // Add these lines
          "@emotion/core": toPath("node_modules/@emotion/react"),
          "@emotion/styled": toPath("node_modules/@emotion/styled"),
          "emotion-theming": toPath("node_modules/@emotion/react"),
        }
      }
    };
  }
};

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests