Siirry pääsisältöön

Minifikaajaliitin 25.11

Avaa ChatGPT:ssä

webforJ Minifikaajaliitin automaattisesti minifioi ja optimoi CSS- ja JavaScript-resursseja rakennusprosessin aikana. Liitin löytää webforJ resurssimerkinnöistä viitattuja lähteitä ja minifioi ne rakennustulokseen, pienentäen tiedostokokoja ja parantaen latausaikoja muuttamatta alkuperäisiä lähdetiedostojasi.

Asennus

Jos loit projektisi käyttäen startforJ tai webforJ archetypea, minifikaajaliitin on jo konfiguroitu ja se toimii automaattisesti, kun rakennat prod-profiililla käyttäen mvn package -Pprod.

Manuaalista asentamista varten minifikaaja vaatii kaksi konfiguraatiota: merkintäprosessorin löytämään lähteet rakentamisen aikana ja liittimen suorittamaan minifiointi.

Lisää seuraava pom.xml-tiedostoon:

<build>
<plugins>
<!-- Merkintäprosessorin konfiguraatio -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<annotationProcessorPaths>
<path>
<groupId>com.webforj</groupId>
<artifactId>webforj-minify-foundation</artifactId>
<version>${webforj.version}</version>
</path>
</annotationProcessorPaths>
</configuration>
</plugin>

<!-- Minifikaajaliittimen konfiguraatio -->
<plugin>
<groupId>com.webforj</groupId>
<artifactId>webforj-minify-maven-plugin</artifactId>
<version>${webforj.version}</version>
<executions>
<execution>
<goals>
<goal>minify</goal>
</goals>
</execution>
</executions>
<dependencies>
<!-- CSS-minifiointi -->
<dependency>
<groupId>com.webforj</groupId>
<artifactId>webforj-minify-phcss-css</artifactId>
<version>${webforj.version}</version>
</dependency>
<!-- JavaScript-minifiointi -->
<dependency>
<groupId>com.webforj</groupId>
<artifactId>webforj-minify-closure-js</artifactId>
<version>${webforj.version}</version>
</dependency>
</dependencies>
</plugin>
</plugins>
</build>

Liittimen käyttäminen

Kun liitin on konfiguroitu, se toimii automaattisesti. Käytä vain webforJ-resurssimerkintöjä koodissasi:

package com.example;

import com.webforj.annotation.StyleSheet;
import com.webforj.annotation.JavaScript;

@StyleSheet("ws://css/app.css")
@JavaScript("ws://js/app.js")
public class MyApp extends App {
// Sovelluskoodisi
}

Kun rakennat projektisi, liitin automaattisesti:

  1. Löytää merkintöihin viitattuja resursseja rakentamisen aikana
  2. Minifioi löydetyt CSS- ja JavaScript-tiedostot
  3. Ilmoittaa koon vähenemisestä ja käsittelyajasta

URL-protokollan ratkaisu

Liitin ymmärtää webforJ URL-protokollia ja ratkaisee ne tiedostojärjestelmän poluiksi:

ProtokollaRatkaiseeEsimerkki
ws://src/main/resources/static/ws://css/app.cssstatic/css/app.css
context://src/main/resources/context://styles/app.cssstyles/app.css

URL-osoitteet ilman protokollaa eivät ole tuettuja minifikaajassa ja ne ohitetaan.

Sisäänrakennetut minifikaajat

webforJ sisältää kaksi tuotantovalmiita minifikaajaa CSS:lle ja JavaScriptille.

MinifikaajaOminaisuudetOhittaa
CSSPoistaa valkoiset tilat, kommentit ja optimoi ominaisuuksien arvot.min.css
JavaScriptMuuttujan nimeäminen, kuollut koodi poistaminen, syntaksin optimointi.min.js, .min.mjs

Konfigurointivaihtoehdot

