Bundler frontend 26.01
El bundler frontend permite que una clase de webforJ utilice el ecosistema de npm, escriba componentes en React, Svelte o Lit, y autorice SCSS, todo desde un proyecto Java sin necesidad de instalar o ejecutar una herramienta de Node. Una clase nombra el frontend que necesita con una anotación, y la construcción instala los paquetes, compila las fuentes y carga el resultado cuando se crea un componente de esa clase.
El bundler se ejecuta como parte del plugin de construcción webforJ, que agregas una vez a tu construcción de Maven o Gradle. La mecánica de compilar un tipo específico de fuente, SCSS, Less, Tailwind, y el resto, son tarea de extensiones.
Cuándo necesitas el bundler
webforJ funciona sin un bundler. Si ya tienes un script o una hoja de estilos y quieres adjuntarlo a un componente o a la aplicación, las anotaciones de activos lo hacen sin ningún paso de construcción, sin npm y sin compilación.
El bundler se justifica cuando el frontend es más que un archivo estático:
- Quieres un paquete de npm, por nombre y versión, instalado y compilado en tu aplicación.
- Quieres escribir un componente en React, Svelte o Lit y consumirlo desde Java.
- Quieres autorizar SCSS, Sass o Less, o compilar utilidades de Tailwind.
- Quieres ejecutar pruebas frontend como parte de la construcción.
El bundler es el camino predeterminado para ese trabajo, y hace todo lo que hacen las anotaciones de activos, por lo que un proyecto que lo adopte no pierde la opción más simple.
Agregándolo a un proyecto existente
El bundler es optativo, por lo que puedes agregarlo a una aplicación que ya utiliza las anotaciones de activos y usarlo solo donde lo necesites.
- Agrega el plugin de construcción webforJ a tu construcción de Maven o Gradle. Se encarga de Bun por ti, así que no hay necesidad de instalar una herramienta de Node.
- Autoriza tus fuentes frontend bajo
src/main/frontend. - Declara lo que una clase necesita con
@BundlePackagey@BundleEntry.
Tus anotaciones de activos existentes @StyleSheet, @JavaScript y las demás seguirán funcionando sin cambios, por lo que puedes mover un recurso al bundler cuando necesites un paquete, una fuente compilada o una prueba, y dejar el resto sin cambios.
Vinculando una clase a una entrada
@BundleEntry vincula una clase a una entrada de frontend, y @BundlePackage declara los paquetes de npm que esa entrada importa. Ambas anotaciones viven en la clase, por lo que el frontend que necesita una vista viaja con la vista.
@Route("/greeting")
@BundlePackage(value = "lit", version = "^2.0.0")
@BundleEntry("greeting/hello-greeting.ts")
public class GreetingView extends Composite<FlexLayout> {
private final FlexLayout self = getBoundComponent();
public GreetingView() {
self.add(new Element("hello-greeting"));
}
}
import { LitElement, html } from 'lit';
import { customElement } from 'lit/decorators.js';
@customElement("hello-greeting")
class HelloGreeting extends LitElement {
render() {
return html`<p>Saludos de webforJ</p>`;
}
}
La entrada registra el elemento personalizado hello-greeting y se encarga de su renderizado. El lado de Java lo consume con new Element("hello-greeting") y escucha sus eventos. La construcción compila la entrada, instala lit, y carga la salida cuando se renderiza /greeting.
Temas
Packages and assets
Declare npm packages, load a module straight from one, install build-only dependencies, rely on tree shaking, and import CSS and assets from a component's entry.
Build and tests
What the bundler does across the build, the development watch, running frontend tests, tuning a compiler, and producing a minified production bundle.
Extensions
4 artículos