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.
61 lines
2.2 KiB
Markdown
61 lines
2.2 KiB
Markdown
---
|
||
title: Scripting
|
||
description: Exécuter JavaScript avec une API compatible avec les plugins Figma pour interroger, modifier et générer des designs.
|
||
---
|
||
|
||
# Scripting
|
||
|
||
`openpencil eval` exécute JavaScript sur un document et fournit un objet global `figma`. Cette commande convient aux modifications par lots, à l’inspection, aux données de test et à l’automatisation sans ouvrir l’interface de l’éditeur.
|
||
|
||
## Utilisation de base
|
||
|
||
```sh
|
||
openpencil eval design.fig -c "return figma.currentPage.children.length"
|
||
```
|
||
|
||
`-c` accepte JavaScript. Si le code ne commence pas par `return`, OpenPencil l’exécute dans une fonction asynchrone et renvoie le résultat éventuel.
|
||
|
||
## Interroger des objets
|
||
|
||
```sh
|
||
openpencil eval design.fig -c "
|
||
return figma.currentPage
|
||
.findAll((node) => node.type === 'FRAME')
|
||
.map((node) => ({ id: node.id, name: node.name }))
|
||
"
|
||
```
|
||
|
||
## Modifier et enregistrer
|
||
|
||
`--write` ou `-w` remplace le fichier d’entrée. `--output` ou `-o` crée un autre fichier.
|
||
|
||
```sh
|
||
openpencil eval design.fig -c "figma.currentPage.name = 'Updated'" -o updated.fig
|
||
```
|
||
|
||
## Lire le script depuis stdin
|
||
|
||
```sh
|
||
cat transform.js | openpencil eval design.fig --stdin --write
|
||
```
|
||
|
||
## Document ouvert
|
||
|
||
Omettez le chemin pour exécuter le script sur le document actif dans l’application de bureau.
|
||
|
||
## Sortie
|
||
|
||
Dans un environnement non interactif, `eval` utilise JSON par défaut. `--json` l’impose explicitement et `--quiet` ou `-q` masque la sortie lorsqu’un fichier seul est écrit.
|
||
|
||
## API compatible
|
||
|
||
L’API suit le modèle de Figma Plugin API, mais agit sur SceneGraph et les formats OpenPencil. Elle couvre document, pages, création d’objets, opérations d’arbre, composants, variables et propriétés courantes.
|
||
|
||
Les identifiants exacts comme `figma.currentPage`, `createFrame`, `appendChild`, `fills`, `fontSize`, `layoutMode` et `strokeWeight` restent inchangés.
|
||
|
||
## Limites
|
||
|
||
Il n’existe pas encore d’équivalent complet pour `node.exportAsync()`, `node.setBoundVariable()`, `figma.combineAsVariants()`, les styles de peinture/texte et toutes les opérations booléennes vectorielles.
|
||
|
||
Selon le besoin, utilisez aussi la commande d’exportation, les outils du noyau ou les opérations directes de SceneGraph.
|