gutenbergdocs/getting-started/fundamentals/file-structure-of-a-block.md
2025-10-22 01:33:45 +08:00

95 lines
8.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

## 附加资源
- [展示区块文件结构的示意图](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)属性进行定义。
<div class="callout callout-info">
<code>wp-scripts</code>内部使用的webpack配置包含串联的
<a href="https://webpack.js.org/loaders/css-loader/">css-loader</a>
<a href="https://webpack.js.org/loaders/postcss-loader/">postcss-loader</a>
<a href="https://webpack.js.org/loaders/sass-loader/">sass-loader</a>
使其能够处理CSS、SASS或SCSS文件。更多信息请参阅
<a href="https://developer.wordpress.org/block-editor/reference-guides/packages/packages-scripts/#default-webpack-config">默认webpack配置</a>
</div>
### `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`文件夹中的内容在块编辑器和前端渲染区块。
<div class="callout callout-info">
您可以使用<code>wp-scripts</code>构建命令的<code>webpack-src-dir</code><code>output-path</code>选项来
<a href="https://developer.wordpress.org/block-editor/reference-guides/packages/packages-scripts/#automatic-block-json-detection-and-the-source-code-directory">自定义入口和输出路径</a>
</div>
# 区块的文件结构
为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)](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/)函数来实现。
<div class="callout callout-info">
有关创建WordPress插件的更多信息请参阅<a href="https://developer.wordpress.org/plugins/plugin-basics/">插件基础</a>文档以及主PHP文件的<a href="https://developer.wordpress.org/plugins/plugin-basics/header-requirements/">头部要求</a>
</div>
## `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`文件路径。
[![在excalidraw中打开构建输出示意图](https://developer.wordpress.org/files/2023/11/file-structure-build-output.png)](https://excalidraw.com/#json=c22LROgcG4JkD-7SkuE-N,rQW_ViJBq0Yk3qhCgqD6zQ "在excalidraw中打开构建输出示意图")