Package Exports
- read-package-json-fast
- read-package-json-fast/lib/index.js
This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (read-package-json-fast) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.
Readme
read-package-json-fast
Like read-package-json
, but faster and
more accepting of "missing" data.
This is only suitable for reading package.json files in a node_modules tree, since it doesn't do the various cleanups, normalization, and warnings that are beneficial at the root level in a package being published.
USAGE
const rpj = require('read-package-json-fast')
// typical promisey type API
rpj('/path/to/package.json')
.then(data => ...)
.catch(er => ...)
// or just normalize a package manifest
const normalized = rpj.normalize(packageJsonObject)
Errors raised from parsing will use
json-parse-even-better-errors
,
so they'll be of type JSONParseError
and have a code: 'EJSONPARSE'
property. Errors will also always have a path
member referring to the
path originally passed into the function.
Indentation
To preserve indentation when the file is saved back to disk, use
data[Symbol.for('indent')]
as the third argument to JSON.stringify
, and
if you want to preserve windows \r\n
newlines, replace the \n
chars in
the string with data[Symbol.for('newline')]
.
For example:
const data = await readPackageJsonFast('./package.json')
const indent = Symbol.for('indent')
const newline = Symbol.for('newline')
// .. do some stuff to the data ..
const string = JSON.stringify(data, null, data[indent]) + '\n'
const eolFixed = data[newline] === '\n' ? string
: string.replace(/\n/g, data[newline])
await writeFile('./package.json', eolFixed)
Indentation is determined by looking at the whitespace between the initial
{
and the first "
that follows it. If you have lots of weird
inconsistent indentation, then it won't track that or give you any way to
preserve it. Whether this is a bug or a feature is debatable ;)
WHAT THIS MODULE DOES
- Parse JSON
- Normalize
bundledDependencies
/bundleDependencies
naming to justbundleDependencies
(without the extrad
) - Handle
true
,false
, or object values passed tobundleDependencies
- Normalize
funding: <string>
tofunding: { url: <string> }
- Remove any
scripts
members that are not a string value. - Normalize a string
bin
member to{ [name]: bin }
. - Fold
optionalDependencies
intodependencies
. - Set the
_id
property if name and version are set. (This is load-bearing in a few places within the npm CLI.)
WHAT THIS MODULE DOES NOT DO
- Warn about invalid/missing name, version, repository, etc.
- Extract a description from the
README.md
file, or attach the readme to the parsed data object. - Read the
HEAD
value out of the.git
folder. - Warn about potentially typo'ed scripts (eg,
tset
instead oftest
) - Check to make sure that all the files in the
files
field exist and are valid files. - Fix bundleDependencies that are not listed in
dependencies
. - Fix
dependencies
fields that are not strictly objects of string values. - Anything involving the
directories
field (ie, bins, mans, and so on).