README
bappo-scripts 🛠📦
CLI toolbox for common scripts for Bappo projects
The problem
We need to set up linting, testing, building for every project (platform and customer projects). It's tedious to set up a new project and hard to keep the tooling up-to-date.
This solution
This is a CLI that abstracts away all configuration for linting, testing, building, and more.
Table of Contents
Installation
Requires node version >= 10.18
This module is distributed via npm which is bundled with node and
should be installed as one of your project's devDependencies:
yarn add --dev @bappo/scripts
Usage
This is a CLI and exposes a bin called bappo-scripts. I don't really plan on
documenting or testing it super duper well because it's really specific to my
needs. You'll find all available scripts in src/scripts.
This project actually dogfoods itself. If you look in the package.json, you'll
find scripts with node src {scriptName}. This serves as an example of some of
the things you can do with bappo-scripts.
Overriding Config
Unlike react-scripts, bappo-scripts allows you to specify your own
configuration for things and have that plug directly into the way things work
with bappo-scripts. There are various ways that it works, but basically if you
want to have your own config for something, just add the configuration and
bappo-scripts will use that instead of it's own internal config. In addition,
bappo-scripts exposes its configuration so you can use it and override only
the parts of the config you need to.
This can be a very helpful way to make editor integration work for tools like ESLint which require project-based ESLint configuration to be present to work.
So, if we were to do this for ESLint, you could create an .eslintrc with the
contents of:
{"extends": "./node_modules/@bappo/scripts/eslint.js"}
Note: for now, you'll have to include an
.eslintignorein your project until this eslint issue is resolved.
Or, for babel, a .babelrc with:
{"presets": ["@bappo/scripts/babel"]}
Or, for jest:
const { jest: jestConfig } = require('@bappo/scripts/config');
module.exports = Object.assign(jestConfig, {
// your overrides here
// for test written in Typescript, add:
transform: {
'\\.(ts|tsx)