jmd-scripts 🛠📦
CLI toolbox for common scripts for my projects
!Build Statusbuild-badgebuild !Code Coveragecoverage-badgecoverage !versionversion-badgepackage !downloadsdownloads-badgenpmtrends !MIT Licenselicense-badgelicense !All Contributorsall-contributors-badge !PRs Welcomeprs-badgeprs !Code of Conductcoc-badgecoc
The problem
I want to make it easier to maintain my 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
- Overriding Config - TypeScript Support - 🐛 Bugs - 💡 Feature Requests
Installation
This module is distributed via npmnpm which is bundled with nodenode and should be installed as one of your project'sdevDependencies
:npm install --save-dev jmd-scripts
Usage
This is a CLI and exposes a bin calledjmd-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 jmd-scripts
.Overriding Config
Unlikereact-scripts
, jmd-scripts
allows you to specify your own
configuration for things and have that plug directly into the way things work
with jmd-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
jmd-scripts
will use that instead of it's own internal config. In addition,
jmd-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/jmd-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": ["jmd-scripts/babel"]}
Or, for
jest
:const { jest: jestConfig } = require('jmd-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: jmd-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 thetsconfig.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 jmd-scripts
.
If you customized your .babelrc
-file you might need to manually add
@babel/preset-typescript
to the presets
-section.jmd-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 jmd-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 byreact-scripts
and heavily borrows code from kcd-scripts
.Other Solutions
I'm not aware of any, if you are please make a pull requestprs and add it here! Again, this is a very specific-to-me solution.Issues
Looking to contribute? Look for the Good First Issuegood-first-issue label.🐛 Bugs
Please file an issue for bugs, missing documentation, or unexpected behavior.See Bugsbugs
💡 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 Requestsrequests
Contributors ✨
Thanks goes to these people (emoji keyemojis):|
Jeff Detmer
💻 📖 🚇') | | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: |
This project follows the all-contributorsall-contributors specification. Contributions of any kind welcome!