Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/laget-se/paco
Node package development/distribution utility kit
https://github.com/laget-se/paco
npm
Last synced: 19 days ago
JSON representation
Node package development/distribution utility kit
- Host: GitHub
- URL: https://github.com/laget-se/paco
- Owner: laget-se
- License: apache-2.0
- Created: 2015-12-09T22:39:13.000Z (about 9 years ago)
- Default Branch: master
- Last Pushed: 2020-12-23T08:42:53.000Z (about 4 years ago)
- Last Synced: 2024-10-15T04:33:00.460Z (4 months ago)
- Topics: npm
- Language: JavaScript
- Homepage:
- Size: 150 KB
- Stars: 3
- Watchers: 9
- Forks: 0
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- License: LICENSE.md
Awesome Lists containing this project
README
[](https://www.npmjs.org/package/paco)
# paco
**`paco`** is an npm module development and distribution CLI utility, optimized for package libraries.

`paco` aims to make module development easier, especially when working with module libraries (e.g. one repo, many modules). This is addressed by providing the following features:
* Grouping and automation of common tasks into single tasks (e.g. [`paco bump`](#usage) or [`paco release`](#usage))
* Shared, inheritable and overridable [configurations](#pacorc) for all modules in a directory
* Shared npm scripts from parent `package.json` files (e.g. one build script to rule them all)
* Git commit message templates when bumping module versions*For now, paco is mainly designed to be used as a global install, although it'll probably work just as well as a local developement depencency.*
**Table of contents**
* [Installation](#installation)
* [Usage](#usage)
* [Configration with `.pacorc`](#pacorc)
* [Development](#development)
* [Todos](#todos)`npm install -g paco`
```bash
# Lists available commands
paco -h# Show help for a given command
paco -h# Creates a default .pacorc configuration file
paco init# Gets or sets local paco configs
# e.g. `paco config release.pushTags false`
paco config [key] [value]# Runs test command from .pacorc or `npm run test` if defined
paco test# Runs lint command from .pacorc or `npm run lint` if defined
paco lintpaco verify
# -> `paco lint`
# -> `paco test`# Runs all scripts provided in the build config in .pacorc, or `npm run build` if defined
paco buildpaco prepare
# -> `paco verify`
# -> `paco build`paco bump [--tag] [--message="(%name%) Something about the new version: %s"] [--commit] [version]
# -> `npm [--no-git-tag-version] version {version} [-m {message}]`
# -> `git add . && git commit -m {message}` if not --tag and --commitpaco release [version]
# -> `paco test`
# -> `paco lint`
# -> `paco build`
# -> `paco bump {version}`
# -> `npm publish`
# -> `git push` (optional)
# -> `git push --tags` (optional)
```
### Configuration with `.pacorc``.pacorc` is the config file that specifies paco's behavior. It must be placed in the package's root directory next to its `package.json`.
The defaults are:
```js
//
// .pacorc
// - - - - - - - - - - - - - - - - - - - - - - - - -
// Do not include these comments, since the file
// will be parsed as JSON.
//
{
// Whether to search for and execute npm scripts in parent modules up
// the directory tree
"traverse": true,// 1. If false, do nothing
// 2. If a string, will be executed as a command
// 3. If true and package.json includes a lint script, `npm run lint` will be executed
// 4. Skip
"lint": true,// 1. If false, do nothing
// 2. If a string, will be executed as a command
// 3. If true and package.json includes a test script, `npm test` will be executed
// 4. Skip
"test": true,// 1. If false, do nothing
// 2. If an array, runs all strings in the array as commands
"build": [
"%root_paco_path%/node_modules/.bin/babel %package_path%/src --out-dir %package_path%/dist"
],"bump": {
// Whether to create a git tag when bumping the package version
"tag": false,// Whether to create a commit when bumping the package version
"commit": false,// Commit message template for bump commits.
// Supported string variables:
//
// * %s - The new package version
// * %scope% - The package's npm scope (aka owner)
// * %name% - The package's name (without scope)
//
// For example: "%scope% (%name%) - Updates version to %s"
"message": false
},"release": {
// Whether to automatically push changes to the upstream repo
"push": false,// Whether to push git tags to the upstream repo
"pushTags": false
}
}
```#### Sub-package overrides
If you've got nested npm packages, you can place a `.pacorc` inside a child package's root directory and override parent configs.
```bash
# Make paco available globally
cd path/to/paco
npm link# Run babel with a --watch to develop and test instantly
npm run dev
```Pull requests are welcome.
* [x] `paco init` -> Create default `.pacorc`
* [ ] `paco init` -> Wizard for creating a `.pacorc`
* [x] `paco verifiy` -> `paco lint && paco test`
* [x] `paco prepare` -> `paco verify && paco build`
* [x] Support for merging `.pacorc` configs infinitely down the directory tree
* [ ] Support for a defined root `.pacorc` (stop traversed config inheritance at wish)
* [x] Port pure cli to an api which the cli uses
* [ ] Log start and finish info for all commands
* [ ] Skip bump script for first ever publish
* [x] `paco config [key] [value]` -> save config to `.pacorc`
* [x] Option to inherit npm scripts from parent package
* [x] Custom lint, test and build command line calls
* [ ] Test npm publishing before running `release`
* [x] String variables for inserting package name into commit messages
* [ ] Break out publishing and pushing into `paco publish`
* [x] String variables for resolved paths in `.pacorc`
* [x] Allow disabling of tasks
* [ ] Plugin support (presets, sugar etc.)