npm stats
  • Search
  • About
  • Repo
  • Sponsor
  • more
    • Search
    • About
    • Repo
    • Sponsor

Made by Antonio Ramirez

kcd-scripts

16.0.0

@kentcdodds

npmHomeRepoSnykSocket
Downloads:479671
$ npm install kcd-scripts
DailyWeeklyMonthlyYearly

kcd-scripts 🛠📦

CLI toolbox for common scripts for my projects


Build Status Code Coverage version downloads MIT License All Contributors PRs Welcome Code of Conduct

The problem

I do a bunch of open source and want to make it easier to maintain so many projects.

This solution

This is a CLI that abstracts away all configuration for my open source projects for linting, testing, building, and more.

Table of Contents

  • Installation
  • Usage
    • Overriding Config
    • TypeScript Support
  • Inspiration
  • Other Solutions
  • Issues
    • 🐛 Bugs
    • 💡 Feature Requests
  • Contributors ✨
  • LICENSE

Installation

This module is distributed via npm which is bundled with node and should be installed as one of your project's devDependencies:

npm install --save-dev kcd-scripts

Usage

This is a CLI and exposes a bin called kcd-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 kcd-scripts.

Overriding Config

Unlike react-scripts, kcd-scripts allows you to specify your own configuration for things and have that plug directly into the way things work with kcd-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 kcd-scripts will use that instead of it's own internal config. In addition, kcd-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/kcd-scripts/eslint.js"}

Note: for now, you'll have to include an .eslintignore in your project until this eslint issue is resolved.

Or, for babel, a .babelrc with:

{"presets": ["kcd-scripts/babel"]}

Or, for jest:

const {jest: jestConfig} = require('kcd-scripts/config')
module.exports = Object.assign(jestConfig, {
  // your overrides here

  // for test written in Typescript, add:
  transform: {
    '\\.(ts|tsx)$': '<rootDir>/node_modules/ts-jest/preprocessor.js',
  },
})

Note: kcd-scripts intentionally does not merge things for you when you start configuring things to make it less magical and more straightforward. Extending can take place on your terms. I think this is actually a great way to do this.

TypeScript Support

If the tsconfig.json-file is present in the project root directory and typescript is a dependency the @babel/preset-typescript will automatically get loaded when you use the default babel config that comes with kcd-scripts. If you customized your .babelrc-file you might need to manually add @babel/preset-typescript to the presets-section.

kcd-scripts will automatically load any .ts and .tsx files, including the default entry point, so you don't have to worry about any rollup configuration.

If you have a typecheck script (normally set to kcd-scripts typecheck) that will be run as part of the validate script (which is run as part of the pre-commit script as well).

TypeScript definition files will also automatically be generated during the build script.

Inspiration

This is inspired by react-scripts.

Other Solutions

If you are aware of any please make a pull request and add it here! Again, this is a very specific-to-me solution.

  • Rollpkg - convention over config build tool to create packages with TypeScript and Rollup.
  • bebbi-scripts - like kcd-scripts but ✅ tsc, ✅ esm/cjs/types, ✅ in TS, ✅ yarn 3, ✅ init package.json, ✅ yarn workspace, ✅ extensible (babel, storybook, ..), 🚫 yarn pnp, 🚫 npm

Issues

Looking to contribute? Look for the Good First Issue label.

🐛 Bugs

Please file an issue for bugs, missing documentation, or unexpected behavior.

See Bugs

💡 Feature Requests

Please file an issue to suggest new features. Vote on feature requests by adding a 👍. This helps maintainers prioritize what to work on.

See Feature Requests

Contributors ✨

Thanks goes to these people (emoji key):

Kent C. Dodds
Kent C. Dodds

💻 📖 🚇 ⚠️
Suhas Karanth
Suhas Karanth

💻 🐛 ⚠️
Matt Parrish
Matt Parrish

💻 ⚠️
Mateus
Mateus

💻 ⚠️
Macklin Underdown
Macklin Underdown

💻 ⚠️
stereobooster
stereobooster

💻 ⚠️
Dony Sukardi
Dony Sukardi

🐛 💻
Alexander Nanberg
Alexander Nanberg

💻
Alex Liang
Alex Liang

💻
Jeff Detmer
Jeff Detmer

💻
Alex Zherdev
Alex Zherdev

💻
Adam Harrington
Adam Harrington

💻 ⚠️
Adrià Fontcuberta
Adrià Fontcuberta

💻
Eric Berry
Eric Berry

🔍
Jared Schaab
Jared Schaab

💻 ⚠️
Bitcollage
Bitcollage

💻
Michaël De Boey
Michaël De Boey

💻 👀
Weyert de Boer
Weyert de Boer

💻
Jakub Jastrzębski
Jakub Jastrzębski

💻
Lukas
Lukas

💻 📖
Rahim Alwer
Rahim Alwer

💻
Vincent Ricard
Vincent Ricard

💻
Tim Deschryver
Tim Deschryver

💻
Eddy Wilson
Eddy Wilson

👀
Ricardo Busquet
Ricardo Busquet

👀
Peter Hozák
Peter Hozák

👀
Marco Moretti
Marco Moretti

💻
Rafael Pedicini
Rafael Pedicini

📖
Michael Peyper
Michael Peyper

💻
HOU Ce
HOU Ce

💻
Ari Perkkiö
Ari Perkkiö

💻 ⚠️
Sebastian Silbermann
Sebastian Silbermann

💻
Nicolas Stepien
Nicolas Stepien

💻
Varun
Varun

📖
Nick McCurdy
Nick McCurdy

💻
Sai Maheshwar
Sai Maheshwar

💻

This project follows the all-contributors specification. Contributions of any kind welcome!

LICENSE

MIT