Liitin tarjoaa vaihtoehtoja minifikaation poistamiseksi, JavaScript-optimoinnin mukauttamiseksi ja lisätiedostojen käsittelemiseksi.

Minifikaation poistaminen

Saatat haluta poistaa minifikaation käytöstä kehitysvaiheessa tai virheiden korjausta varten.

Komentoriviltä:

mvn package -Dwebforj.minify.skip=true

Liittimen konfiguraation kautta:

<plugin>
<groupId>com.webforj</groupId>
<artifactId>webforj-minify-maven-plugin</artifactId>
<configuration>
<skip>true</skip>
</configuration>
</plugin>

JavaScript-minifikaajan vaihtoehdot

JavaScript-minifikaaja tarjoaa useita konfiguraatioita optimointikäyttäytymisen hallitsemiseksi.

Vain Maven

JavaScript-minifikaajan vaihtoehdot ovat tällä hetkellä saatavilla vain Mavenille. Gradle-tuki käyttää oletusasetuksia.

VaihtoehtoOletusarvoKuvaus
compilationLevelSIMPLE_OPTIMIZATIONS
  • WHITESPACE_ONLY - poistaa vain valkoiset tilat ja kommentit
  • SIMPLE_OPTIMIZATIONS - muuttujan nimeäminen ja kuollut koodi poistetaan
  • ADVANCED_OPTIMIZATIONS - aggressiivinen optimointi funktio-/ominaisuuden nimeämisellä
languageInECMASCRIPT_NEXTSyöte-JavaScript-versio: ECMASCRIPT3, ECMASCRIPT5, ECMASCRIPT_2015 - ECMASCRIPT_2021, ECMASCRIPT_NEXT
languageOutECMASCRIPT5Lähtö-JavaScript-versio: sama kuin languageIn, lisättynä NO_TRANSPILE
prettyPrintfalseAseta true, jotta muotoilu säilyy virheiden korjausta varten

Määritä nämä vaihtoehdot minifierConfigurations-osiossa:

<plugin>
<groupId>com.webforj</groupId>
<artifactId>webforj-minify-maven-plugin</artifactId>
<version>${webforj.version}</version>
<configuration>
<minifierConfigurations>
<closureJs>
<compilationLevel>SIMPLE_OPTIMIZATIONS</compilationLevel>
<languageIn>ECMASCRIPT_2020</languageIn>
<languageOut>ECMASCRIPT5</languageOut>
<prettyPrint>false</prettyPrint>
</closureJs>
</minifierConfigurations>
</configuration>
<executions>
<execution>
<goals>
<goal>minify</goal>
</goals>
</execution>
</executions>
<dependencies>
<dependency>
<groupId>com.webforj</groupId>
<artifactId>webforj-minify-closure-js</artifactId>
<version>${webforj.version}</version>
</dependency>
</dependencies>
</plugin>

Lisätiedostojen minifiointi

Jos haluat minifioida tiedostoja, joita ei löydy merkinnöistä, luo konfigurointitiedosto, joka määrittelee glob-mallit:

src/main/resources/META-INF/webforj-minify.txt
# Sisällyttämismallit
**/*.css
**/*.js

# Poissulkemismallit (alkaa !)
!**/*.min.css
!**/*.min.js

Mukautetut minifikaajat

Liitin tukee mukautettuja minifikaajia Java'n palveluntarjoajaliittymän (SPI) kautta, jolloin voit lisätä tukea lisätiedostotyypeille tai vaihtoehtoisille minifiointikirjastoille.

Mukautetun minifikaajan luominen

Toteuta AssetMinifier-rajapinta luodaksesi oman minifikaajan. Seuraava esimerkki näyttää JSON-minifikaajan, joka käyttää Gsonia valkoisten tilojen poistamiseen:

src/main/java/com/example/minifier/JsonMinifier.java
package com.example.minifier;

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.JsonElement;
import com.google.gson.JsonSyntaxException;
import com.webforj.minify.common.AssetMinifier;
import com.webforj.minify.common.MinificationException;
import java.nio.file.Path;
import java.util.Map;
import java.util.Set;
import java.util.logging.Logger;

