@jcoreio/ts
v1.1.5
Published
build tools and package scripts for npm packages
Downloads
3
Readme
@jcoreio/ts
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['@jcoreio/ts'].mochaArgs
in yourpackage.json
. - You want to publish the package via
semantic-release
- You're using CircleCI
Usage
yarn add --dev @jcoreio/ts
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 @jcoreio/ts
.
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 @jcoreio/ts
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",
"@jcoreio/ts": {
"mochaArgs": ["test/index.js"]
}
}
babel.config.js
You can pass a second argument to the base babel config like this:
/* eslint-env node */
module.exports = function (api) {
return require(`@jcoreio/ts/babel.config.js`)(api, {
envPresetOptions: {
target: {node: 12},
forceAllTransforms: false,
},
babelRuntime: false,
})
}
It accepts the following options:
envPresetOptions
: overrides options for@babel/preset-env
babelRuntime
: iffalse
, won't use@babel/plugin-transform-runtime
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 valuemodule
from rootpackage.json
or auto-generated valueexports
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