Programmatic API для обновления файлов package.json
. Обновляет и сохраняет файлы так же, как и NPM CLI обрабатывает их.
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"
// ]
// }
Существует также вспомогательная функция, экспортируемая для открытия файла package.json без дополнительной нормализации или функциональности сохранения.
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
constructor()
Создает новый пустой экземпляр PackageJson
.
async PackageJson.create(path)
Создает пустой package.json
на данном пути. Если кто -то уже существует, он будет перезаписан.
async PackageJson.load(path, opts = {})
Загружает package.json
на данном пути.
opts
: Object
может содержать:create
: Boolean
Если True, новый пакет. JSON будет создан, если его еще не существует. Не будет Clobber Ane существующий пакет. Загружает содержимое файла package.json
, расположенного по адресу ./
:
const PackageJson = require ( '@npmcli/package-json' )
const pkgJson = new PackageJson ( )
await pkgJson . load ( './' )
Бросает ошибку в случае, если файл package.json
отсутствует или имеет недопустимое содержимое.
async PackageJson.load(path)
Статический метод удобства, который возвращает новый экземпляр и загружает содержимое файла package.json
из этого места.
path
: String
, которая указывает на папку, откуда читать package.json
от Загружает содержимое файла package.json
, расположенного по адресу ./
:
const PackageJson = require ( '@npmcli/package-json' )
const pkgJson = await PackageJson . load ( './' )
async PackageJson.normalize()
Предназначен для нормализации файлов package.json в дереве node_modules. Некоторая нормализация света проводится, чтобы убедиться, что она готова к использованию в @npmcli/arborist
path
: String
, которая указывает на папку, откуда читать package.json
отopts
: Object
может содержать:strict
: Boolean
обеспечивает необязательный строгий режим при применении шага normalizeData
steps
: Array
необязательные шаги нормализации, которые будут применены к файлу package.json
, заменив шаги по умолчаниюroot
: Path
Необязательный корень GIT, чтобы предоставить при применении шага gitHead
changes
: Array
, если предоставлено, в этот массив будет добавлено сообщение о каждом изменении, которое было сделано в упаковку, будет добавлено в этот массивasync PackageJson.normalize(path, opts = {})
Удобство статическое, которое вызывает load
перед normalize
вызовом
path
: String
, которая указывает на папку, откуда читать package.json
отopts
: Object
может содержать:strict
: Boolean
обеспечивает необязательный строгий режим при применении шага normalizeData
steps
: Array
необязательные шаги нормализации, которые будут применены к файлу package.json
, заменив шаги по умолчаниюroot
: Path
Необязательный корень GIT, чтобы предоставить при применении шага gitHead
changes
: Array
, если предоставлено, в этот массив будет добавлено сообщение о каждом изменении, которое было сделано в упаковку, будет добавлено в этот массивasync PackageJson.prepare()
Как normalize
но предназначен для подготовки файлов package.json для публикации.
async PackageJson.prepare(path, opts = {})
Удобство статическое, которое вызывает load
перед вызовом prepare
path
: String
, которая указывает на папку, откуда читать package.json
отopts
: Object
может содержать:strict
: Boolean
обеспечивает необязательный строгий режим при применении шага normalizeData
steps
: Array
необязательные шаги нормализации, которые будут применены к файлу package.json
, заменив шаги по умолчаниюroot
: Path
Необязательный корень GIT, чтобы предоставить при применении шага gitHead
changes
: Array
, если предоставлено, в этот массив будет добавлено сообщение о каждом изменении, которое было сделано в упаковку, будет добавлено в этот массивasync PackageJson.fix()
Как normalize
, но предназначен для команды npm pkg fix
.
PackageJson.update(content)
Обновляет content
package.json
.
content
: Object
, содержащий свойства, которые будут обновляться/заменены в файле package.json
. Специальные свойства, такие как dependencies
, devDependencies
, optionalDependencies
, peerDependencies
будут иметь специальную логику для обработки обновления этих вариантов, таких как сортировка и дедупликация.
Добавляет новый скрипт с именем new-script
в свой свойство scripts
package.json
:
const PackageJson = require ( '@npmcli/package-json' )
const pkgJson = await PackageJson . load ( './' )
pkgJson . update ( {
scripts : {
... pkgJson . content . scripts ,
'new-script' : 'echo "Bom dia!"'
}
} )
Примечание. При работе с зависимостями важно предоставить значения для всех известных типов зависимостей, поскольку логика обновления имеет некоторую взаимозависимость между этими свойствами.
Безопасный способ добавить devDependency
и удалить все зависимости от существующего package.json
:
const PackageJson = require ( '@npmcli/package-json' )
const pkgJson = await PackageJson . load ( './' )
pkgJson . update ( {
dependencies : pkgJson . content . dependencies ,
devDependencies : {
... pkgJson . content . devDependencies ,
foo : '^[email protected]' ,
} ,
peerDependencies : { } ,
optionalDependencies : pkgJson . content . optionalDependencies ,
} )
PackageJson.content
Getter, который получает нормализованный Object
, чтение из файла загруженного package.json
.
const PackageJson = require ( '@npmcli/package-json' )
const pkgJson = await PackageJson . load ( './' )
pkgJson . content
// -> {
// name: 'foo',
// version: '1.0.0'
// }
async PackageJson.save()
Сохраняет текущее content
в том же месте, которое используется при вызове load()
.
ISC