public class JsonMinifier implements AssetMinifier {

private static final Logger logger = Logger.getLogger(JsonMinifier.class.getName());
private final Gson gson = new GsonBuilder().create();

@Override
public String minify(String content, Path sourceFile) throws MinificationException {
try {
JsonElement element = gson.fromJson(content, JsonElement.class);
return gson.toJson(element);
} catch (JsonSyntaxException e) {
logger.warning("Väärä muotoiltu JSON tiedostossa " + sourceFile + ", ohitetaan: " + e.getMessage());
return content;
} catch (Exception e) {
throw new MinificationException("JSON-tiedoston minifiointi epäonnistui: " + sourceFile, e);
}
}

@Override
public Set<String> getSupportedExtensions() {
return Set.of("json");
}

@Override
public boolean shouldMinify(Path filePath) {
String filename = filePath.getFileName().toString();
// Ohita konfiguraatiotiedostot ja jo minifioidut tiedostot
if (filename.equals("package.json") || filename.equals("tsconfig.json")) {
return false;
}
if (filename.endsWith("-lock.json") || filename.endsWith(".min.json")) {
return false;
}
return true;
}

@Override
public void configure(Map<String, Object> options) {
// Konfiguraatioasetukset, jos tarpeen
}
}

Minifikaajasi rekisteröinti

Luo palveluntarjoajakonfiguraatiotiedosto:

src/main/resources/META-INF/services/com.webforj.minify.common.AssetMinifier
com.example.minifier.JsonMinifier

Mukautetun minifikaajan käyttäminen

Pakkaa minifikaajasi erilliseen JAR-tiedostoon ja lisää se liittimen riippuvuudeksi:

<plugin>
<groupId>com.webforj</groupId>
<artifactId>webforj-minify-maven-plugin</artifactId>
<dependencies>
<dependency>
<groupId>com.example</groupId>
<artifactId>json-minifier</artifactId>
<version>1.0.0</version>
</dependency>
<!-- Vakiominifikaajat (valinnainen) -->
<dependency>
<groupId>com.webforj</groupId>
<artifactId>webforj-minify-phcss-css</artifactId>
<version>${webforj.version}</version>
</dependency>
</dependencies>
</plugin>

Yhteiset ongelmat

[WARN] Ei rekisteröityjä minifikaajia SPI:llä. Minifiointi ohitetaan.
[WARN] Varmista, että ph-css ja/tai closure-compiler ovat luettelossa.

Lisää minifikaajamoduuli riippuvuudet liittimen konfiguraatioon. CSS:lle lisää webforj-minify-phcss-css. JavaScriptille lisää webforj-minify-closure-js.

Jos liitin ilmoittaa Käsitelty 0 tiedostoa, varmista, että:

  1. Merkintäprosessorin konfigurointi on määritetty maven-compiler-plugin-tiedostoon, jossa webforj-minify-foundation on annotationProcessorPaths-osiossa
  2. webforJ-resurssimerkinnät ovat olemassa lähdekoodissasi
  3. target/classes/META-INF/webforj-resources.json on olemassa kääntämisen jälkeen
[WARN] Tiedostoa ei löydy: /path/to/static/css/app.css (viitattiin 'ws://css/app.css')

Varmista, että tiedosto on olemassa oikeassa polussa src/main/resources/static ja että URL-protokolla vastaa hakemistorakennetta.

[WARN] Virhe minifioinnissa tiedostossa /path/to/app.css: jäsentelyvirhe rivillä 42

Liitin varoittaa, mutta jatkaa ilman, että rakennus epäonnistuu. Alkuperäinen sisältö säilyy, kun minifiointi epäonnistuu. Korjaa syntaksivirheet validoimalla CSS tai JavaScript linterillä.