moe-scripts
v0.1.29
Published
CLI toolbox for common scripts for JavaScript / TypeScript projects
Downloads
82
Maintainers
Readme
moe-scripts
Description
CLI toolbox for common scripts for JavaScript / TypeScript projects. Inspired by "Tools without config" and kcd-scripts
Synopsis
- Create a project:
npm init my-project
- If TypeScript: add
types
intopackage.json
such as:{ "types": "lib/index" }
- Install:
npm install --save-dev moe-scripts
- Use scripts:
npm run build -- --watch
npm run build:doc
npm run validate
npm run commit
npm run release
- ... etc.
Beware
Build yours using script-helper.
Instead of using this toolbox directly, consider creating yours using script-helper. This library is an example usage for script-helper and not meant for general use.
If it fits you, fork it, because it may change from version to version according to needs of author.
Problem
There are lots of configuration and boilerplate to start and maintain a JavaScript project. It is very tiresome to update libraries and configurations within multiple projects. See "Tools without config"
Solution
This toolkit is provided as an npm module and every configuration for linting, testing, building and more are initialized with a single command and updated simply updating a single npm package.
Configuration
This toolkit exposes a bin called moe-scripts
. All scripts are stored in
lib/scripts
and all configurations are stored either in lib/config
or in root of the library.
Toolkit decide whether a project is a TypeScript project or JavaScript project by looking types
entry in package.json
.
moe-scripts init
is automatically executed after package install and creates configuration files
and entries in package.json
if they do not exist. See init script below.
All scripts can be further refined used arguments related to used tool within that script. It is mostly avoided to provide extra besides original ones of the tool parameters if really not necessary.
Overriding Configuration
Most of the configuration can be extended by native extend mechanism of the related
library. Those which cannot be extended such as .gitignore
or can be extended but
behaves according to location of extended file such as tsconfig.json
are used with
symbolic links pointing to a file in this toolkit.
All of the configuration can be overridden.
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.
ESLint
Create an .eslintrc
with the contents of:
{"extends": "./node_modules/moe-scripts/eslint.js"}
Note: for now, you'll have to include an
.eslintignore
in your project until this eslint issue is resolved.
TSLint
It is extendible via:
{ "extends": "moe-scripts/tslint.json" }
Note: tslint.json
is not a symbolic link in source root. There is no safe place to link it, because lib
is not always available in source and src
is not available in npm package.
Babel
Or, for babel
, a .babelrc
with:
{"presets": ["moe-scripts/babel"]}
Jest
const {jest: jestConfig} = require('moe-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',
},
})
Inspiration
This toolkit is based on and very heavily inspired by kcd-scripts. I'm also grateful for his Tools without config article. I created this as a fork and a separate toolkit instead of contributing it, because he mentioned that, like me, kcd-scripts are a personal project and specific to his needs. (Like this one is specific to my needs).
API
Modules
build
Properties
| Name | Type | Default | Description | | --- | --- | --- | --- | | [--bundle] | | | If present, uses rollup, otherwise TypeScript or Babel. | | [--outDir] | string | "lib" | Output destination for built files. | | [--no-clean] | | | If present, does not clean target directory. | | [--out-dir] | string | "lib" | Output destination for built files. | | [OTHERS] | | | All CLI options used by related binary. (tsc, babel or rollup) |
Example
$ npm run build -- --watch --preserveWatchOutput
$ npx moe-scripts build
$ npx moe-scripts build --watch --preserveWatchOutput
commit
Example
$ npm run commit
$ npx moe-scripts commit
contributors
Example
$ npx moe-scripts contributors
doc
Properties
| Name | Description | | --- | --- | | [OTHERS] | All CLI options used by related binary. (jsdoc2md) |
Example
$ npm run build:doc
$ npx moe-scripts doc
format
Properties
| Name | Description | | --- | --- | | [--no-write] | If provided files are not written to disk. (Default is write to disk). | | [OTHERS] | All CLI options used by related binary. (prettier) |
Example
$ npm run format
$ npx moe-scripts format
info
Example
$ npx moe-scripts info
init
Properties
| Name | Description | | --- | --- | | [...files] | Files to lint | | [--no-cache] | Disables ESLint --cache arg which is added by this script. | | [OTHERS] | All CLI options used by related binary. (TSLint or ESLint) |
Example
$ npx moe-scripts init
lint
Properties
| Name | Description | | --- | --- | | [...files] | Files to lint | | [--no-cache] | Disables ESLint's --cache arg which is added by this script. | | [OTHERS] | All CLI options used by related binary. (TSLint or ESLint) |
Example
$ npm run lint
$ npm run lint my-file.ts -- --config my-config.json
$ npx moe-scripts lint
$ npx moe-scripts lint --no-cache
$ npx moe-scripts lint my-file.ts
precommit
Properties
| Name | Description | | --- | --- | | [OTHERS] | All CLI options used by related binary. (prettier) |
reset
Example
$ npx moe-scripts reset
test
Properties
| Name | Description | | --- | --- | | [--no-watch] | If provided, works once. (Default is watch mode) | | [OTHERS] | All CLI options used by related binary. (jest) |
Example
$ npm run test
$ npx moe-scripts test
travis-after-success
Example
$ npx travis-after-success
validate
Properties
| Name | Description | | --- | --- | | [0] | If provided vomma separated list of npm script names to run. |
Example
$ npm run validate my-custom-validator
$ npx moe-scripts validate
$ npx moe-scripts validate my-custom-validator,second-validator