openpencil/packages/docs/pl/programmable/cli/scripting.md
mrhard9090 2c9bb8fcd7
feat(figma-api): add detachInstance() to instances (#778)
instance.detachInstance() turns an instance into a frame that keeps its content, as in Figma, from scripts run through eval. It reuses the graph's shared detach implementation, asserts editability like the proxy's other mutations, and joins the instance surface check against @figma/plugin-typings.
2026-09-30 05:19:11 +04:00

3.6 KiB

title description
Skrypty Wykonywanie JavaScript przez API zgodne z Figma Plugin API do wyszukiwania, masowych zmian i tworzenia projektu.

Skrypty

openpencil eval wykonuje JavaScript dla dokumentu OpenPencil i udostępnia globalny obiekt figma zgodny z Figma Plugin API. Polecenie nadaje się do zmian zbiorczych, sprawdzania dokumentów, przygotowywania danych testowych i automatyzacji bez interfejsu edytora.

Pierwsze wywołanie

openpencil eval design.fig -c "return figma.currentPage.children.length"

Opcja -c przyjmuje JavaScript. Jeśli kod nie zaczyna się od return, OpenPencil umieszcza go w funkcji asynchronicznej i zwraca jej wynik, jeśli istnieje.

Wyszukiwanie obiektów

openpencil eval design.fig -c "
  return figma.currentPage
    .findAll((node) => node.type === 'FRAME' && node.name.includes('Button'))
    .map((button) => ({ id: button.id, name: button.name }))
"

Zmiana i zapis

--write albo -w zapisuje zmiany w pliku wejściowym. --output albo -o tworzy nowy plik.

Skrypt ze standardowego wejścia

cat transform.js | openpencil eval design.fig --stdin --write

Otwarta aplikacja

Nie podawaj pliku, aby wykonać skrypt dla bieżącego dokumentu w aplikacji komputerowej.

Wyjście

Po przekierowaniu wyjścia domyślnie używany jest JSON. Opcja --json włącza go jawnie, a --quiet wyłącza wyjście.

Dostępne API

API jest celowo zbliżone do Figma Plugin API, ale pracuje z SceneGraph i formatami plików OpenPencil.

Dokument i strony

  • figma.root
  • figma.currentPage
  • figma.currentPage.selection
  • figma.getNodeById(id)
  • figma.createPage()

Tworzenie obiektów

  • figma.createFrame()
  • figma.createRectangle()
  • figma.createEllipse()
  • figma.createText()
  • figma.createLine()
  • figma.createPolygon()
  • figma.createStar()
  • figma.createVector()
  • figma.createComponent()
  • figma.createSection()

Drzewo

  • node.children
  • node.parent
  • node.appendChild(child)
  • node.insertChild(index, child)
  • node.clone()
  • node.remove()
  • node.findAll(callback?)
  • node.findOne(callback)
  • figma.group(nodes, parent)
  • figma.ungroup(node)

Komponenty i zmienne

Nazwy metod, takie jak component.createInstance(), figma.getLocalVariables() i figma.bindVariable(), pozostają zgodne z Figma Plugin API.

Właściwości

Najczęściej używane właściwości można odczytywać i zapisywać przez pośrednika:

  • geometria: x, y, width, height, rotation, resize(width, height);
  • wygląd: fills, strokes, effects, opacity, visible, locked, blendMode, clipsContent;
  • tekst: characters, fontSize, fontName, fontWeight, wyrównanie, interlinia, odstęp między znakami i funkcje zakresów stylów;
  • automatyczny układ: layoutMode, primaryAxisAlignItems, counterAxisAlignItems, itemSpacing, wypełnienie, rozmiary i położenie;
  • obwiednia: strokeWeight, strokeAlign, dashPattern.

Narzędzia pomocnicze

  • figma.mixed
  • figma.createImage(data)
  • figma.loadFontAsync(fontName) niczego nie wykonuje, ponieważ OpenPencil nie blokuje zmiany tekstu do czasu załadowania czcionki przez wtyczkę
  • figma.listAvailableFontsAsync() zwraca dostępne czcionki systemowe
  • figma.notify(message) zapisuje ostrzeżenie w trybie bez interfejsu
  • figma.viewport

Brak pełnej zgodności z Figmą

Nie są jeszcze dostępne między innymi node.exportAsync(), node.setBoundVariable(), figma.combineAsVariants() i API stylów Figmy.

Zamiast nich używaj poleceń eksportu CLI, narzędzi głównego pakietu albo bezpośrednich funkcji pomocniczych SceneGraph.