How to share your Frontity project
When you create a Frontity project most of the times you'll end up creating a custom theme:
Because you need some specific design and features for your project
Because you directly want to create a theme that can be reused by others (like @frontity/mars-theme or @frontity/twentytwenty-theme)
Whatever the case is, you may want the community:
To be able to check the code of your theme
To be able to install it locally so it can be debugged → this will help the community to help you with any issue you may have with your project/theme
To be able to install it as an npm package (eventually) so it can be easily reused in some other projects
Here you have a few things to consider to ease contributions and support from the community to your theme
A Frontity theme project structure
In Frontity, themes are packages that can be published in npm so they can be installed and used in any other Frontity project
The suggested structure for developing new themes that works with Frontity is the following one
/my-frontity-project
|__ frontity.settings.js
|__ package.json
|__ /node_modules
|__ /packages
|__ /awesome-theme
|__ /my-custom-extension-1
|__ /my-custom-extension-2In this structure, the theme you're developing is a local dependency of the main package.json
"dependencies": {
"awesome-theme": "file:packages/awesome-theme"
}This structure implies having a main Frontity project (root package.json) and some packages (each one with its own package.json) under the packages folder
/my-frontity-project
...
|__ package.json
...
|__ /packages
|__ /awesome-theme
|__ /my-custom-extension-1
|__ /my-custom-extension-2So, to create a custom theme project we recommend you to:
Create a Frontity project →
npx frontity create awesome-theme-projectCreate a Frontity package (your theme) →
npx frontity create-package awesome-theme
These files in the root represents the Frontity project that can be launched and that will allow to see the theme (or any other package) in action
In the root folder you'll find the following:
frontity.setting.js
frontity.setting.jsA frontity.setting.js file containing the settings for your project (among other settings you'll usually define the use of this theme)
For example:
...
"packages": [
{
"name": "awesome-theme"
},
...node_modules
node_modulesA /node_modules/ folder, where the dependencies of the project are installed
packages
packagesA packages folder where your local packages live
package.json
package.jsonAnd a package.json with the configuration & dependencies for the Frontity project.
This package.json is used when you publish a package in npm, but this Frontity project is not meant to be published
The Theme
With this structure you can develop your theme as a package inside the packages folder.
Each one of these packages will have its own package.json and these packages are the ones meant to be published (npm publish)
Why this structure?
This structure allows to:
Launch the project using the theme locally
Publish the theme independently
So any developer can clone this project, launch the Frontity project locally, have a look at how the theme looks like & behave and make contributions (pull requests) to your repository (that can be eventually merged into the main repository).
And also, the owner of the theme still can publish those new updates independently (from the theme folder, packages/awesome-theme in this case)
Sharing your GitHub repository on CodeSandbox
GitHub repositories containing Frontity projects with the structure explained above, can be directly opened in CodeSandbox by using one of the following URL structures:
https://githubbox.com/<%GITHUB_ACCOUNT%>/<%FRONTITY_PROJECT_REPOSITORY%>
https://codesandbox.io/s/github/<%GITHUB_ACCOUNT%>/<%FRONTITY_PROJECT_REPOSITORY%>For example this repo https://github.com/frontity-demos/demo-custom-homepage-categories can be opened directly in CodeSandbox with links like:
Example: Frontity Chakra Theme
Let's take Frontity Chakra Theme as an example of a Frontity theme available:
As an npm package ready to be installed and used as a theme in any Frontity project
In a GitHub repository ready to be cloned and launched locallly, and also ready to accept contributions from the community via Pull Requests
Clone and launch it locally
Once we clone the theme we can see the project follows the structure of a typical Frontity project
/frontity-chakra-ui-theme
|__ frontity.settings.js
|__ package.json
...
|__ /packages
|__ /frontity-chakra-themeFrom the root of the project we can do
npm installThis command will install the dependencies of the Frontity project and the dependencies of its dependencies, just as any other npm package
So, as Frontity Chakra Theme is also one of the dependencies (a local dependency) is:
"dependencies": {
...
"frontity-chakra-theme": "./packages/frontity-chakra-theme"
}All needed dependencies (the ones defined for the Frontity project and the ones defined for the theme) are installed
Once we have all the dependencies installed you can do (from the root)
npx frontity devThis will launch the Frontity project using this theme
Publish the theme (as npm package)
As we can see frontity-chakra-theme is published as an npm package
> npm search frontity-chakra-theme
NAME | DESCRIPTION | AUTHOR | DATE | VERSION | KEYWORDS
frontity-chakra-theme | A frontity theme… | =segunadebayo | 2020-01-28 | 0.0.2 | wordpress frontity frontity-theme frontityHow did @segunadebayo published this theme once he finished it? Just by doing:
cd packages/frontity-chakra-theme
npm publishLast updated
Was this helpful?