$ gnpm install @npmcli/package-json
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"
// ]
// }
constructor(path)Creates a new instance of PackageJson.
path: String that points to the folder from where to read the
package.json fromasync PackageJson.load()Loads the package.json at location determined in the path option of
the constructor.
Loads contents of the package.json file located at ./:
const PackageJson = require('@npmcli/package-json')
const pkgJson = new PackageJson('./')
await pkgJson.load()
Throws an error in case the package.json file is missing or has invalid
contents.
async PackageJson.load(path)Convenience static method that returns a new instance and loads the contents of
the package.json file from that location.
path: String that points to the folder from where to read the
package.json fromLoads contents of the package.json file located at ./:
const PackageJson = require('@npmcli/package-json')
const pkgJson = await PackageJson.load('./')
PackageJson.update(content)Updates the contents of the package.json with the content provided.
content: Object containing the properties to be updated/replaced in the
package.json file.Special properties like dependencies, devDependencies,
optionalDependencies, peerDependencies will have special logic to handle
the update of these options, such as deduplications.
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,
})
PackageJson.contentGetter 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'
// }
async PackageJson.save()Saves the current content to the same location used when initializing
this instance.
When you make a living out of reading and writing package.json files, you end
up with quite the amount of packages dedicated to it, the npm cli also
uses:
package.json files the way the npm cli expects it.package.json file. Used by npm@6 and in
npm@7 for publishing.Copyright 2013 - present © cnpmjs.org | Home |