跳到主要內容
版本:9.x

.pnpmfile.cjs

pnpm 讓你可以透過特殊函式(hook)直接連接到安裝程序。hook 可以宣告在名為 .pnpmfile.cjs 的檔案中。

預設情況下,.pnpmfile.cjs 應該位於與鎖定檔相同的目錄中。例如,在具有共用鎖定檔的工作區中,.pnpmfile.cjs 應該位於單一儲存庫的根目錄中。

hook

TL;DR

hook 函式程序用途
hooks.readPackage(pkg, context): pkg在 pnpm 解析相依套件的套件清單後呼叫允許你變更相依套件的 package.json
hooks.afterAllResolved(lockfile, context): lockfile在相依套件已解析後呼叫。允許你變更鎖定檔。

hooks.readPackage(pkg, context): pkg | Promise<pkg>

允許你在解析後和解析前變更依賴項的 package.json。不過,這些變更不會儲存到檔案系統中,然而它們會影響在鎖定檔中解析的內容,因此也會影響安裝的內容。

請注意,如果你已經解析要修改的依賴項,則需要刪除 pnpm-lock.yaml

提示

如果你需要將 package.json 的變更儲存到檔案系統中,則需要使用 pnpm patch 指令和修補 package.json 檔案。例如,如果你想移除依賴項的 bin 欄位,這可能會很有用。

引數

  • pkg - 套件的清單。可能是來自註冊表的回應或 package.json 內容。
  • context - 步驟的內容物件。方法 #log(msg) 允許你使用除錯記錄來執行步驟。

用法

範例 .pnpmfile.cjs(變更依賴項的依賴項)

function readPackage(pkg, context) {
// Override the manifest of foo@1.x after downloading it from the registry
if (pkg.name === 'foo' && pkg.version.startsWith('1.')) {
// Replace bar@x.x.x with bar@2.0.0
pkg.dependencies = {
...pkg.dependencies,
bar: '^2.0.0'
}
context.log('bar@1 => bar@2 in dependencies of foo')
}

// This will change any packages using baz@x.x.x to use baz@1.2.3
if (pkg.dependencies.baz) {
pkg.dependencies.baz = '1.2.3';
}

return pkg
}

module.exports = {
hooks: {
readPackage
}
}

已知限制

透過 readPackage 從依賴項的清單中移除 scripts 欄位並不會阻止 pnpm 建立依賴項。在建立依賴項時,pnpm 會從套件的封存檔中讀取套件的 package.json,而它不會受到掛鉤影響。若要忽略套件的建置,請使用 pnpm.neverBuiltDependencies 欄位。

hooks.afterAllResolved(lockfile, context): lockfile | Promise<lockfile>

允許你在序列化之前變更鎖定檔輸出。

引數

  • lockfile - 序列化到 pnpm-lock.yaml 的鎖定檔解析物件。
  • context - 步驟的內容物件。方法 #log(msg) 允許你使用除錯記錄來執行步驟。

使用範例

.pnpmfile.cjs
function afterAllResolved(lockfile, context) {
// ...
return lockfile
}

module.exports = {
hooks: {
afterAllResolved
}
}

已知限制

沒有限制 - 任何可以使用鎖定檔完成的事情都可以透過此函數修改,您甚至可以擴充鎖定檔的功能。

ignore-pnpmfile

  • 預設值:false
  • 類型:布林值

.pnpmfile.cjs 將會被忽略。當您想要確保在安裝期間不會執行任何腳本時,與 --ignore-scripts 搭配使用會很有用。

pnpmfile

  • 預設值:.pnpmfile.cjs
  • 類型:路徑
  • 範例:.pnpm/.pnpmfile.cjs

本機 pnpmfile 的位置。

global-pnpmfile

  • 預設值:null
  • 類型:路徑
  • 範例:~/.pnpm/global_pnpmfile.cjs

全域 pnpmfile 的位置。在安裝期間,所有專案都會使用全域 pnpmfile。

注意

建議使用本機 pnpmfile。只有在您在非使用 pnpm 作為主要套件管理員的專案上使用 pnpm 時,才使用全域 pnpmfile。