đ Excited to release the create-guten-block toolkit today. In this post, I am going to share what is create-guten-block (cgb), what is the motivation & philosophy behind building this dev-toolbox, and the story of how I am releasing it to the public after ~200 commits and ~90 version releases. Letâs start with intro firstâŠ
create-guten-block (đ at GitHub for updates) is a zero-configuration dev-toolkit (#0CJS) to develop WordPress Gutenberg blocks in a matter of minutes without configuring React, Webpack, ES6/7/8/Next, ESLint, Babel, etc.
Create Guten Block is not like other starter-kits or boilerplates. Itâs a developerâs toolbox which is continuously updated. Since it has zero-configuration, you can always update it without any changes in your code. Thatâs actually why I built it.
đ
Hey, donât forget to star đ it at GitHub for updates, to show appreciation, and do report back any issues you face.
Well, itâs a create-guten-block is a way for you to start building Gutenberg blocks without having to configure or setup anything. Itâs a zero-config-js #0CJS toolkit with a single dependency in your projects â which will stay up to date.
Whatâs Included?
Your dev-environment will have everything you need to build a modern next-gen WordPress Gutenberg plugin:
React, JSX, and ES6 syntax support.
Webpack dev/production build process behind the scene.
Language extras beyond ES6 like the object spread operator.
Auto-prefixed CSS, so you donât need -webkit or other prefixes.
A build script to bundle JS, CSS, and images for production with source-maps.
Hassle-free updates for the above tools with a single dependency cgb-scripts.
đ°
The tradeoff is that these tools are preconfigured to work in a specific way. If your project needs more customization, you can âejectâ and customize it, but then you will need to maintain this configuration.
Philosophy
One Dependency:Â There is just one build dependency. It uses Webpack, Babel, ESLint, and other amazing projects, but provides a cohesive curated experience on top of them.
No Configuration Required:Â You donât need to configure anything. A reasonably good configuration of both development and production builds is handled for you so you can focus on writing code.
No Lock-In: You can eject to a custom setup at any time. Run a single command, and all the configuration and build dependencies will be moved directly into your project, so you can pick up right where you left off.
Well, itâs really hard to configure things like Webpack, React, ES 6/7/8/Next, ESLint, Babel, etc. before you â even start writing â a Hello WorldGutenberg block. Then thereâs the fact that you have to maintain and constantly update your configuration with all the new tools and growth in the JavaScript community â thatâs not an easy thing to do.
create-guten-block hides all this configuration away in an optimized package that we call cgb-scripts. This package is the only dependency in your projects. We keep cgb-scripts up to date while you go ahead and create the next best WordPress themes and plugins.
đŠ
âIâve heard from several people that theyâve consolidated their companies tool dependencies into a single package and this worked really well for them.â â @Dan_Abramov
So, thatâs what I dreamt about for the next couple of months. How do I solve this problem for the WordPress community, eh?
After building WPGulp and Gutenberg Boilerplate and lot of other open source software that thousands of developers are using â I started receiving lots of feedback on how itâs limiting in its architecture which is complex â and by the way, these boilerplates went stale quite a few times.
I knew this was not right.
Â
đđđ
Developers told me that they built Gutenberg blocks with ES5 because the amount of time required to configure, set up, and learn tools like Babel, Webpack, ESLint, Prettier, etc. wasnât worth it. And I was like whaaaat?!
So, yes! I went ahead and built a solution â a zero-config-js #0CJS WordPress developersâ toolkit called create-guten-block! Enough talk, letâs stop it right here and actually explore the toolkit.
<
div>
GETTING STARTED!
Itâs really easy to get started with create-guten-block. Just install it as a global module and run it to create your next-gen Gutenberg block plugin for WordPress.
If you donât have Node.js + npm installed then read this step, otherwise jump to the Step #1 below.
In case you are an absolute beginner to the world of Node.js, JavaScript, and npm packages â all you need to do is go to the Nodeâs site download + install Node on your system. This will install both Node.js and npm, i.e., node package manager â the command line interface of Node.js.
You can verify the install by opening your terminal app and typingâŠ
node -v
# Results into v9.4.0 â make sure you have Node >= 8 installed.
and thenâŠ
npm -v
# Results into 5.6.0 â make sure you have npm >= 5.2 installed.
â STEP #1
Install create-guten-block globally on your system.
Youâll need to have Node >= 8 on your local development machine (but itâs not required on the server). You can use nvm(macOS/Linux) or nvm-windows to easily switch Node versions between different projects.
npm install create-guten-block --global
Hold on, itâll take a couple of minutes to install.
â STEP #2
Now all you have to do is create a Gutenberg block and start building. Itâs done by running the create-guten-block command and providing it with a unique name for a WordPress plugin that will get created. The name can a single word or hyphenated multiple words.
â ïž
Make sure to run this command in your local WordPress installâs plugins folder i.e. /local_dev_site.tld/wp-content/plugins/ folde â since this command will produce a WordPress Gutenberg block plugin that you can go to WP Admin â¶ïž Plugins to activate.
Now letâs run the following command.
create-guten-block my-block
It will create a directory called my-block inside the current folder. Inside that directory, it will generate the initial project structure and install the transitive dependencies:
No configuration or complicated folder structures, just the files you need to build your app.
â STEP #3
Once the installation is done, you can open your project folder and run the start script.
Letâs do that.
cd my-block
npm start
You can also use yarn start if thatâs your jam.
This runs the plugin in development mode. To produce production code run npm run build. You will see the build messages, errors, and lint warnings in the console.
đŻ
And just like that, youâre building your next WordPress plugin with Gutenberg, React.js, ES 6/7/8/Next, transpiled with Babel, which also has ESLint configurations for your code editor to pick up and use automatically.
Workflow!
There are just three scripts that you can use in your create-guten-block workflow. With these three scripts, you can develop, build, and eject your plugin.
đ npm start
Use to compile and run the block in development mode.
Watches for any changes and reports back any errors in your code.
đ npm run build
Use to build production code for your block inside dist folder.
Runs once and reports back the gzip file sizes of the produced code.
đ npm run eject
Use to eject your plugin out of create-guten-block.
Provides all the configurations so you can customize the project as you want.
Itâs a one-way street, eject and you have to maintain everything yourself.
You donât normally have to eject a project because by ejecting you lose the connection with create-guten-block and from there onwards you have to update and maintain all the dependencies on your own.
Thatâs about it.
TL;DR
Too long, didnât read? Hereâs a shorter version.
Open the terminal app and run the following commands.
â Â Install/Update:Â npm install create-guten-block --global
đ°Â Create: create-guten-block my-block â Run inside local WP install E.g. /wp.local/wp-content/plugins/ directory.
đ Browse: cd my-block â Open the newly created plugin directory.
â»ïžÂ Run: npm start â For development.
đŠÂ Run: npm run build â For production build.
â Run: npm run eject â To customize, update, and maintain all by yourself.
Create-Guten-Block has been tested to work on macOS, but must also work on Windows, and Linux. If something doesnât work, kindly file an issue â
Updating to New Releases
Create Guten Block is divided into two packages:
create-guten-block is a global command-line utility that you use to create new WP Gutenberg plugins.
cgb-scripts is a development dependency in the generated plugin projects.
npm install create-guten-block --global
You almost never need to update create-guten-block itself: it delegates all the setup to cgb-scripts. But as this project matures, there might be a few changes over time and you can re-run the global install.
When you run create-guten-block, it always creates the project with the latest version of cgb-scripts so youâll get all the new features and improvements in newly created plugins automatically.
â  To update an existing project to a new version of cgb-scripts, open the changelog, find the version youâre currently on (check package.json in your pluginâs folder if youâre not sure), and apply the migration instructions for the newer versions.
đ°Â In most cases bumping the cgb-scripts version in the package.json and running npm install in this folder should be enough, but itâs good to consult the changelog for potential breaking changes.
We commit to keeping the breaking changes minimal so you can upgrade cgb-scripts painlessly.
đ Go read the entire changelog at this link â CGB Changelog â
Nothingâs ever complete, so bear with us while we keep iterating towards a better future.
'Coz every night I lie in bed
The brightest colors fill my head
A million dreams are keeping me awake
I think of what the world could be
A vision of the one I see
A million dreams is all it's gonna take
A million dreams for the world we're gonna make ...
I (Ahmad Awais) am a Full Stack Web Developer and a regular core contributor at WordPress. My significant other (Maedah Batool) is a Technical Project Manager, and sheâs also a WordPress Core Contributor. Together with our team, we run the TheDevCouple.com.
If youâd like to get insights into our love for open source software, professional full stack development, WordPress community, the growth of JavaScript or growing a family, building, and bootstrapping a business, then subscribe to our premium newsletter called âŁÂ The WordPress Takeaway!
If youâd like us to keep producing professional free and open source software (FOSS). Consider paying for an hour of my dev-time. Weâll spend two hours on open source for each contribution. Yeah, thatâs right, you pay for one hour and get both of us to spend an hour as a thank you.
This FOSS (free and open source software) project is built, updated and maintained with the help of awesome businesses listed below. Without the support from these amazing companies/individuals, this project would not have been possible. Make sure you check out their awesome services and products. Theyâve earned it. đ
This project is inspired by the work of more people than I could mention here. But thank you, Dan Abramov for Create React App, Andrew Clark, Sophie Alpert from React.js team, Wes Bos for awesome courses for React, ES6, and Node beginners. Kent C. Dodds for his open source evangelism, WordPress Core Contributors, Gary for keeping everyone sane, Gutenberg developers Matias, Riad, Andrew, Joen, Greg and contributors, and other WordPress community members like Zac for his course on Gutenberg, and also my friend Morten for all the #Guten-motivation, Icons8 for the awesome icons, Maedah for managing this project, and to everyone I forgot.
Whatâs Next?
Yes, thatâs not all done, yet. I have managed to change the codebase and release many updates by now, before actually announcing a stable release.
The next step is to get this toolkit tested and mature the entire app to release version 2.0.0 for that not only do I need your support, I ask that you hop on board and contribute â thatâs the only way forward.