Incluir CKEditor 5 en proyecto React y Typescript con Vite

Para el ejemplo utilizaremos CKEditor 5 dentro de un proyecto de ReactJS + Typescript generado con ViteJS.

CKEditor es un editor de texto HTML/ WYSIWYG de código abierto que proporciona funciones de procesador de texto en páginas web.

Nuevo proyecto

Creamos nuevo proyecto con Vite utilizando el siguiente comando.

npm create vite

Framework y Template

Seleccionamos React y Typescript.

Instalación de dependencias

Entramos en el proyecto e instalamos paquete y sus dependencias iniciales.

cd nombre-proyecto
npm install

Instalamos CKEditor 5

Puedes instalar CKEditor 5 con NPM usando el siguiente comando en tu terminal:

npm install --save @ckeditor/ckeditor5-react @ckeditor/ckeditor5-build-classic

Este comando instalará la última versión de CKEditor 5 y una versión preconfigurada de Classic Editor.

Configurar CKEditor en aplicación de React

En el archivo de configuración de Vite, debemos importar y configurar CKEditor 5 para que se pueda usar en la aplicación de React. 

Modificamos el fichero de configuración de Vite  vite.config.ts

import { createRequire } from 'node:module';
const require = createRequire( import.meta.url );
import { defineConfig } from 'vite';
import ckeditor5 from '@ckeditor/vite-plugin-ckeditor5';
export default defineConfig( {
    plugins: [
        ckeditor5( { theme: require.resolve( '@ckeditor/ckeditor5-theme-lark' ) } )
    ]
} );

Importamos los módulos necesarios.

import React, { useState } from 'react';
import ClassicEditor from '@ckeditor/ckeditor5-build-classic';
import { CKEditor } from '@ckeditor/ckeditor5-react';

Incluimos el componente <CKEditor> en el proyecto.

function App() {
  const [editorData, setEditorData] = useState('');
  const handleEditorDataChange = (event: any, editor: any) => {
    const data = editor.getData();
    setEditorData(data);
  };
  return (
      <h2>Editor de texto</h2>
      <CKEditor
        editor={ClassicEditor}
        data={editorData}
        onChange={handleEditorDataChange}
      />
  );
}

En el código anterior, estamos importando los módulos necesarios de CKEditor y luego configurando el componente CKEditor en nuestra aplicación. El componente CKEditor necesita tres propiedades:

  • editor: Esta propiedad es la instancia del editor de CKEditor 5 que quieres utilizar. En nuestro caso, estamos utilizando ClassicEditor.
  • data: Esta propiedad es la información inicial del editor. En nuestro caso, estamos inicializando el editor con una cadena vacía.
  • onChange: Esta propiedad es una función que se ejecuta cada vez que cambia el contenido del editor. En nuestro caso, estamos actualizando el estado del editor con la nueva información.

Para el ejemplo también veremos cómo incluir algunos plugins en el editor por lo que necesitaremos algunas dependencias específicas.

npm i @ckeditor/ckeditor5-editor-classic
npm i @ckeditor/ckeditor5-basic-styles
npm i @ckeditor/ckeditor5-essentials
npm i @ckeditor/ckeditor5-paragraph
npm i @ckeditor/ckeditor5-block-quote
npm i @ckeditor/ckeditor5-link
npm i @ckeditor/ckeditor5-image
npm i @ckeditor/ckeditor5-link
npm i @ckeditor/ckeditor5-media-embed

Ejemplo

Código completo dentro de App.tsx

import React, { Component } from 'react';
import { CKEditor } from '@ckeditor/ckeditor5-react';
import ClassicEditor from '@ckeditor/ckeditor5-editor-classic/src/classiceditor';
import Bold from '@ckeditor/ckeditor5-basic-styles/src/bold';
import Italic from '@ckeditor/ckeditor5-basic-styles/src/italic';
import Essentials from '@ckeditor/ckeditor5-essentials/src/essentials';
import Paragraph from '@ckeditor/ckeditor5-paragraph/src/paragraph';
import BlockQuotePlugin from '@ckeditor/ckeditor5-block-quote/src/blockquote';
import LinkPlugin from '@ckeditor/ckeditor5-link/src/link';
import ImageInsert from '@ckeditor/ckeditor5-image/src/imageinsert';
import Image from '@ckeditor/ckeditor5-image/src/image';
import ImageToolbar from '@ckeditor/ckeditor5-image/src/imagetoolbar';
import ImageCaption from '@ckeditor/ckeditor5-image/src/imagecaption';
import ImageStyle from '@ckeditor/ckeditor5-image/src/imagestyle';
import ImageResize from '@ckeditor/ckeditor5-image/src/imageresize';
import LinkImage from '@ckeditor/ckeditor5-link/src/linkimage';
import MediaEmbed from '@ckeditor/ckeditor5-media-embed/src/mediaembed';
class App extends Component {
    render() {
        return (
                 {
                        console.log( 'Editor1 is ready to use!', editor );
                    } }
                    onChange={ ( event, editor ) => {
                        const data = editor.getData();
                        console.log( { event, editor, data } );
                    } }
                />
        );
    }
}
export default App;

