Con el Contributor Day de WordCamp Valencia 2025 acercándose, he estado organizando mis ideas sobre cómo ayudar a quienes contribuyen por primera vez a Gutenberg. Esta guía comenzó como preparación para la mesa de contribuidores Core, pero esta información puede ser igual de útil para cualquier persona que quiera contribuir al editor de bloques de WordPress, sobre todo si es la primera vez.
Ya sea que estés en un Contributor Day o que te sumerjas por tu cuenta, esta guía te guiará a través de la configuración esencial y el flujo de trabajo para contribuir a Gutenberg.
Tabla de contenidos
- Herramientas básicas
- La copia local (de trabajo) de Gutenberg
- El entorno local de desarrollo
- Los scripts npm esenciales
- ¿Qué hace npm start?
- Un flujo de trabajo práctico de desarrollo
- Consejos para contribuir
- Recursos y comunidad
- Referencia rápida de comandos
- Notas finales
Herramientas básicas
Antes de empezar a contribuir a Gutenberg, necesitarás estas herramientas instaladas. La mayoría son estándar para desarrollo JavaScript, pero hay requisitos específicos de WordPress que vale la pena mencionar.
Node.js y npm
Gutenberg actualmente requiere Node.js v20 (Active LTS) y npm v10. Recomiendo usar nvm para gestionar las versiones de Node: es super útil cuando cambias entre proyectos con diferentes requisitos.
nvm install 20
nvm use 20Docker Desktop
Tener Docker simplifica bastante el lanzar un entorno local para los diferentes proyectos de WordPress. El equipo de Gutenberg construyó @wordpress/env alrededor de Docker, y aunque existen alternativas como Local o MAMP, te perderías la integración perfecta que hace el desarrollo tan fluido.
Descarga Docker Desktop e inícialo antes de comenzar. Ten en cuenta que las descargas iniciales de imágenes pueden tomar algo de tiempo.
Git y GitHub
Necesitarás una cuenta de GitHub y Git configurado localmente. La documentación del flujo de trabajo Git en el Block Editor Handbook es bastante completa por si necesitas más detalles.
GitHub CLI (opcional pero útil)
Esto no es imprescindible pero una vez que descubras comandos como gh pr checkout para revisar pull requests, se volverá esencial en tu flujo de trabajo.
# macOS
brew install gh
# Windows/Linux
# Ver: https://cli.github.com/La copia local (de trabajo) de Gutenberg
Aquí se aplica el flujo de trabajo estándar de código abierto: fork, clonar y agregar upstream. Este sería el proceso completo:
1. Hacer fork del repositorio
- Navega a github.com/WordPress/gutenberg
- Haz clic en “Fork” arriba a la derecha
- GitHub crea tu copia personal del repo bajo tu usuario
2. Clonar tu fork
git clone git@github.com:TU_USUARIO/gutenberg.git
cd gutenberg
git remote add upstream https://github.com/WordPress/gutenberg.gitEl comando
git remote add upstreamconecta tu fork personal con el repositorio original de WordPress. Así tendrás dos referencias:origin(tu fork) donde haces cambios, yupstream(el repo oficial) de donde traes las actualizaciones. Sin esta conexión, tu fork quedaría desactualizado rápidamente.
3. Mantente sincronizado
Ahora que tienes upstream configurado, puedes traer los últimos cambios del proyecto principal. Gutenberg recibe docenas de commits diarios, así que es importante mantener tu fork actualizado:
git fetch upstream
git merge upstream/trunkEl entorno local de desarrollo
Una vez tengas instaladas las herramientas basicas y tengas tu copia local de gutenberg debidamente configurada, llega el momento de preparar tu entorno local para contribuir a Gutenberg. A diferencia de la configuración manual clásica de WordPress —donde tenías que instalar Apache, MySQL y PHP por separado— el proyecto ha simplificado radicalmente este proceso. Gracias a las herramientas que utilizan Docker, obtendrás una instalación de WordPress lista para desarrollar en unos pocos pasos y sin dolores de cabeza, todo completamente automatizado.
Instalando dependencias
Siempre usa npm ci en lugar de npm install:
npm ciEl comando ci asegura que obtengas exactamente las mismas versiones de paquetes que otros contribuidores, esto previene esas frustrantes situaciones de “funciona en mi máquina”.
A diferencia de npm install que puede actualizar versiones según los rangos permitidos (ej: ^1.2.3 podría instalar 1.3.0), npm ci instala exactamente lo que está en package-lock.json. Además, es más rápido, borra node_modules antes de instalar, y falla si hay discrepancias entre archivos – garantizando que todos trabajen con el mismo entorno.
Iniciando WordPress con wp-env
El paquete @wordpress/env proporciona una instalación completa de WordPress con un solo comando:
npm run wp-env startLa primera ejecución descarga imágenes de Docker (10-15 minutos), pero los inicios posteriores toman segundos. Obtendrás:
- WordPress en
http://localhost:8888 - Admin en
http://localhost:8888/wp-admin/ - Usuario:
admin - Contraseña:
password
Gestionando tu entorno:
npm run wp-env stop # Pausar cuando termines
npm run wp-env destroy # Reinicio completo si es necesarioLos scripts npm esenciales
El repositorio de Gutenberg contiene más de 100 scripts npm. Aquí comento los que considero que realmente importan para los contribuidores.
Scripts de desarrollo core
Estos son los scripts fundamentales que usarás durante tu sesión de desarrollo. Son los comandos que mantendrás ejecutándose mientras trabajas en tus cambios y que te permiten ver el resultado de tu código en tiempo real.
npm start (alias: npm run dev)
Tu comando principal de desarrollo. Compila todos los paquetes y observa cambios, reconstruyendo automáticamente cuando guardas archivos. Mantén esto ejecutándose en una terminal mientras trabajas.
npm start
Referencia: package.json#L230
npm run build
Crea compilaciones optimizadas listas para producción. Úsalo para pruebas finales o crear un ZIP del plugin.
npm run buildReferencia: package.json#L186
Scripts de calidad de código
WordPress mantiene estándares de código muy específicos y estos scripts te ayudan a cumplirlos automáticamente. Ejecutar estos comandos antes de hacer commit te ahorrará tiempo en la revisión de código y garantizará que tu contribución siga las convenciones del proyecto.
npm run format
Formatea automáticamente el código según los estándares de WordPress usando Prettier. Ejecuta antes de hacer commit para evitar discusiones de estilo en la revisión de código.
npm run formatnpm run lint:js y npm run lint:css
ESLint para JavaScript/TypeScript y Stylelint para CSS. Ambos tienen variantes de auto-corrección:
npm run lint:js:fix
npm run lint:css:fixScripts de testing
En el repo de Gutenberg tenemos disponibles varios scripts para lanzar los tests. Ten en cuenta que para la mayoría de estos comandos, necesitas tener WordPress ejecutándose correctamente con wp-env (es decir, que ya hayas corrido npm run wp-env start). Si el entorno de WordPress no está activo o configurado, estos scripts podrían fallar, ya que dependen del entorno Docker para ejecutar las pruebas dentro de la instancia local de WordPress.
Los scripts de testing cubren distintos niveles:
- Pruebas unitarias de JavaScript (
npm run test:unit): Ejecutadas principalmente con Jest, verifican que funciones y componentes JavaScript hagan lo esperado. - Pruebas end-to-end (E2E) (
npm run test:e2e): Usan Playwright para simular interacciones reales en el editor como si fueras un usuario. - Pruebas unitarias de PHP (
npm run test:unit:php): Utilizan PHPUnit dentro del contenedor Docker para asegurar que el código PHP funcione correctamente.
npm run test:unit
Ejecuta tests de Jest. Durante el desarrollo, prefiero el modo watch:
npm run test:unit:watchPara ejecutar tests específicos, usa el parámetro --testPathPattern:
npm run test:unit -- --testPathPattern packages/components/src/buttonActualiza snapshots después de cambios intencionales:
npm run test:unit -- --updateSnapshotnpm run test:e2e
Tests end-to-end usando Playwright simulan interacciones reales del usuario:
npm run test:e2ePara ejecutar un archivo de test específico:
npm run test:e2e -- site-editor/title.spec.jsCon navegadores específicos:
npm run test:e2e -- --project=webkit --project=firefoxModo debug para solucionar problemas:
npm run test:e2e:debugnpm run test:unit:php
Tests unitarios de PHP via PHPUnit en el contenedor Docker:
npm run test:unit:phpPara ejecutar tests específicos con PHPUnit, puedes usar filtros:
npm run test:unit:php -- --filter Block_Template_Tests¿Qué hace npm start?
npm start es el script principal que tendrá que tener en marcha para contribuir. Cuando ejecutas npm start, se dispara npm run dev, que ejecuta node ./bin/dev.mjs. Esto pone en marcha una serie de procesos automatizados y coordinados:
- Limpiando compilaciones anteriores – Elimina artefactos de
build/ynode_modules/.cache/ - Compilando workspaces – Compila cada uno de los 100+ paquetes según su configuración
- Validación de TypeScript – Asegura versiones consistentes de TypeScript entre contribuidores
- Generación de tipos – Crea archivos
.d.tspara mejor soporte del IDE - Validación de tipos – Verifica que los tipos generados sean válidos (crucial en un monorepo)
- Empaquetado de vendors – React, ReactDOM y otras dependencias compartidas se empaquetan una vez y se reutilizan
- Compilación de paquetes – Tres fases:
- Transpilación: JavaScript moderno → código compatible con navegadores
- Empaquetado: Archivos combinados y optimizados
- Construcción de rutas: Paquetes especiales para páginas admin de WordPress
- Archivos de registro PHP – Genera archivos que le dicen a WordPress qué scripts cargar
- Modo watch – Monitorea archivos y reconstruye solo lo que cambió
Compilación inicial: 2-3 minutos. Recompilaciones incrementales: segundos.
Ver ejemplo completo de lo devuelve el comando (cuando todo va bien)
⬢ gutenberg-fork trunk ⦾ npm start
> gutenberg@22.0.0 start
> npm run dev
> gutenberg@22.0.0 dev
> node ./bin/dev.mjs
🔨 Starting development build...
🧹 Cleaning packages...
📦 Building workspaces...
🔍 Validating TypeScript version...
📘 Building TypeScript types...
✅ Checking type declaration files...
📦 Building vendor files...
🔨 Building vendor files...
📦 Copying React UMD files...
📦 Bundling react-jsx-runtime...
📦 Bundling React Refresh...
✔ Copied React UMD files
✔ Bundled react-jsx-runtime
✔ Bundled React Refresh
🎉 Vendor files built successfully! (19ms)
✅ Initial build completed! (113s)
👀 Starting watch mode...
- TypeScript compiler watching for type changes
- Package builder watching for source changes
[09:56:52] Starting compilation in watch mode...
[09:56:52] Found 0 errors. Watching for file changes.
🔨 Building packages...
📝 Phase 1: Transpiling packages...
✔ Transpiled create-block-interactive-template (125ms)
✔ Transpiled create-block-tutorial-template (124ms)
✔ Transpiled docgen (128ms)
✔ Transpiled babel-plugin-import-jsx-pragma (132ms)
✔ Transpiled babel-plugin-makepot (132ms)
✔ Transpiled browserslist-config (131ms)
✔ Transpiled block-serialization-spec-parser (131ms)
✔ Transpiled env (129ms)
✔ Transpiled dependency-extraction-webpack-plugin (130ms)
✔ Transpiled project-management-automation (127ms)
✔ Transpiled postcss-themes (128ms)
✔ Transpiled prettier-config (128ms)
✔ Transpiled readable-js-assets-webpack-plugin (127ms)
✔ Transpiled npm-package-json-lint-config (128ms)
✔ Transpiled lazy-import (131ms)
✔ Transpiled stylelint-config (129ms)
✔ Transpiled blob (138ms)
✔ Transpiled dom-ready (136ms)
✔ Transpiled html-entities (135ms)
✔ Transpiled autop (140ms)
✔ Transpiled block-serialization-default-parser (137ms)
✔ Transpiled wp-build (132ms)
✔ Transpiled jest-puppeteer-axe (137ms)
✔ Transpiled escape-html (139ms)
✔ Transpiled private-apis (141ms)
✔ Transpiled is-shallow-equal (147ms)
✔ Transpiled latex-to-mathml (146ms)
✔ Transpiled token-list (144ms)
✔ Transpiled warning (146ms)
✔ Transpiled shortcode (151ms)
✔ Transpiled jest-console (153ms)
✔ Transpiled priority-queue (154ms)
✔ Transpiled vips (155ms)
✔ Transpiled redux-routine (156ms)
✔ Transpiled hooks (158ms)
✔ Transpiled report-flaky-tests (165ms)
✔ Transpiled style-engine (173ms)
✔ Transpiled wordcount (175ms)
✔ Transpiled interactivity (181ms)
✔ Transpiled url (197ms)
✔ Transpiled e2e-test-utils-playwright (200ms)
✔ Transpiled base-styles (797ms)
✔ Transpiled babel-preset-default (18ms)
✔ Transpiled jest-preset-default (17ms)
✔ Transpiled create-block (17ms)
✔ Transpiled postcss-plugins-preset (17ms)
✔ Transpiled deprecated (35ms)
✔ Transpiled undo-manager (36ms)
✔ Transpiled i18n (43ms)
✔ Transpiled element (50ms)
✔ Transpiled sync (56ms)
✔ Transpiled eslint-plugin (34ms)
✔ Transpiled react-i18n (48ms)
✔ Transpiled keycodes (50ms)
✔ Transpiled date (58ms)
✔ Transpiled primitives (59ms)
✔ Transpiled a11y (60ms)
✔ Transpiled api-fetch (71ms)
✔ Transpiled theme (70ms)
✔ Transpiled dom (88ms)
✔ Transpiled scripts (5ms)
✔ Transpiled react-native-aztec (5ms)
✔ Transpiled interactivity-router (96ms)
✔ Transpiled preferences-persistence (96ms)
✔ Transpiled compose (119ms)
✔ Transpiled icons (224ms)
✔ Transpiled e2e-tests (2ms)
✔ Transpiled react-native-bridge (3ms)
✔ Transpiled router (8ms)
✔ Transpiled data (33ms)
✔ Transpiled data-controls (37ms)
✔ Transpiled keyboard-shortcuts (44ms)
✔ Transpiled notices (48ms)
✔ Transpiled viewport (48ms)
✔ Transpiled rich-text (66ms)
✔ Transpiled annotations (32ms)
✔ Transpiled blocks (57ms)
✔ Transpiled components (2375ms)
✔ Transpiled server-side-render (62ms)
✔ Transpiled plugins (81ms)
✔ Transpiled global-styles-engine (87ms)
✔ Transpiled admin-ui (156ms)
✔ Transpiled list-reusable-blocks (158ms)
✔ Transpiled nux (158ms)
✔ Transpiled preferences (160ms)
✔ Transpiled commands (164ms)
✔ Transpiled dataviews (217ms)
✔ Transpiled views (13ms)
✔ Transpiled upload-media (24ms)
✔ Transpiled interface (78ms)
✔ Transpiled block-editor (400ms)
✔ Transpiled core-data (54ms)
✔ Transpiled format-library (69ms)
✔ Transpiled media-utils (79ms)
✔ Transpiled core-commands (80ms)
✔ Transpiled reusable-blocks (129ms)
✔ Transpiled patterns (131ms)
✔ Transpiled widgets (145ms)
✔ Transpiled global-styles-ui (160ms)
✔ Transpiled fields (104ms)
✔ Transpiled block-library (1030ms)
✔ Transpiled customize-widgets (193ms)
✔ Transpiled edit-widgets (264ms)
✔ Transpiled editor (383ms)
✔ Transpiled boot (128ms)
✔ Transpiled block-directory (129ms)
✔ Transpiled edit-post (148ms)
✔ Transpiled edit-site (245ms)
✔ Transpiled react-native-editor (27ms)
📦 Phase 2: Bundling packages...
✔ Bundled private-apis (69ms)
✔ Bundled wordcount (103ms)
✔ Bundled escape-html (119ms)
✔ Bundled block-serialization-spec-parser (133ms)
✔ Bundled token-list (150ms)
✔ Bundled html-entities (153ms)
✔ Bundled autop (157ms)
✔ Bundled undo-manager (151ms)
✔ Bundled redux-routine (152ms)
✔ Bundled blob (157ms)
✔ Bundled warning (156ms)
✔ Bundled notices (160ms)
✔ Bundled keycodes (166ms)
✔ Bundled is-shallow-equal (167ms)
✔ Bundled hooks (170ms)
✔ Bundled theme (167ms)
✔ Bundled dom-ready (170ms)
✔ Bundled block-serialization-default-parser (193ms)
✔ Bundled interactivity-router (203ms)
✔ Bundled priority-queue (203ms)
✔ Bundled deprecated (230ms)
✔ Bundled latex-to-mathml (237ms)
✔ Bundled i18n (243ms)
✔ Bundled shortcode (242ms)
✔ Bundled url (246ms)
✔ Bundled keyboard-shortcuts (256ms)
✔ Bundled style-engine (254ms)
✔ Bundled data (258ms)
✔ Bundled interactivity (258ms)
✔ Bundled api-fetch (275ms)
✔ Bundled dom (274ms)
✔ Bundled preferences-persistence (294ms)
✔ Bundled annotations (300ms)
✔ Bundled a11y (324ms)
✔ Bundled element (339ms)
✔ Bundled date (339ms)
✔ Bundled primitives (350ms)
✔ Bundled react-i18n (350ms)
✔ Bundled viewport (349ms)
✔ Bundled data-controls (366ms)
✔ Bundled rich-text (385ms)
✔ Bundled compose (422ms)
✔ Bundled router (424ms)
✔ Bundled server-side-render (428ms)
✔ Bundled plugins (439ms)
✔ Bundled blocks (525ms)
✔ Bundled preferences (523ms)
✔ Bundled core-data (571ms)
✔ Bundled list-reusable-blocks (572ms)
✔ Bundled nux (581ms)
✔ Bundled core-commands (592ms)
✔ Bundled reusable-blocks (598ms)
✔ Bundled commands (605ms)
✔ Bundled patterns (612ms)
✔ Bundled widgets (674ms)
✔ Bundled components (724ms)
✔ Bundled format-library (753ms)
✔ Bundled boot (762ms)
✔ Bundled media-utils (784ms)
✔ Bundled block-directory (810ms)
✔ Bundled customize-widgets (857ms)
✔ Bundled block-editor (869ms)
✔ Bundled block-library (892ms)
✔ Bundled edit-widgets (894ms)
✔ Bundled edit-post (909ms)
✔ Bundled editor (926ms)
✔ Bundled edit-site (958ms)
🚦 Phase 3: Building routes...
✔ Built route home (11ms)
✔ Built route post-list (81ms)
📄 Generating PHP registration files...
✔ Generated build/modules.php
✔ Generated build/modules/index.php
✔ Generated build/scripts.php
✔ Generated build/scripts/index.php
✔ Generated build/styles.php
✔ Generated build/styles/index.php
✔ Generated build/version.php
✔ Generated build/routes.php
✔ Generated build/index.php
🎉 All packages built successfully! (7312ms total)
👀 Watching for changes...Un flujo de trabajo práctico de desarrollo
Aquí está el flujo de trabajo que he refinado a través de múltiples contribuciones:
Configura tu entorno de desarrollo
Ejecuta estos comandos uno tras otro en la terminal:
npm run wp-env startEste comando iniciará WordPress en Docker y dejará el entorno listo para pruebas y desarrollo. Cuando el entorno esté completamente levantado, ejecuta:
npm startAsí se iniciará el sistema de compilación de Gutenberg, que vigilará por cambios en tu código y lo recompilará automáticamente cuando guardes archivos.
Dónde hacer cambios
La mayoría de las contribuciones tocan estos directorios:
packages/block-library/src/– Bloques principales (Párrafo, Imagen, etc.)packages/components/src/– Componentes UI reutilizablespackages/block-editor/src/– Funcionalidad del editorpackages/edit-post/– Interfaz del editor de postspackages/edit-site/– Interfaz del editor del sitiodocs/– Documentación
El modo watch significa que puedes guardar → refrescar navegador → ver cambios inmediatamente.
Lista de verificación pre-commit
Antes de hacer commit, siempre ejecuta:
npm run format # Formatear código
npm run lint:js # Verificar problemas
npm run lint:css # Si cambiaste estilos
npm run test:unit # Ejecutar tests
npm run build # Test de producción finalEncontrando issues y trabajando en ellas
Elige tu primera issue
Las buenas primeras issues tienen estas etiquetas en el repositorio de Gutenberg:
Good First Issue– Específicamente marcadas para nuevos contribuidores[Type] Bug– Problema claro para resolver[Type] Documentation– Gran punto de partida[Type] Code Quality– A menudo directas y bien definidas
Tus primeros cambios
- Crea una rama:
git checkout -b fix/numero-issue-descripcion
# Ejemplo: git checkout -b fix/12345-alineacion-bloque-cover- Haz tus cambios y prueba en el navegador
- Verifica que todo funcione:
npm run format
npm run lint:js
npm run test:unit- Haz commit de tu trabajo:
git add .
git commit -m "Block Library: Fix Cover block alignment issue
Fixes #12345"- Push y crea PR:
git push origin fix/numero-issue-descripcionCreando tu pull request
Crea tu pull request teniendo en cuenta estos tips para que reciba atención más rápidamente:
- Hazla pequeña y específica – PRs de 50 líneas se revisan en horas; de 2000 líneas, en meses
- Título descriptivo – No escribas “Arreglo bug”, mejor: “Fix: Alineación del bloque Cover en móviles”
- Contexto claro – Explica el problema que resuelves y por qué tu solución es la mejor
Por ejemplo, una buena descripción de PR sería:
## What
Fixes alignment issue in Cover block when using full-width on mobile devices.
## Why
Fixes #12345 - Users reported content overflow on screens < 768px
## How
- Added responsive CSS for mobile breakpoints
- Updated block wrapper to handle viewport changes
## Testing Instructions
1. Add a Cover block with background image
2. Set to full-width alignment
3. Test on mobile viewport (< 768px)
4. Verify content stays within bounds
## Screenshots
[Before: content overflowing]
[After: proper alignment]
## Checklist
- [ ] My code follows WordPress standards
- [ ] I've tested on mobile and desktop
- [ ] Unit tests pass locallySi tu PR no recibe atención en 2-3 días:
- Comparte el link en el canal #core-editor de Slack durante el open floor
- Menciona a los maintainers del componente (búscalos en el archivo CODEOWNERS)
- Revisa PRs de otros – la reciprocidad funciona
- Consulta las reuniones del Core Editor para participar en las discusiones semanales
El proceso de revisión
El feedback es un regalo. Los revisores pueden pedir:
- Cambios de código – Implementa las sugerencias y haz push a tu branch
- Más tests – Añade pruebas unitarias o E2E si es necesario
- Aclaraciones – Responde preguntas y actualiza la descripción
- Rebase – Si hay conflictos, actualiza tu branch:
git fetch upstream
git rebase upstream/trunk
git push --force-with-lease origin tu-branchMantén la conversación activa respondiendo dentro de 24-48 horas. Si necesitas más tiempo, avisa en un comentario.
Solucionando problemas comunes
A continuación encontrarás soluciones rápidas para los problemas más típicos al trabajar con Gutenberg. Si te atascas, probablemente la respuesta esté aquí.
Conflictos de puerto
¿No inicia el entorno porque el puerto está en uso o ves errores extraños al arrancar WordPress? Esto suele ocurrir si wp-env quedó mal parado o hay restos de una sesión anterior. Elimina y reinicia el entorno para liberar los puertos:
npm run wp-env destroy
npm run wp-env startFallos de compilación
Si recibes errores misteriosos o la compilación no avanza, una limpieza total es la mejor forma de descartar problemas de caché o dependencias rotas. Utiliza estos comandos para restaurar un estado limpio:
npm run distclean
npm ci
npm run devErrores de TypeScript
¿Ves mensajes de error relacionados con los archivos de tipos (.d.ts) o verificaciones de TypeScript que fallan? Una limpieza de los tipos puede solucionar inconsistencias en la generación de archivos de tipo:
npm run clean:package-typesLos .d.ts se generan con TypeScript usando project references del monorepo y se escriben en packages/*/build-types/. npm run clean:package-types borra esas salidas (packages/*/build-types/. ), pero no las regenera.
Despues de limpiar los tipos los podemos regenerar de dos maneras:
- Opción con diagnóstico: valida versión de TS, verifica
.d.tsy genera un informe de trazas ents-traces/analysis.txt
npm run build:profile-types- Opción rápida (solo reconstruir tipos, sin trazas):
npx tsc --buildLos cambios no aparecen
¿Tus modificaciones no se ven reflejadas en el navegador? Sigue estos pasos para identificar el motivo más habitual:
- Verifica que no haya errores de compilación en la terminal donde corre el watcher.
- Haz un refresh forzado del navegador (Cmd+Shift+R en Mac / Ctrl+Shift+F5 en Windows).
- Confirma que realmente estás editando el archivo correcto.
Consejos para contributors
Aquí te dejo algunos consejos a la hora de contribuir aunque en general te recomendarias que ante cualquier duda, preguntes. Te vas a encontrar una comunidad abierta y encantada de ayudar a los contributors con sus dudas.
- El sistema de compilación es complejo pero lógico – Entender la estructura del monorepo hace que todo tenga más sentido.
- Empieza pequeño – Cualquier contribución por pequeña que sea es útil al proyecto y te ayuda a familiarizarte con el flujo de trabajo.
- Los tests son esenciales – Atrapan problemas que nunca pensarías verificar manualmente
- La comunidad es solidaria – No dudes en hacer preguntas en PRs o el canal #core-editor de Slack
- Lee revisiones de código – Aprendí más leyendo otros PRs que de la documentación
- Mantén tu fork sincronizado – Es importante mantener tu fork actualizado con los últimos cambios del repositorio principal para evitar conflictos más adelante. Hazlo regularmente con estos comandos:
git fetch upstream
git checkout trunk
git merge upstream/trunk
git push origin trunkRecursos y comunidad
Documentación esencial
- Repositorio de Gutenberg – El código fuente y el centro de desarrollo
- Manual del Editor de Bloques – Documentación completa del Block Editor
- Core Handbook – Guía completa para contribuir al core
- Guía de Inicio – Para comenzar con contribuciones de código
- Documentación de @wordpress/env – Detalles del entorno de desarrollo
- Documentación de @wordpress/scripts – Scripts de construcción y desarrollo
- Block Editor Handbook – Contributors Guide – Guía completa para contribuidores
Obteniendo ayuda
- Slack de WordPress → canal #core-editor
- Reuniones del Core Editor – Miércoles
- Make WordPress Core – Blog y anuncios del equipo Core
- Comentarios en issues y PRs de GitHub
Referencia rápida de comandos
Ten esto a mano:
# Configuración inicial
git clone [tu-fork]
npm ci
npm run wp-env start
# Desarrollo diario
npm run wp-env start # Iniciar WordPress
npm start # Iniciar compilación dev
# Antes de hacer commit
npm run format # Formatear código
npm run lint:js # Verificar errores
npm run test:unit # Ejecutar tests
# Creando PR
git add .
git commit -m "Mensaje claro de commit"
git push origin nombre-rama
# Solución de problemas
npm run wp-env destroy # Reiniciar entorno
npm run distclean # Limpiar todo
npm ci # Reinstalar dependenciasNotas finales
Contribuir a Gutenberg puede abrumar un poco al principio: el repositorio es enorme, el sistema de compilación complejo y los estándares altos. Pero una vez que entiendes el flujo de trabajo y las herramientas, se vuelve manejable e incluso fácil.
Los scripts npm son la columna vertebral de la experiencia de desarrollo. Entender qué hacen y cuándo usarlos transforma el proceso de contribución de misterioso a metódico.
Cada contribución importa. Esa corrección de typo hace la documentación más clara. Ese pequeño bug fix mejora la experiencia para millones. Esa nueva característica podría ser exactamente lo que alguien necesita.
La comunidad de Gutenberg es acogedora y aprecia cada contribución, sin importar cuán pequeña sea así que ¡anímate!. Tu primera PR es solo el comienzo de tu viaje como contribuidor de WordPress.

Leave a Reply