## 附加资源
- [展示区块文件结构的示意图](https://excalidraw.com/#json=YYpeR-kY1ZMhFKVZxGhMi,mVZewfwNAh_oL-7bj4gmdw)
### `index.js`
`index.js`文件(或`block.json`中`editorScript`属性定义的任何其他文件)是仅在块编辑器中加载的JavaScript入口文件。它负责调用`registerBlockType`函数在客户端注册区块,通常通过导入`edit.js`和`save.js`文件来获取区块注册所需的函数。
### `edit.js`
`edit.js`文件包含负责渲染区块编辑界面的React组件,允许用户在块编辑器中与区块内容及设置进行交互。该组件会被传入`index.js`文件内`registerBlockType`函数的[`edit`](https://developer.wordpress.org/block-editor/reference-guides/block-api/block-edit-save/#edit)属性。
### `save.js`
`save.js`文件导出的函数用于返回将被保存到WordPress数据库的静态HTML标记。该函数会被传入`index.js`文件内`registerBlockType`函数的[`save`](https://developer.wordpress.org/block-editor/reference-guides/block-api/block-edit-save/#save)属性。
### `style.(css|scss|sass)`
扩展名为`.css`、`.scss`或`.sass`的`style`文件包含将在块编辑器和前端同时加载的区块样式。在构建过程中,该文件会被转换为`style-index.css`,通常通过`block.json`中的[`style`](https://developer.wordpress.org/block-editor/reference-guides/block-api/block-metadata/#style)属性进行定义。
### `editor.(css|scss|sass)`
扩展名为`.css`、`.scss`或`.sass`的`editor`文件包含在块编辑器中应用于区块的附加样式。此文件通常用于定义区块用户界面特有的样式。在构建过程中该文件会被转换为`index.css`,一般通过`block.json`中的`editorStyle`属性进行定义。
### `render.php`
`render.php`文件(或`block.json`的[`render`](https://developer.wordpress.org/block-editor/reference-guides/block-api/block-metadata/#render)属性定义的任何其他文件)定义了服务端处理逻辑,用于在前端请求时返回区块标记。若已定义,此文件将优先于其他前端区块渲染方式。
### `view.js`
`view.js`文件(或`block.json`的[`viewScript`](https://developer.wordpress.org/block-editor/reference-guides/block-api/block-metadata/#view-script)属性定义的任何其他文件)会在区块展示时于前端加载。
## `build`文件夹
`build`文件夹包含从`src`文件夹编译优化后的代码版本。这些文件由[构建过程](https://developer.wordpress.org/block-editor/getting-started/devenv/get-started-with-wp-scripts/#the-build-process-with-wp-scripts)生成,该过程通过`wp-scripts`的`build`或`start`命令触发。
此转换过程包括代码压缩、将现代JavaScript转译为兼容更广泛浏览器的版本,以及资源打包以实现高效加载。WordPress最终会调用并使用`build`文件夹中的内容在块编辑器和前端渲染区块。
您可以使用
wp-scripts构建命令的
webpack-src-dir和
output-path选项来
自定义入口和输出路径。
# 区块的文件结构
为WordPress开发自定义区块时,最佳实践是在插件中注册它们而非主题中。这种策略能确保即使用户切换主题,您的区块仍可正常使用。虽然在某些情况下将区块直接嵌入主题可能更为合适,但本指南主要关注插件中的区块结构。具体来说,将详细说明通过[`create-block`](https://developer.wordpress.org/block-editor/getting-started/devenv/get-started-with-create-block/)工具生成的文件结构。
遵循`create-block`工具的结构并非强制要求,但它提供了一个可靠的参考标准。该工具生成的文件包含了区块定义和注册所需的所有内容。采用这种结构有助于保持一致性,并确保区块组织有序、易于维护。
[](https://developer.wordpress.org/files/2023/11/file-structure-block.png "点击查看区块文件结构示意图")
## `<插件文件>.php`
在WordPress插件中创建区块时,通常需要在插件的主PHP文件中通过服务器端注册区块。这可以通过使用[`register_block_type()`](https://developer.wordpress.org/reference/functions/register_block_type/)函数来实现。
有关创建WordPress插件的更多信息,请参阅
插件基础文档以及主PHP文件的
头部要求。
## `package.json`
`package.json`文件用于配置Node.js项目(从技术角度说,区块插件就是Node.js项目)。在此文件中,您可以定义区块的`npm`依赖项以及用于本地开发的脚本。
## `src`文件夹
在标准项目中,`src`(源码)文件夹包含原始的未编译代码,包括开发区块所需的JavaScript、CSS和其他资源。这是您编写和编辑区块源代码的地方,可以利用现代JavaScript特性和JSX来创建React组件。
通过`wp-scripts`提供的[构建过程](docs/block-editor/getting-started/fundamentals/javascript-in-the-block-editor/#javascript-build-process.md)会从此文件夹中获取文件,并在项目的`build`文件夹中生成可用于生产环境的文件。
### `block.json`
`block.json`文件包含[区块的元数据](docs/block-editor/reference-guides/block-api/block-metadata/),可简化其在客户端和服务器端环境中的定义和注册过程。
该文件包括区块名称、描述、[属性](docs/block-editor/reference-guides/block-api/block-attributes/)、[支持特性](docs/block-editor/reference-guides/block-api/block-supports/)等内容,以及负责区块功能、外观和样式的关键文件位置。
当应用构建过程时,`block.json`文件和其他生成的文件会被移动到指定文件夹(通常是`build`文件夹)。因此,`block.json`中指定的文件路径指向这些经过处理、打包后的文件版本。
在`block.json`中可以定义的一些最重要属性包括:
- **[`editorScript`](https://developer.wordpress.org/block-editor/reference-guides/block-api/block-metadata/#editor-script):** 通常设置为从`src/index.js`构建的打包`index.js`文件路径。
- **[`style`](https://developer.wordpress.org/block-editor/reference-guides/block-api/block-metadata/#style):** 通常设置为从`src/style.(css|scss|sass)`构建的打包`style-index.css`文件路径。
- **[`editorStyle`](https://developer.wordpress.org/block-editor/reference-guides/block-api/block-metadata/#editor-style):** 通常设置为从`src/editor.(css|scss|sass)`构建的打包`index.css`文件路径。
- **[`render`](https://developer.wordpress.org/block-editor/reference-guides/block-api/block-metadata/#render):** 通常设置为从`src/render.php`复制而来的打包`render.php`文件路径。
- **[`viewScript`](https://developer.wordpress.org/block-editor/reference-guides/block-api/block-metadata/#view-script):** 通常设置为从`src/view.js`构建的打包`view.js`文件路径。
[](https://excalidraw.com/#json=c22LROgcG4JkD-7SkuE-N,rQW_ViJBq0Yk3qhCgqD6zQ "在excalidraw中打开构建输出示意图")