@jedwards1211/js-react-toolchain
This is my personal skeleton for creating an npm package with JS(/flow) source code.
Assumptions
- All source files are in
src
- Test files are in
test
. You can override this by specifying options for mocha in['@jedwards1211/js-react-toolchain'].mochaArgs
in yourpackage.json
. - You want to publish the package via
semantic-release
- You're using CircleCI
Usage
yarn add --dev @jedwards1211/js-react-toolchain
yarn toolchain bootstrap
If you want to more aggressively replace existing configuration, use yarn toolchain bootstrap --hard
.
The bootstrap script will modify your package.json, .gitignore, .circleci/config.yml and generate .babelrc.js, .eslintrc.js, and .prettierrc.js that are just proxies for the config in @jedwards1211/js-react-toolchain
.
Instead of running scripts from your package.json
, you can run them with the yarn toolchain
command (or yarn tc
), for example yarn toolchain lint
. Run yarn toolchain
by itself
to see all of the available commands.
Customization
You can customize the config files created by the bootstrap process:
babel.config.js
commitlint.config.js
husky.config.js
lint-staged.config.js
nyc.config.js
prettier.config.js
You can also set the following options in the @jedwards1211/js-react-toolchain
property in your package.json
:
-
mochaArgs
: an array of additional arguments to mocha (default: ["test/**.js"], or.ts
/.tsx
depending on the toolchain) -
noBabelRuntime
: iftrue
, disables@babel/plugin-transform-flow-runtime
For example:
{
"name": "foo",
"@jedwards1211/js-react-toolchain": {
"mochaArgs": ["test/index.js"]
}
}
Package Publishing
Files to publish are output/copied into the dist
folder and then published from there. This includes a derived
package.json
with various development-only fields removed and automatically-generated main
, module
, and exports
fields added.
The toolchain will do the following for JS (similar for TS):
- Transpile
src/**.js
todist/**.js
(CommonJS modules) - Transpile
src/**.js
todist/**.mjs
(ES modules) - Copy
src/**.js
todist/**.js.flow
- Copy
src/**.js.flow
todist
- Copy
src/**.d.ts
todist
- Copy
*.md
todist
- Copy
package.json
todist
with modifications:-
main
from rootpackage.json
or auto-generated value -
module
from rootpackage.json
or auto-generated value -
exports
from rootpackage.json
or auto-generated value -
@babel/runtime
will be added or removed fromdependencies
depending on whether any output code requires it - Removed keys:
config
devDependencies
files
husky
lint-staged
nyc
scripts.prepublishOnly
renovate
-