- Pierwszy skrypt składa się z trzech kroków: rejestracja, przechwycenie zdarzenia, zapisanie go w folderze skryptów.
- Host pakuje GraalVM, więc piszesz prawdziwy JavaScript i nigdy go nie instalujesz samodzielnie.
- Skrypty przeładowują się w kilka sekund bez konieczności ponownej kompilacji Javy.
- Skrypt może wywoływać tylko obiekty, które host udostępnia poprzez listę dozwolonych dostępu do hosta.
Pisanie pierwszego skryptu JavaScript dla GraalVM wymaga trzech małych kroków: zarejestrowanie skryptu w punkcie wejścia hosta, dołączenie go do zdarzenia lub modułu oraz zapisanie go w folderze skryptów, aby silnik mógł go załadować. Silnik działa na wielojęzykowym API GraalVM, dzięki czemu skrypt jest prawdziwym JavaScriptem i przeładowuje się bez rekompilacji żadnej Javy.
Gdzie pasuje Opal
Opal to mod dla Fabric, wykorzystujący silnik skryptów JavaScript GraalVM, więc te kroki mają zastosowanie bezpośrednio. Aby zacząć, zapoznaj się z dokumentacją skryptów.
Co potrzebujesz na początek
Program hostujący, który osadza silnik. Host zawiera GraalVM JavaScript, udostępnia zestaw obiektów, które skrypty mogą wywoływać, oraz monitoruje folder skryptów. Nie instalujesz GraalVM samodzielnie; host go dołącza. Piszesz zwykły JavaScript w oparciu o obiekty, które host udostępnia.
Znajomość tego, do czego te obiekty odpowiadają, pomaga, ale nie musisz pisać żadnych fragmentów kodu Java, aby zacząć.
Trzy kroki
Znajdź folder skryptów
Utwórz plik skryptu
Utwórz nowy plik .js (lub .mjs) w tym folderze. Host automatycznie go wykryje przy następnym ładowaniu skryptów.
Zarejestruj i połącz
Wewnątrz pliku zarejestruj skrypt z punktem wejścia hosta, a następnie przypisz zachowanie do zdarzenia lub zdefiniuj moduł.
Przykład minimalny
Większość hostów udostępnia skryptowi pojedynczy punkt wejścia do rejestracji oraz kilka obiektów proxy, które łączą JavaScript z programem. Dokładne nazwy zależą od hosta, ale struktura jest taka sama. Pierwszy skrypt zazwyczaj tylko ogłasza swoją obecność i reaguje na jedno zdarzenie:
// Register the script with the host (names vary by host).
script.register({
name: "hello-world",
version: "1.0.0",
});
// React to an event the host exposes.
script.on("enable", () => {
client.print("Hello from my first script.");
});Zapoznaj się z własną dokumentacją API hosta, aby poznać rzeczywiste nazwy obiektów i metod. Sedno sprawy to wzorzec: rejestracja, a następnie podłączenie zdarzenia lub zdefiniowanie modułu
Ładowanie na bieżąco podczas pracy
Zapisz plik i przeładuj skrypty (lub uruchom ponownie hosta, jeśli nie obsługuje live reload). Zmiana wchodzi w życie bez potrzeby przebudowy. Ten szybki cykl jest głównym powodem, dla którego warto skryptować zamiast kompilować moda: skrypt przeładowuje się w kilka sekund, podczas gdy moda skompilowaną trzeba przebudować i ponownie uruchomić.
| Podejście | Cykl iteracji | Język | Kiedy się sprawdza |
|---|---|---|---|
| Skrypt JavaScript GraalVM | Edycja, zapis, przeładowanie | JavaScript | Szybkie poprawki, niestandardowe zachowanie |
| Skompilowany mod | Przebudowa, ponowne uruchomienie | Java lub Kotlin | Większe funkcje, głębsze integracje |
Co mogą, a czego nie mogą robić skrypty
Skrypt może wywoływać obiekty udostępniane przez hosta i nic więcej. Hosta deklaruje, które klasy i metody skrypty mogą wywoływać, za pomocą białej listy dostępu do hosta w GraalVM Polyglot, a domyślnie jest to odmowa. To zapewnia bezpieczeństwo i przewidywalność skryptów. Jeśli żądany obiekt nie jest udostępniony, host musi go dodać; nie można obejść białej listy z poziomu skryptu.
FAQ
Nie. Program hosta dołącza GraalVM i jego silnik JavaScript. Napisz tylko plik JavaScript i umieść go w folderze skryptów.
Tak. Silnik obsługuje najnowsze funkcje ECMAScript, w tym moduły z import i export, więc nie jesteś ograniczony do starego podzbioru.
Sprawdź, czy plik znajduje się w folderze skryptów hosta, ma oczekiwaną przez niego rozszerzenie i jest zarejestrowany w punkcie wejścia hosta. Błąd w wywołaniu funkcji rejestracji jest najczęstszą przyczyną.
Nie. Silnik jest osadzony wewnątrz hostującego JVM, więc Twój skrypt komunikuje się z programem hostującym, a nie z niezależnym środowiskiem uruchomieniowym Node.js.