編程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