This scaffold is the starting point for all 10up WordPress projects.
It contains a bare bones theme and must use plugin for you to base your development off of. Asset bundling is handled entirely by 10up Toolkit.
The best way to use the scaffold is to simply run npx 10up-toolkit project init
in your terminal.
You can also use the scaffold manually by doing the following:
wp-content
directory (ignoring obvious things like uploads
). This enables us to have plugins, theme, etc. all in one repository. Having separate repositories for each plugin and theme only happens in rare circumstances that are outside of our control.npm run start
(after running npm install
first of course). Inside package.json
edit 10up-toolkit.devURL
to your local development URL for if you're not using a .test
. 10up-toolkit.entry
are the paths to CSS/JS files that need to be bundled. Edit these as needed.define( 'SCRIPT_DEBUG', true )
to wp-config.php
to enable Hot Module Reload and React Fast Refresh.workspaces
config are setup so that mu-plugins/10up-plugin
and all themes are treated as "packages", if you are building a new plugin/theme make sure to update workspaces
in package.json
See the example below: "workspaces": [
"themes/*",
"mu-plugins/10up-plugin",
"mu-plugins/my-other-awesome-10up-plugin",
],
npm install
at the root and npm run [build|start|watch]
and npm will automatically build all themes and plugins. If a WordPress critical error is received run composer install
in all locations that have an existing composer.lock
file; example locations: root
, /mu-plugins/10up-plugin
, /themes/10up-theme
. Upon build completion set the 10up-theme
as active within WordPress admin by running wp theme activate 10up-theme
.npm workspaces
do not have the ability to run scripts from multiple packages in parrallel. Because of that we use the npm-run-all
package and we define specific scripts in package.json
so you will need to update the watch:*
scripts in package.json
and replace tenup-theme
and tenup-plugin
with the actual package names. "watch:theme": "npm run watch -w=tenup-theme",
"watch:plugin": "npm run watch -w=tenup-plugin",
"watch": "run-s watch:theme watch:plugin",
-w=package-name
flag to the npm install
command. E.g: npm install --save prop-types -w=tenup-plugin
DO NOT RUN npm install
inside an individual workspace/package. Always run the from the root folder.@wordpress/*
packages, you do not need to manually install them as 10up-toolkit
will handle these packages properly.Much of the functionality in the scaffold is intended to be optional depending on the needs of your project e.g. i18n functionality. However, there are a few important principles that you must follow:
scripts
convention:
"scripts": {
"start": "npm run watch",
"watch": "10up-toolkit watch --hot",
"build": "10up-toolkit build",
"format-js": "10up-toolkit format-js",
"lint-js": "10up-toolkit lint-js",
"lint-style": "10up-toolkit lint-style",
"test": "10up-toolkit test-unit-jest",
"clean-dist": "rm -rf ./dist"
},
Husky and Lint-Staged are both set up to run on the pre-commit hook. The lint-staged configuration file is available to edit in .lintstagedrc.json
.
By default it will run the following:
eslint
on JS and JSX files.stylelint
on CSS files.phpcs
on PHP files.