Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/masterodin/publisher
Utility for publishing cleaner packages
https://github.com/masterodin/publisher
babel npm package-json package-management typescript
Last synced: 27 days ago
JSON representation
Utility for publishing cleaner packages
- Host: GitHub
- URL: https://github.com/masterodin/publisher
- Owner: MasterOdin
- License: mit
- Created: 2019-07-11T16:25:53.000Z (over 5 years ago)
- Default Branch: main
- Last Pushed: 2023-03-17T11:01:25.000Z (over 1 year ago)
- Last Synced: 2024-09-22T15:37:37.364Z (about 2 months ago)
- Topics: babel, npm, package-json, package-management, typescript
- Language: TypeScript
- Homepage:
- Size: 641 KB
- Stars: 0
- Watchers: 3
- Forks: 1
- Open Issues: 9
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# @masterodin/publisher
[![Test](https://github.com/MasterOdin/publisher/workflows/Test/badge.svg?branch=master)](https://github.com/MasterOdin/publisher/actions?query=workflow%3ATest+branch%3Amaster)
[![codecov](https://codecov.io/gh/MasterOdin/publisher/branch/master/graph/badge.svg)](https://codecov.io/gh/MasterOdin/publisher)
[![npm (scoped)](https://img.shields.io/npm/v/@masterodin/publisher)](https://npmjs.com/package/@masterodin/publisher)Utility package to handle publishing built packages.
This utility helps to ensure that various steps are run before publishing as well to aim to create a minimal
distributed package, which only contains the compiled code, README, LICENSE, and other necessary files in a
flat structure. This allows one to specify a build directory separate from
the source code (keeping the working repo nice and clean), and that the end-user will see a flat structure for
easier importing.This package currently only supports TypeScript with tsconfig.json files, but aims to add support
to babel.For example, assume you have the following directory structure:
```text
dist/
foo.js
foo.d.ts
index.js
index.d.ts
src/
src_files
package.json
README.md
tsconfig.json
```The "normal" way of doing this is to build your typescript files in `src/` to `dist/` and then specify just `dist/`
in the files directive in `package.json` and that the main should point at `dist/index.js`. While this works fine if
everything the user would want to import is exposed in `./dist/index.js`, this can be very cumbersome and lead to
bloated files. Additionally, if the user wants to import something from `foo.js`, they will have to do something like
`import {bar} from 'your-package/dist/foo'` which is cumbersome at best. This package helps to alleviate these pain
points such that running it will produce the following directory structure:```text
dist/
foo.js
foo.d.ts
index.js
index.d.ts
README.md
package.json
```where `tsc` handles publishing to your `outDir` and `publisher` handles copying all of the other metadata files, using
the `.npmignore` file if it exists, else just copying in `package.json` and `README`, `LICEN[CS]E`, and `CHANGELOG`.From there, it publishes directly within the `dist/` directory, meaning you can minimize the amount of
imports in `index.js` and that consumers can more cleanly import other sources doing
`import {bar} from 'your-package/foo`.Additionally, publisher will help ensure that all steps of the build/publish lifecycle are hit to help ensure
that no steps are missed. By default, it will run:* lint
* build
* testand if any of those fail, the publish is cancelled.
## Installation
```bash
npm install --save-dev @masterodin/publisher
```## Usage
```text
$ publisher --help
Usage: publisher [options]Options:
-V, --version output the version number
--init Initialize publisher for repository
--dryrun, --dry-run Do a dry-run of publisher without publishing
--no-checks Will not run lint or test steps
-h, --help display help for command
```## Configuration
Out of the box, publisher will try and figure out the right thing to do, making it capable to a
a handful of build systems. If it cannot determine things automatically, you can specify the following
within a `.publisherrc.json` file:```javascript
{
"steps": [], // list of steps to run, defaults to lint, run, build
"outDir": "", // directory to publish, it omitted publisher will try to infere this
"publish": true // whether to run npm publish or not at end
"clean": true // whether to delete outDir before running, defaults to true
}
```You may alternatively specify these fields under `publisherrc` key in the `package.json`. Publisher will
first look for its own file, and then look under `package.json`. You cannot combine the CLI option
`--no-checks` with the files._NOTE_: We use `publisherrc` instead of `publisher` as the latter is used by VSCode extensions, and
VSCode will show an error if the field is not defined proper for extensions.## package.json
It's recommended to add `"prepublishOnly": "echo \"Run publisher instead!\" && exit 1"` to the
`scripts` object in the `package.json` to prevent any accidental `npm publish` usage.