创建多个Gutenberg块时的文件结构和反应设置

时间:2019-09-04 作者:Mads Hansen

在古腾堡创建多个块时,我很难理解构建/编译设置和文件结构。

React和Gutenberg对我来说都是新手。但我已经有了一个关于React via Stephen Griders的相当好的入门课程。

我很清楚,当我需要实现render_callback 动态块的函数。

到目前为止,我一直在使用下面列出的文件结构,其中所有块都注册到一个register_block_type 呼叫(这是我在React中通常会做的。)

- Plugin/
-- plugin-init.php
-- package.json
-- package-lock.json
-- node_modules/
-- build/
--- index.js
--- index.js.map
-- src/
--- index.js
--- blocks/
---- custom-outer-block.js
---- custom-inner-block.js
---- custom-dynamic-block.js
--- components/
如果我理解正确的话——从古腾堡回购(repo)的例子来看https://github.com/WordPress/gutenberg-examples ) - 每个块都必须在WordPress中单独注册render_callback 工作。因此需要自己的构建文件register_block_type 呼叫

在回购协议中,似乎每个区块都是一个单独的React项目。必须使用npm create-react-appnpm start 命令

这意味着古腾堡项目应该具有类似于此的文件结构。

- Plugin/
-- plugin-init.php
-- custom-outer-block/
--- package.json
--- package-lock.json
--- node_modules/
--- build/
---- index.js
---- index.js.map
--- src/
---- index.js
-- custom-inner-block/
--- package.json
--- package-lock.json
--- node_modules/
--- build/
---- index.js
---- index.js.map
--- src/
---- index.js
-- custom-dynamic-block/
--- package.json
--- package-lock.json
--- node_modules/
--- build/
---- index.js
---- index.js.map
--- src/
---- index.js
-- components/
在一个插件或主题中有这么多React项目和重复的节点模型,这似乎有点奇怪。在开发过程中,在不同的块之间切换,必须分别启动它们,对我来说没有多大意义。

我肯定有些东西我没有得到。

So long story short; 有没有一种方法可以将所有块组合到一个React项目中,这样我只需运行create-react-app 一次-并将文件编译为可用于register_block_type?

1 个回复
最合适的回答,由SO网友:N. Seghir 整理而成

古腾堡示例并不是一个单一的插件,您可以将其视为一次五个插件,它旨在成为本教程每个部分的工作示例。

您有很多可以遵循的模式,目前,核心块都是在这样的文件夹中定义的,coblock也遵循相同的模式。

block-library/
  - image/
    -- edit.js
    -- index.js
    -- save.js
    -- styles.css
  - quote/
    -- edit.js
    -- index.js
    -- save.js
    -- styles.css
  - index.js (root index)
  - styles.css (root style)

每个save.js &;edit.js 文件包含该函数的代码。

每个index.js 因为块包含对所述文件的引用,以及一些其他设置,如标题和;类别

预制代码块索引。js文件示例(简化)

import edit from \'./edit\';
import save from \'./save\';

export const name = \'core/code\';

export const settings = {
    title: \'Code\',
    description: \'Display code snippets that respect your spacing and tabs.\',
    category: \'formatting\',
    icon: \'image\',
    edit,
    save,
};
根样式。css只需导入每个块样式的css。

根索引。js文件负责调用;注册块,所以它是这样的(简化)

import { registerBlockType } from \'@wordpress/blocks\';

import * as image from \'./image\';
import * as quote from \'./quote\';
import * as code from \'./code\';

const blocks = [
    image,
    quote,
    code
];

function registerBlock( block ) {
    const { name, setting } = block;
    registerBlockType( name, settings );
}

blocks.forEach( registerBlock );
或更大的示例coblocks

您的插件应该调用该索引,并使用相同的文件注册每个块,只是不同的块名称。

查看如何锁定does it

至于构建过程,您不需要在每个块上使用节点模块,只需要在根索引上运行它。js文件。

对于更简单的方法,您可以使用wp-scripts gutenberg和gutenberg示例都在内部使用它,您可以将其安装在插件的根文件中,并将这些脚本添加到包中。json

"scripts": {
    "build": "wp-scripts build",
    "start": "wp-scripts start"
}
它假设您的代码(root index.js)位于src/index中。js,您的输出位于构建/索引。js(您可以更改)。

相关推荐