Skip to content

EvanLovely/theme-tools

Repository files navigation

Theme Tools by Basalt

Flexible, un-opinionated tools for front end development.

This is a monorepo of a lot of awesome stuff. Everything in packages/ can be npm install-ed by itself - and each of those packages is focused on solving a single need in front end web development, like needing to work with CSS for example. As many know, there's so much more to a good setup than just compiling Scss to CSS: linting, docs, compressing, handling vendor prefixes, managing file assets CSS needs like font files & images - not to mention a watch task for each of those. And that's what Theme Tools plugins do: they solve a collection of challenges to effective tooling around a single need. These examples are just around plugin-sass; there's several others as well and they all can be combined in different ways depending on the needs of the specific project - use as many or as little as you'd like - even in your pre-existing setup.

See the packages/ folder for the individual npm modules.

See the examples/ folder for how it can all come together.

Each take a config object and returns an object containing functions that it can run, like a css compile, or watch css to compile. No plugins contain gulp.task().

Contributing

Dev Setup

This uses lerna for monorepo setup.

npm install
npm run bootstrap # this is `lerna bootstrap`

Why is this a monorepo?

Inspired by Babel. Thanks!

The tool for managing the monorepo is Lerna

Juggling a multimodule project over multiple repos is like trying to teach a newborn baby how to ride a bike.

This is quite taboo but let's look at the pros and cons:

Pros:

  • Single lint, build, test and release process.
  • Easy to coordinate changes across modules.
  • Single place to report issues.
  • Easier to setup a development environment.
  • Tests across modules are ran together which finds bugs that touch multiple modules easier.

Cons:

  • Codebase looks more intimidating.
  • Repo is bigger in size.
  • ???

This is dumb! Nobody in open source does this!

Babel, React, Meteor, and Ember, among others, do this.

Previous discussion