gravity-ui-web
gravity-ui-web copied to clipboard
Publish Nunjucks templates to NPM
Is your feature request related to a problem? Please describe.
We maintain a set of HTML templates (written in Nunjucks) for our pattern library. Those same templates could be useful for downstream consumers such as the Buildit website, so we should publish them as an @buildit/gravity-ui-nunjucks
NPM package.
A while ago we decided to work towards that by:
- ~Converting to a Lerna monorepo, so that we could have code for multiple NPM packages in one repo~
- ~Split out the templates + pattern library code into its own package~
- Setup the necessary conversions and builds to publish the templates to the NPM package repo
This issue is to cover the last and final step.
Describe the solution you'd like First off, it's best to wait for the migration to Fractal (#264) to complete, since that affects the structure of the templates.
Once that's in place, we'll need to figure out how to make the templates usable without Fractal (which has it's own @..
shorthand naming scheme for importing/including other templates). Possible options are:
- Export copies of the templates and find'n'replace the shorthand names with relative file paths. (Fractal's own docs have an example of something like this)
- Or, write a custom Nunjucks loader, which can "understand" the same
@...
shorthand. - There may be other options, or the above could be combined somehow. In any case, this needs some more research
With a solution to the above in place, we should then get semantic-release
enabled and configured properly for the @buildit/gravity-ui-nunjucks
package and get it published.
In a personal project I have managed to pull this off using the approach outlined in Fractal's docs, i.e. exporting copies of the template files somewhere into the dist/
dir and then shipping those in an NPM package.
It's relatively straightforward for consuming projects to then configure their Nunjucks environment to look for templates in that directory (and our build-api
can assist with this) in addition to whatever local template directory(-ies) they have.
However, I think we need to be picky about which templates we export. There's little value in all the ones that are "just" plain HTML elements. Likewise templates and pages probably shouldn't be published either.
I reckon (non-element) atoms, molecules and organisms are the sweet spot.
Unfortunately our current organisation is a mess. Also, in a misguided attempt to get lineage links for ALL THE THINGS, I regretfully overengineered and entangled our Nunjucks templates.
As a way forward, I therefore propose:
- We reorganise our pattern library - see #309
- Now with the added constraint that atom / molecule / organism Nunjucks templates must not reference basic HTML element templates. This is because we'd exclude those in our NPM package and such references would then be broken.
- We remove gunk like 'section' - see #276
Then we can update our build to copy out the templates we want to ship and publish them to NPM, which will be covered by this issue.