Skip to content

hildjj/package-extract

Repository files navigation

package-extract

Let's say you would like to extract multiple values from your package.json file into an ES6 module that you can easily import. You might want access to the version, the package name, the homepage URL, etc.

You could use import.meta.url to find the file, read it, JSON parse it, and extract the needed bits. Now you'd like to use your code from the web, and all of that falls apart. Not only do you have to bundle the whole package.json file, exposing information that you might not want to make available to web users, but you also have to figure out how to get the readFile bits to do the right thing.

Instead, use package-extract.

Install

npm install -D package-extract

Run

npx package-extract -o lib/package.js name version homepage

Note that you can extract fields that have structure, like scripts.

It is most convenient to run this script when you run npm version. To do so, add this to your package.json:

{
  "scripts": {
    "version": "package-extract && git add package.js"
  }
}

Use

import {name, version, homepage} from './package.js'

Example output

// Generated by package-extract v0.0.0
// Do not modify by hand.

export const name = 'package-extract'
export const version = '0.0.0'
export const homepage = 'https://github.com/hildjj/package-extract'

Command line options

Usage: package-extract [options] [fields...]

Arguments:
  fields                   fields to extract from package file (default:
                           ["version"])

Options:
  -d, --double             use double quotes
  -i, --indent <number>    number of spaces to indent. -1 for tab. 0 for no
                           newlines. (default: 2)
  -o, --output <filename>  name of output file, relative to package.json.  Use
                           "-" for stdout. (default: "package.js")
  -p, --package            package file to extract from, found from cwd,
                           searching up
  -s, --semi               add semicolons to the end of each variable
  --startDir <dir>         start looking from this directory, toward the root
                           (default: process.cwd())
  -t, --trailing           Add trailing commas
  -V, --version            output the version number
  -h, --help               display help for command

API

import {packageExtract} from 'package-extract'

// All options are optional, have the same defaults as the CLI.
await packageExtract({
  double: false,
  indent: 2,
  output: 'package.js',
  package: 'package.json',
  semi: false,
  startDir: process.cwd(),
  trailing: false
}, ['version', 'name'])

Other tools

Why not use?

  • genversion: Doesn't extract fields other than version.
  • package-json-versionify: Doesn't extract fields other than version, only works in a browserify setup. Doesn't support ES6.
  • browserify-versionify: Doesn't extract fields other than version, only works in a browserify setup.

Tests codecov

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Sponsor this project

 

Packages

No packages published