我已经创建了一个自定义块,可以在同一个插件中创建另一个自定义块,但如果我继续,它会变得一团糟,因为所有事情都必须在同一个索引中完成。js文件和php文件,似乎是这样。这对我来说是新的,所以也许有一种简单的方法可以做到这一点。
但我尝试创建一个blocks文件夹,然后在其中放置一个src文件夹和一个索引。js文件,因此每个块文件夹基本上都有自己的css文件和js文件等。但当我运行npm run start时,它不会像在根目录中那样在子文件夹中创建构建文件夹。
因此,我当前的文件夹结构如下所示:
build
index.php
package.json
src
- index.js
- index.scss
我想知道我是否可以有多个街区
build
index.php
hero.php
call-to-action.php
package.json
blocks
- hero
-- src
--- index.js
--- index.scss
- call-to-action
-- src
--- index.js
--- index.scss
package.json
{
"name": "custom-blocks",
"version": "1.0.0",
"description": "",
"main": "index",
"scripts": {
"build": "wp-scripts build",
"start": "wp-scripts start",
"test": "echo \\"Error: no test specified\\" && exit 1"
},
"author": "",
"license": "ISC",
"devDependencies": {
"@wordpress/scripts": "^19.1.0"
}
}
index.php
<?php
/*
Plugin Name: custom blocks
Description: custom blocks
Version: 1.0
Author: ...
Author URI: ...
License: GPLv2 or later
*/
if ( ! defined( \'ABSPATH\' ) ) exit;
class myCustomBlocks {
function __construct() {
add_action(\'init\', array($this, \'adminAssets\'));
}
function adminAssets() {
wp_register_style(\'quizeditcss\', plugin_dir_url(__FILE__) . \'build/index.css\');
wp_register_script(\'ournewblocktype\', plugin_dir_url(__FILE__) . \'build/index.js\', array(\'wp-blocks\', \'wp-element\', \'wp-editor\'));
register_block_type(\'ourplugin/hero-block\', array(
\'editor_script\' => \'ournewblocktype\',
\'editor_style\' => \'quizeditcss\',
\'render_callback\' => array($this, \'theHTML\')
));
}
function theHTML($attributes) {
ob_start(); ?>
<p>Here is some data: <?php echo esc_html($attributes[\'someAttribute\']); ?></p>
<?php return ob_get_clean();
}
}
$myCustomBlocks = new myCustomBlocks();
index.js
import "./index.scss";
import {
TextControl,
Flex,
FlexBlock,
FlexItem,
Button,
Icon,
} from "@wordpress/components";
wp.blocks.registerBlockType("ourplugin/hero-block", {
title: "Hero block",
icon: "smiley",
category: "common",
attributes: {
title: {
type: "string",
},
},
edit: EditComponent,
save: function () {
return null;
},
});
function EditComponent(props) {
return (
<div className="some-jsx">
Some block jsx here
</div>
);
}
SO网友:stokesman
我用不止一种方法更新了这个答案。虽然可能不用说这些的上下文是使用@wordpress/scripts
开发包。
适用于所有块的单束
此设置最适合构建具有父/子关系(如列/列)的块的某些组合,因此,如果没有另一个块,则无法使用其中一个块。
在中指定多个入口点build
和start
脚本。开头示例:
"start": "wp-scripts start --entry ./hero/src/index.js ./call-to-action/src/index.js"
将js捆绑到
main.js
与违约相反
index.js
所以
editorScript
块的json中的路径需要更新。(由于只输出一个bundle,因此实际上只需要一个块的json文件来指定它)。
要为每个块输出单独的文件,我知道有两种方法。
这最终将是最灵活的选择,可能非常简单。对于问题中的块,应使用如下配置:
const defaultConfig = require(\'@wordpress/scripts/config/webpack.config\');
module.exports = {
...defaultConfig,
entry: {
\'hero\': \'./blocks/hero/src\',
\'call-to-action\': \'./blocks/call-to-action/src\',
},
};
Ryan Welcher
an example repo 和a
video walk-through of its creation (该链接指向有关创建自定义网页包配置的部分)。
在中指定多个入口点build
和start
未使用的脚本(--entry
)这是official docs 当前演示:
"build:custom": "wp-scripts build entry-one.js entry-two.js --output-path=custom"
最新版本的
@wordpress/scripts
(19.1.0,可能回到18)每个入口点的文件名必须是唯一的,否则文件将被排除在构建之外。因此,对于问题中所示的项目结构,它将无法同时包含这两个块,因为它们都已命名
index.js
. 在早期版本中
@wordpress/scripts
这两个文件都将包含在内,但会捆绑到一个文件中。此行为可能会改变。