Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

137
Visualizações
How can I use emotion with react-native-web?

I develop a cross-platform react-native application inside a monorepo and want to render my app using react-native-web in the browser. To achieve that I followed this guide https://mmazzarolo.com/blog/2021-09-22-running-react-native-everywhere-web/. I'm also using the metro-react-native-babel-preset package for compiling my web-app, as described in the react-native-web guide https://necolas.github.io/react-native-web/docs/multi-platform/. Here is a part of my craco.config.js file (I use create-react-app with craco):

// craco.config.js
const webpack = require("webpack");
const { getWebpackTools } = require("react-native-monorepo-tools");

const monorepoWebpackTools = getWebpackTools();

module.exports = {
  babel: {
    presets: ["module:metro-react-native-babel-preset", "@babel/preset-react"]
  },
  webpack: {
    configure: (webpackConfig) => {
      // Allow importing from external workspaces.
      monorepoWebpackTools.enableWorkspacesResolution(webpackConfig);
      // Ensure nohoisted libraries are resolved from this workspace.
      monorepoWebpackTools.addNohoistAliases(webpackConfig);
      return webpackConfig;
    },

Now it seems like the metro-react-native-babel-preset preset is not compatible with the stylis library (imported by @emotion/react), because I get this error when launching the app in the browser (it compiles without errors):

Uncaught TypeError: (0 , _stylis.middleware) is not a function
    at createCache (emotion-cache.browser.esm.js:288)
    at Object.../node_modules/@emotion/react/dist/emotion-element-699e6908.browser.esm.js (emotion-element-699e6908.browser.esm.js:11)
    at __webpack_require__ (bootstrap:851)
    at fn (bootstrap:150)
    at Object.<anonymous> (emotion-react.browser.esm.js:3)
    at Object.../node_modules/@emotion/react/dist/emotion-react.browser.esm.js (emotion-react.browser.esm.js:347)
    at __webpack_require__ (bootstrap:851)
    at fn (bootstrap:150)
    at Object.../node_modules...

I guess that the stylis-package cannot be imported correctly due to the metro-react-native-babel-preset preset, since without the preset the error is gone (but the compilation-step throws errors, so removing the preset is not a solution).

What do I have to change in my babel- / webpack-config or code to remove this error?

Minimum, reproducible example

https://github.com/Tracer1337/stackoverflow-mre

about 4 years ago · Juan Pablo Isaza
2 Respostas
Responde à pergunta

0

I think it is a problem with packages version.

When I try it, I also have this error.

But when updated packages to newer version it was gone (other error occured thought, but related to reactDOM).

I have updated react-scripts to 5.0.0;

See if it helps you as well.

{
  "name": "@meme-bros/web",
  ...
  "dependencies": {
    "@emotion/react": "^11.7.1",
    "@emotion/styled": "^11.6.0",
    "@mui/material": "^5.2.3",
    "@types/react": "^17.0.0",
    "@types/react-dom": "^17.0.0",
    "metro-react-native-babel-preset": "^0.66.2",
    "react": "^17.0.2",
    "react-dom": "^17.0.2",
    "react-native-web": "^0.17.5",
    "react-scripts": "5.0.0",
    "typescript": "^4.1.2"
  },
  "devDependencies": {
    "@craco/craco": "^6.4.3",
    "react-native-monorepo-tools": "^1.1.4"
  },
 ...
about 4 years ago · Juan Pablo Isaza Relatório

0

Would you mind to follow these guidelines to run React Native app on web. Official Doc

And Add @emotion/react in compileNodeModules list

about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda