编程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"
// ]
// }
还有一个用于打开包装的助手功能。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。加载位于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()
旨在用于标准化软件包。进行了一些光标准化,以确保它可以在@npmcli/arborist
中使用
path
: String
指向文件夹的字符串从哪里读取package.json
opts
: Object
可以包含:strict
: Boolean
在应用normalizeData
步骤时启用可选的严格模式steps
:将应用于package.json
文件的Array
可选标准化步骤,替换默认步骤root
: Path
可选的git root,在应用gitHead
步骤时提供changes
: Array
,如果提供,将添加有关包装的每个更改的消息,将添加到此数组中async PackageJson.normalize(path, opts = {})
便利normalize
在呼叫之前调用load
path
: String
指向文件夹的字符串从哪里读取package.json
opts
: Object
可以包含:strict
: Boolean
在应用normalizeData
步骤时启用可选的严格模式steps
:将应用于package.json
文件的Array
可选标准化步骤,替换默认步骤root
: Path
可选的git root,在应用gitHead
步骤时提供changes
: Array
,如果提供,将添加有关包装的每个更改的消息,将添加到此数组中async PackageJson.prepare()
就像normalize
一样,但打算准备准备包的封装文件。
async PackageJson.prepare(path, opts = {})
便利静电在致电prepare
之前调用load
path
: String
指向文件夹的字符串从哪里读取package.json
opts
: Object
可以包含:strict
: Boolean
在应用normalizeData
步骤时启用可选的严格模式steps
:将应用于package.json
文件的Array
可选标准化步骤,替换默认步骤root
: Path
可选的git root,在应用gitHead
步骤时提供changes
: Array
,如果提供,将添加有关包装的每个更改的消息,将添加到此数组中async PackageJson.fix()
像normalize
一样,但旨在用于npm pkg fix
命令。
PackageJson.update(content)
更新包含package.json
的内容的content
。
content
:包含要更新/ package.json
的属性的Object
。特殊属性,例如dependencies
, devDependencies
, optionalDependencies
peerDependencies
,将具有特殊逻辑来处理这些选项的更新,例如分类和重复数据删除。
在您的package.json
中添加一个名为new-script
的新脚本。JSON scripts
属性:
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
从已加载的package.json
文件中检索归一化Object
的Getter。
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