Programmatic API to update package.json
files. Updates and saves files the
same way the npm cli handles them.
npm install @npmcli/package-json
const PackageJson = require('@npmcli/package-json')
const pkgJson = await PackageJson.load(path)
// $ cat package.json
// {
// "name": "foo",
// "version": "1.0.0",
// "dependencies": {
// "a": "^1.0.0",
// "abbrev": "^1.1.1"
// }
// }
pkgJson.update({
dependencies: {
a: '^1.0.0',
b: '^1.2.3',
},
workspaces: [
'./new-workspace',
],
})
await pkgJson.save()
// $ cat package.json
// {
// "name": "foo",
// "version": "1.0.0",
// "dependencies": {
// "a": "^1.0.0",
// "b": "^1.2.3"
// },
// "workspaces": [
// "./new-workspace"
// ]
// }
There is also a helper function exported for opening a package.json file with no extra normalization or saving functionality.
const { readPackage } = require('@npmcli/package-json/lib/read-package')
const rawData = await readPackage('./package.json')
// rawData will now have the package.json contents with no changes or normalizations
Creates a new empty instance of PackageJson
.
Creates an empty package.json
at the given path. If one already exists
it will be overwritten.
Loads a package.json
at the given path.
-
opts
:Object
can contain:-
create
:Boolean
if true, a new package.json will be created if one does not already exist. Will not clobber ane existing package.json that can not be parsed.
-
Loads contents of a package.json
file located at ./
:
const PackageJson = require('@npmcli/package-json')
const pkgJson = new PackageJson()
await pkgJson.load('./')
Throws an error in case a package.json
file is missing or has invalid contents.
Convenience static method that returns a new instance and loads the contents of a package.json
file from that location.
-
path
:String
that points to the folder from where to read thepackage.json
from
Loads contents of a package.json
file located at ./
:
const PackageJson = require('@npmcli/package-json')
const pkgJson = await PackageJson.load('./')
Intended for normalizing package.json files in a node_modules tree. Some light normalization is done to ensure that it is ready for use in @npmcli/arborist
-
path
:String
that points to the folder from where to read thepackage.json
from -
opts
:Object
can contain:-
strict
:Boolean
enables optional strict mode when applying thenormalizeData
step -
steps
:Array
optional normalization steps that will be applied to thepackage.json
file, replacing the default steps -
root
:Path
optional git root to provide when applying thegitHead
step -
changes
:Array
if provided, a message about each change that was made to the packument will be added to this array
-
Convenience static that calls load
before calling normalize
-
path
:String
that points to the folder from where to read thepackage.json
from -
opts
:Object
can contain:-
strict
:Boolean
enables optional strict mode when applying thenormalizeData
step -
steps
:Array
optional normalization steps that will be applied to thepackage.json
file, replacing the default steps -
root
:Path
optional git root to provide when applying thegitHead
step -
changes
:Array
if provided, a message about each change that was made to the packument will be added to this array
-
Like normalize
but intended for preparing package.json files for publish.
Convenience static that calls load
before calling prepare
-
path
:String
that points to the folder from where to read thepackage.json
from -
opts
:Object
can contain:-
strict
:Boolean
enables optional strict mode when applying thenormalizeData
step -
steps
:Array
optional normalization steps that will be applied to thepackage.json
file, replacing the default steps -
root
:Path
optional git root to provide when applying thegitHead
step -
changes
:Array
if provided, a message about each change that was made to the packument will be added to this array
-
Like normalize
but intended for the npm pkg fix
command.
Updates the contents of a package.json
with the content
provided.
-
content
:Object
containing the properties to be updated/replaced in thepackage.json
file.
Special properties like dependencies
, devDependencies
,
optionalDependencies
, peerDependencies
will have special logic to handle
the update of these options, such as sorting and deduplication.
Adds a new script named new-script
to your package.json
scripts
property:
const PackageJson = require('@npmcli/package-json')
const pkgJson = await PackageJson.load('./')
pkgJson.update({
scripts: {
...pkgJson.content.scripts,
'new-script': 'echo "Bom dia!"'
}
})
NOTE: When working with dependencies, it's important to provide values for all known dependency types as the update logic has some interdependence in between these properties.
A safe way to add a devDependency
AND remove all peer dependencies of an
existing package.json
:
const PackageJson = require('@npmcli/package-json')
const pkgJson = await PackageJson.load('./')
pkgJson.update({
dependencies: pkgJson.content.dependencies,
devDependencies: {
...pkgJson.content.devDependencies,
foo: '^foo@1.0.0',
},
peerDependencies: {},
optionalDependencies: pkgJson.content.optionalDependencies,
})
Getter that retrieves the normalized Object
read from the loaded
package.json
file.
const PackageJson = require('@npmcli/package-json')
const pkgJson = await PackageJson.load('./')
pkgJson.content
// -> {
// name: 'foo',
// version: '1.0.0'
// }
Saves the current content
to the same location used when calling
load()
.