「前回書いた記事」と同じBlockをesnextに書き換えたものを見ていきます。
引き続き、参照元のサイトはここ「Gutenberg Handbook」です。
前回との違いは、esnextという未来のjavascriptを使ってるところ、これを使うと、buildが必要になるので、javascriptのソース「block.js」を webpackでbuildして「block.build.js」にするとかやっています。
今回作るファイルはこんな感じです。昨日はなかったファイルが三つほど追加になります。
追加した設定ファイル1 webpack.config.js
module.exports = {
entry: './block.js',
output: {
path: __dirname,
filename: 'block.build.js',
},
module: {
loaders: [
{
test: /.js$/,
loader: 'babel-loader',
exclude: /node_modules/,
},
],
},
};
追加した設定ファイル2 .babelrc
{
"presets": [
[ "env", {
"modules": false,
"targets": {
"browsers": [
"last 2 Chrome versions",
"last 2 Firefox versions",
"last 2 Safari versions",
"last 2 iOS versions",
"last 1 Android version",
"last 1 ChromeAndroid version",
"ie 11"
]
}
} ]
],
"plugins": [
[ "transform-react-jsx", {
"pragma": "wp.element.createElement"
} ]
]
}
追加した設定ファイル3 package.json
{
"name": "01-basic-esnext",
"version": "1.0.0",
"license": "GPL-2.0-or-later",
"main": "block.js",
"devDependencies": {
"babel-core": "^6.25.0",
"babel-loader": "^7.1.1",
"babel-plugin-transform-react-jsx": "^6.24.1",
"babel-preset-env": "^1.6.0",
"cross-env": "^5.0.1",
"webpack": "^3.1.0"
},
"scripts": {
"build": "cross-env BABEL_ENV=default NODE_ENV=production webpack",
"dev": "cross-env BABEL_ENV=default webpack --watch"
}
}
少々改造した index.php
前回作成したファイルとほとんど同じですが、block.js だったところを、build後のファイル block.build.js に書き換えています。
<?php
/**
* Plugin Name: Gutenberg Examples Basic
* Plugin URI: https://github.com/WordPress/gutenberg-examples
* Description: This is a plugin demonstrating how to register new blocks for the Gutenberg editor.
* Version: 1.0.2
* Author: the Gutenberg Team
*
* @package gutenberg-examples
*/
defined( 'ABSPATH' ) || exit;
function gutenberg_examples_01_register_block() {
if ( ! function_exists( 'register_block_type' ) ) {
// Gutenberg is not active.
return;
}
wp_register_script(
'gutenberg-examples-01',
plugins_url( 'block.build.js', __FILE__ ),
array( 'wp-blocks', 'wp-i18n', 'wp-element' ),
filemtime( plugin_dir_path( __FILE__ ) . 'block.build.js' )
);
register_block_type( 'gutenberg-examples/example-01-basic', array(
'editor_script' => 'gutenberg-examples-01',
) );
if ( function_exists( 'wp_set_script_translations' ) ) {
wp_set_script_translations( 'gutenberg-examples-01', 'gutenberg-examples');
}
}
add_action( 'init', 'gutenberg_examples_01_register_block' );
esnextに書き換えた block.js
前回作成したblock.jsの esnext版。スッキリシンプル。
const { __, setLocalData } = wp.i18n;
const { registerBlockType } = wp.blocks;
const blockStyle = {
backgroundColor: '#900',
color: '#fff',
padding: '20px',
};
registerBlockType( 'gutenberg-examples/example-01-basic-esnext', {
title: __('Example: Basic (esnext)', 'gutenberg-examples' ),
icon: 'universal-access-alt',
category: 'layout',
edit() {
return <div style={ blockStyle }>Basic example with JSX! (editor)</div>;
},
save() {
return <div style={ blockStyle }>Basic example with JSX! (front)</div>;
},
});
ビルドしてblock.build.jsを作る
pluginを作ったフォルダ、first-block-jsnextに移動、必要なpackageをインストールしてから、buildを叩く。
npm install
npm run build
Blockを確認
wordpressの設定画面で、pluginをactivateしたあと、Blockを選ぶとこんな感じです。