52 lines
1.3 KiB
Markdown
52 lines
1.3 KiB
Markdown
# `@lexical/headless`
|
|
|
|
This package allows you to interact with Lexical in a headless environment (one that does not rely on DOM, e.g. for Node.js environment), and use its
|
|
main features like editor.update(), editor.registerNodeTransform(), editor.registerUpdateListener()
|
|
to create, update or traverse state.
|
|
|
|
Install `@lexical/headless`:
|
|
|
|
```
|
|
npm install --save @lexical/headless
|
|
```
|
|
|
|
```js
|
|
const { createHeadlessEditor } = require('@lexical/headless');
|
|
|
|
const editor = createHeadlessEditor({
|
|
nodes: [],
|
|
onError: () => {},
|
|
});
|
|
|
|
editor.update(() => {
|
|
$getRoot().append(
|
|
$createParagraphNode().append(
|
|
$createTextNode('Hello world')
|
|
)
|
|
)
|
|
});
|
|
```
|
|
|
|
Any plugins that do not rely on DOM could also be used. Here's an example of how
|
|
you can convert lexical editor state to markdown on server:
|
|
```js
|
|
const { createHeadlessEditor } = require('@lexical/headless');
|
|
const { $convertToMarkdownString, TRANSFORMERS } = require('@lexical/markdown');
|
|
|
|
app.get('article/:id/markdown', await (req, res) => {
|
|
const editor = createHeadlessEditor({
|
|
nodes: [],
|
|
onError: () => {},
|
|
});
|
|
|
|
const articleEditorStateJSON = await loadArticleBody(req.query.id);
|
|
editor.setEditorState(editor.parseEditorState(articleEditorStateJSON));
|
|
|
|
editor.update(() => {
|
|
const markdown = $convertToMarkdownString(TRANSFORMERS);
|
|
res.send(markdown);
|
|
});
|
|
});
|
|
|
|
```
|