CKEditorError

Es posible que en este punto la consola devuelva el siguiente error: 

ckeditor.js:5 Uncaught CKEditorError: ckeditor-duplicated-modules: Some CKEditor 5 modules are duplicated. Read more: https://ckeditor.com/docs/ckeditor5/latest/framework/guides/support/error-codes.html#error-ckeditor-duplicated-modules ...

Para solucionarlo creamos un nuevo fichero con nombre vite-env.d.ts dentro del directorio src.

declare module '@ckeditor/ckeditor5-react';
declare module '@ckeditor/ckeditor5-build-classic';
declare module '@ckeditor/*' {
    const classes: any;
    export default classes;
  }

Para finalizar, ejecutamos la aplicación de React con el comando de Vite.

npm run dev

Resultado

Cómo crear un frontend moderno con Vanilla JS, Sass y Vite (Guía paso a paso)

¿Sabes ese momento en el que tienes una idea y solo quieres empezar a construirla ya?

Bueno, a mí me pasó hace poco. Tenía un rato libre, una idea clara y ganas de probar algo visual.

Pensé: “Va, algo sencillo con Vanilla JS y Sass”.

Lo típico… abrí el editor, instalé dependencias, empecé a configurar cosas… y a la media hora ya estaba buscando errores en la consola en vez de escribir código. Ahí fue cuando paré y pensé: esto tiene que ser más fácil.

Me acordé de Vite —lo había usado una vez, de pasada— y decidí intentarlo. Literal: npm create vite, plantilla vanilla, y en menos de cinco minutos ya tenía todo corriendo. Le sumé Sass y… por fin pude dedicarme a crear en vez de pelearme con la configuración.

Y como sé que no soy la única a la que le pasa esto, armé esta guía paso a paso para que montes tu propio entorno moderno, limpio y funcional con Vanilla JS, Sass y Vite.

¿Por qué Vite?

Vite usa módulos ES nativos, recarga instantánea y una configuración mínima. Si trabajas con JS puro, Vite te da lo justo y necesario para ir al grano, sin sacrificar rendimiento.

Paso a paso para crear tu proyecto

Creamos nuevo proyecto utilizando el siguiente comando.

npm create vite

Selecciona la plantilla vanilla.

Entra en el proyecto e instala paquete y sus dependencias.


cd nombre-proyecto
npm install

Cómo integrar Sass sin complicarte

Para trabajar con sass es necesario instalar un módulo extra.

npm add -D sass

Si abrimos el fichero  package.json podremos comprobar que ya tenemos instalada nuestra nueva dependencia.

Cambia style.css por style.scss y comienza a usar variables, mixins, y funciones:

$color-principal: #1e88e5;
h1 {
  color: $color-principal;
}

Organiza tus estilos en /base, /components, /layouts para mantener claridad.

Ejecuta y disfruta

npm run dev

El navegador se abrirá solo, con recarga en caliente y un entorno listo para trabajar.


Esta combinación de herramientas puede parecer simple, pero bien usada es una base sólida y profesional para crear sitios modernos, rápidos y mantenibles. Porque a veces, menos sí es más.

🚀 En resumen: cómo crear un frontend moderno con Vite

🛠️ Qué aprenderás: Esta guía paso a paso te enseñará a construir un frontend moderno con Vite usando tecnologías simples como Vanilla JS y Sass.

🔗 Herramientas principales:

💡 ¿Por qué elegir Vite? Porque es rápido, sencillo y perfecto para prototipos o proyectos minimalistas.

📚 Si te interesa mejorar tu flujo de trabajo, te recomiendo este artículo sobre
atajos para Visual Studio Code.

Convertir página web a diseño con Figma

Figma es una herramienta de trabajo colaborativo que sirve para diseñar interfaces de usuario.

La aplicación ofrece la posibilidad de instalar extensiones para agilizar algunas tareas.

Mediante el uso del plugin html.to.design podemos convertir de forma automática una página web a un archivo de diseño de Figma.

¿Cómo utilizar la extensión html to design de Figma?

Archivo de diseño

Creamos un nuevo archivo de diseño de Figma haciendo clic sobre el botón que muestra la siguiente captura.

Panel de Recursos

Desde la barra de herramientas superior hacemos clic sobre la séptima opción que corresponde al icono de Recursos y mediante el cual desplegaremos un submenú desde el que podremos acceder a la búsqueda de plugins.

En éste caso si escribimos en el cuadro de búsqueda html se nos irán listando las diferentes opciones que correspondan al criterio de búsqueda.

Hacemos clic en Run de la extensión a ejecutar.

Importar Sitio Web

El plugin nos ofrece varias opciones de importación pero partiendo del supuesto de que muchas veces no contamos más que con la dirección pública del sitio recurriremos a esta opción.

Introducimos la dirección del sitio web y hacemos clic en Importar.

Diseño Figma Importado

La fidelidad del resultado dependerá de la cantidad de elementos bloqueantes que existan en la página aunque incluso siendo así ahorraremos tiempo de trabajo.