Gateway
shrinkwrap npm
Checkout sumber OpenClaw menggunakan pnpm-lock.yaml. Paket npm OpenClaw yang dipublikasikan menggunakan npm-shrinkwrap.json, yaitu lockfile dependensi npm yang dapat dipublikasikan, sehingga instalasi paket menggunakan graf dependensi yang telah ditinjau selama rilis.
Mengapa ini penting
Shrinkwrap adalah bukti untuk pohon dependensi yang dikirimkan bersama paket npm: berkas ini memberi tahu npm versi transitif persis yang harus diinstal.
| Berkas | Tempat berlakunya | Artinya |
|---|---|---|
pnpm-lock.yaml |
Checkout sumber OpenClaw | Graf dependensi pengelola |
npm-shrinkwrap.json |
Paket npm yang dipublikasikan | Graf instalasi npm untuk pengguna |
package-lock.json |
Aplikasi npm lokal | Bukan kontrak publikasi OpenClaw |
Untuk rilis OpenClaw, ini berarti:
- paket yang dipublikasikan tidak meminta npm membuat graf dependensi baru saat instalasi;
- perubahan dependensi dapat ditinjau karena tercantum dalam perbedaan lockfile;
- validasi rilis menguji graf yang sama dengan yang akan diinstal pengguna;
- kejutan terkait ukuran paket atau dependensi native muncul sebelum publikasi.
Shrinkwrap bukan sandbox. Shrinkwrap tidak dengan sendirinya menjadikan dependensi aman, dan tidak menggantikan isolasi host, openclaw security audit, asal-usul paket, atau uji smoke instalasi.
OpenClaw adalah gateway, host plugin, perute model, dan runtime agen, sehingga instalasi bawaan memengaruhi waktu mulai, penggunaan disk, pengunduhan paket native, dan paparan rantai pasok. Shrinkwrap memberikan batas yang stabil untuk peninjauan rilis: peninjau dapat melihat pergerakan dependensi transitif, validator menolak penyimpangan lockfile yang tidak diharapkan, dan paket plugin membawa graf dependensinya sendiri yang terkunci alih-alih mengandalkan paket root.
Membuat dan memeriksa
Paket npm root openclaw, paket plugin npm milik OpenClaw (misalnya @openclaw/discord), dan paket workspace yang dapat dipublikasikan seperti @openclaw/ai menyertakan npm-shrinkwrap.json saat dipublikasikan. Dependensi workspace tidak disertakan dalam shrinkwrap root karena dipublikasikan bersama paket root; sebagai gantinya, setiap paket workspace yang dapat dipublikasikan mengunci pohon transitifnya sendiri. Paket plugin yang sesuai juga dapat dipublikasikan dengan bundledDependencies eksplisit, sehingga berkas dependensi runtime disertakan dalam tarball plugin alih-alih hanya mengandalkan resolusi saat instalasi.
# Semua paket yang dikelola shrinkwrap (root + plugin yang dapat dipublikasikan)pnpm deps:shrinkwrap:generatepnpm deps:shrinkwrap:check # Hanya paket rootpnpm deps:shrinkwrap:root:generatepnpm deps:shrinkwrap:root:check # Hanya paket yang terpengaruh oleh kumpulan perubahan saat inipnpm deps:shrinkwrap:changed:generatepnpm deps:shrinkwrap:changed:checkGenerator menyelesaikan format lock npm yang dapat dipublikasikan, tetapi menolak versi paket yang dihasilkan jika belum ada di pnpm-lock.yaml. Hal ini mempertahankan batas peninjauan usia dependensi, override, dan patch pnpm.
Tinjau hal-hal berikut sebagai hal yang sensitif terhadap keamanan:
pnpm-lock.yamlnpm-shrinkwrap.json- muatan dependensi plugin yang dibundel
- setiap perbedaan
package-lock.json
Validator paket OpenClaw mewajibkan shrinkwrap dalam tarball paket root baru dan menolak package-lock.json untuk paket yang dipublikasikan. Jalur publikasi npm plugin memeriksa shrinkwrap lokal plugin, menginstal dependensi yang dibundel secara lokal dalam paket, lalu mengemas atau memublikasikannya.
Memeriksa paket yang dipublikasikan
Paket root:
npm pack openclaw@<version> --json --pack-destination /tmp/openclaw-packtar -tf /tmp/openclaw-pack/openclaw-<version>.tgz | grep '^package/npm-shrinkwrap.json$'Paket plugin:
npm pack @openclaw/discord@<version> --json --pack-destination /tmp/openclaw-plugin-packtar -tf /tmp/openclaw-plugin-pack/openclaw-discord-<version>.tgz | grep '^package/npm-shrinkwrap.json$'tar -tf /tmp/openclaw-plugin-pack/openclaw-discord-<version>.tgz | grep '^package/node_modules/'Latar belakang: npm-shrinkwrap.json.