es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Storybook no funciona con rutas absolutas en Gatsby.

Recientemente instalé un complemento para manejar rutas absolutas en Gatsby llamado gatsby-plugin-root-import, y hasta que lo configuré, Storybook funcionaba correctamente. Sin embargo, cuando ejecuto una ruta absoluta, se genera un error.

Aquí no se genera un error:

import { URL_DEFAULT } from '../../utils/globalVars'

Pero aquí se genera un error:

import { URL_DEFAULT } from 'utils/globalVars'

Error:

resolve 'utils/globalVars' in '/home/arthur/Área de Trabalho/mirror/src/components/Button'
  Parsed request is a module.
  using description file: /home/arthur/Área de Trabalho/mirror/package.json (relative path: ./src/components/Button)
    Field 'browser' doesn't contain a valid alias configuration
    resolve as module
      /home/arthur/Área de Trabalho/mirror/src/components/Button/node_modules doesn't exist or is not a directory
      /home/arthur/Área de Trabalho/mirror/src/components/node_modules doesn't exist or is not a directory

Configuración del complemento Gatsby:

const path = require('path')
{
  resolve: 'gatsby-plugin-root-import',
  options: {
    resolveModules: [path.join(__dirname, 'libs')],
    utils: path.join(__dirname, 'src', 'components', 'utilities')
  }
},

Configuración de vista previa de Storybook:

global.___loader = {
  enqueue: () => {},
  hovering: () => {},
}
// Esta variable global evita el error "___BASE_PATH__ no está definido" dentro de Storybook.
global.__BASE_PATH__ = "/"
// Navegar a través de una aplicación de Gatsby usando gatsby-link o cualquier otro componente de Gatsby utilizará el método '___navigate'.
//En Storybook, tiene más sentido registrar una acción que realizar una navegación real. Consulte la documentación del complemento de acciones para obtener más información: https://storybook.js.org/docs/react/essentials/actions
window.___navigate = pathname => {
  action("NavigateTo:")(pathname)
}

tsConfig:

{
  "compilerOptions": {
    // "baseUrl": "src",
    "target": "esnext",
    "module": "esnext",
    "lib": ["dom", "es2017"],
    // "allowJs": true,
    // "checkJs": true,
    "jsx": "react",
    "strict": true,
    "esModuleInterop": true,
    "moduleResolution": "node",
    "experimentalDecorators": true,
    "emitDecoratorMetadata": true,
    "noEmit": true,
    "skipLibCheck": true
  },
  "exclude": ["node_modules"],
  "include": ["**/*.ts", "**/*.tsx"]
}

package.json:

"dependencies": {
  "@styled-icons/boxicons-regular": "^10.37.0",
  "@styled-icons/boxicons-solid": "^10.34.0",
  "@styled-icons/fa-brands": "^10.34.0",
  "@styled-icons/material": "^10.28.0",
  "@styled-icons/material-outlined": "^10.28.0",
  "@styled-icons/remix-fill": "^10.18.0",
  "next": "10.1.3",
  "next-pwa": "^5.2.21",
  "polished": "^4.1.2",
  "react": "17.0.2",
  "react-dom": "17.0.2",
  "react-slick": "^0.28.1",
  "styled-components": "^5.3.0",
  "styled-media-query": "^2.1.2"
},
"devDependencies": {
  "@babel/core": "^7.13.16",
  "@babel/preset-typescript": "^7.13.0",
  "@storybook/addon-essentials": "^6.2.9",
  "@storybook/react": "^6.2.9",
  "@testing-library/jest-dom": "^5.12.0",
  "@testing-library/react": "^11.2.6",
  "@testing-library/user-event": "^13.1.9",
  "@types/jest": "^26.0.23",
  "@types/node": "^14.0.14",
  "@types/react": "^17.0.5",
  "@types/react-slick": "^0.23.4",
  "@types/styled-components": "^5.1.9",
  "@typescript-eslint/eslint-plugin": "^4.22.1",
  "@typescript-eslint/parser": "^4.22.1",
  "babel-loader": "^8.2.2",
  "babel-plugin-styled-components": "^1.12.0",
  "eslint": "^7.25.0",
  "eslint-config-prettier": "^8.3.0",
  "eslint-plugin-prettier": "^3.1.4",
  "eslint-plugin-react": "^7.20.0",
  "eslint-plugin-react-hooks": "^4.0.4",
  "husky": "^6.0.0",
  "jest": "^26.6.3",
  "jest-styled-components": "^7.0.4",
  "lint-staged": "^11.0.0",
  "plop": "^2.7.4",
  "prettier": "^2.0.5",
  "typescript": "^4.2.4"
}

Webpack para Storybook en main.js:

webpackFinal: async config => {
  // Transpilar módulos de Gatsby porque Gatsby incluye código ES6 sin transpilar.
  config.module.rules[0].exclude = [/node_modules\/(?!(gatsby)\/)/]
  // Use babel-plugin-remove-graphql-queries para eliminar las consultas estáticas de los componentes al renderizar en Storybook.
  config.module.rules[0].use[0].options.plugins.push(
    require.resolve("babel-plugin-remove-graphql-queries")
  )
  return config
},
Tags:  , ,

Answer

  1. Avatar for davy.ai

    Parece que el plugin recientemente instalado, gatsby-plugin-root-import, está causando un error al ejecutar rutas absolutas en Storybook. El mensaje de error sugiere que la configuración de alias en el campo del navegador es inválida. La configuración del plugin en gatsby-config.js establece alias para módulos en los directorios utils y libs. Parece que Storybook no es capaz de resolver estos alias correctamente.

    Puede ser necesario configurar webpack en el archivo main.js de Storybook para transpilar módulos de Gatsby y utilizar el mismo plugin de babel utilizado en Gatsby para eliminar consultas estáticas de componentes al renderizar en Storybook.

    Además, la configuración de TypeScript puede necesitar ser ajustada para reflejar los cambios hechos por el plugin, especialmente con la configuración “baseUrl” o rutas incluidas.

    Puede ser necesario realizar una depuración adicional para determinar la causa exacta del error y la solución adecuada.

Comments are closed.