[[npm]]、[[pnpm]]、[[Deno]]、[[Bun]]で[[ライフサイクルスクリプト (npm)|ライフサイクルスクリプト]]が実行されているかどうかを確認する方法について。 ## サンプルプロジェクト ```  . ├──  package.json ├──  pnpm-workspace.yaml └──  testpkg └──  package.json ``` - `pnpm-workspace.yaml` は[[pnpm]]で利用 `package.json` ```json { "scripts": { "postinstall": "echo '[root] postinstall'" }, "dependencies": { "testpkg": "file:testpkg" }, "trustedDependencies": [ "testpkg" ] } ``` - `trustedDependencies` は [[Bun]]で利用 `testpkg/package.json` ```json { "name": "testpkg", "scripts": { "postinstall": "echo '[testpkg] postinstall'" } } ``` ## [[npm]] ### ライフサイクルスクリプト有効 ```console $ npm config set ignore-scripts false $ npm i --foreground-scripts > postinstall > echo '[testpkg] postinstall' [testpkg] postinstall > postinstall > echo '[root] postinstall' [root] postinstall up to date, audited 3 packages in 102ms found 0 vulnerabilities ``` ### ライフサイクルスクリプト無効 ```console $ npm config set ignore-scripts true $ npm i --foreground-scripts up to date, audited 3 packages in 85ms found 0 vulnerabilities ``` ## [[pnpm]] プロジェクト配下の[[pnpm-workspace.yaml]] に [[allowBuilds (pnpm)|allowBuilds]] の追加が必要。 ```yaml allowBuilds: testpkg: true ``` ### ライフサイクルスクリプト有効 ```console $ pnpm config set ignore-scripts false $ rm -rf node_modules pnpm-lock.yaml $ pnpm i --reporter append-only Progress: resolved 1, reused 0, downloaded 0, added 0 Packages: +1 + Progress: resolved 1, reused 1, downloaded 0, added 1, done .../node_modules/testpkg postinstall$ echo '[testpkg] postinstall' .../node_modules/testpkg postinstall: [testpkg] postinstall .../node_modules/testpkg postinstall: Done . postinstall$ echo '[root] postinstall' . postinstall: [root] postinstall . postinstall: Done dependencies: + testpkg file:testpkg Done in 91ms using pnpm v11.0.0 ``` ### ライフサイクルスクリプト無効 ```console $ pnpm config set ignore-scripts true $ rm -rf node_modules pnpm-lock.yaml $ pnpm i --reporter append-only Progress: resolved 1, reused 0, downloaded 0, added 0 Packages: +1 + Progress: resolved 1, reused 1, downloaded 0, added 1, done dependencies: + testpkg file:testpkg Done in 72ms using pnpm v11.0.0 ``` ## [[Bun]] ### ライフサイクルスクリプト有効 [[bunfig.toml]]に設定。 ```toml [install] ignoreScripts = false ``` ```console $ rm -rf bun.lock node_modules && bun i --verbose bun install v1.3.13 (bf2e2cec) - "testpkg": "file:testpkg" - testpkg@testpkg Clean lockfile: 2 packages - 2 packages in 28.4us [Scripts] Starting scripts for "testpkg" ⚙️ testpkg [1/1] [testpkg] postinstall [Scripts] Finished scripts for "testpkg" -- BEGIN SHA512/256(`${alphabetize(name)}@${order(version)}`) -- testpkg@testpkg -- BEGIN SCRIPTS -- postinstall: echo '[root] postinstall' -- END SCRIPTS -- -- END HASH-- [Scripts] Starting scripts for "" $ echo '[root] postinstall' [root] postinstall [Scripts] Finished scripts for "" + testpkg@testpkg 1 package installed [8.00ms] ``` ### ライフサイクルスクリプト無効 [[bunfig.toml]]に設定。 ```toml [install] ignoreScripts = true ``` ```console $ rm -rf bun.lock node_modules && bun i --verbose bun install v1.3.13 (bf2e2cec) - "testpkg": "file:testpkg" - testpkg@testpkg Clean lockfile: 2 packages - 2 packages in 29.8us -- BEGIN SHA512/256(`${alphabetize(name)}@${order(version)}`) -- testpkg@testpkg -- BEGIN SCRIPTS -- postinstall: echo '[root] postinstall' -- END SCRIPTS -- -- END HASH-- + testpkg@testpkg 1 package installed [4.00ms] ``` ## [[Deno]] [[Deno]]の場合はローカルパッケージがうまく認識しなかったので、1からプロジェクトを構築する。空ディレクトリでOK。 ### ライフサイクルスクリプト有効 `deno.json` ```json { "nodeModulesDir": "auto", "imports": { "sharp": "npm:sharp@^0.34.5" }, "allowScripts": ["npm:@prisma/[email protected]", "npm:[email protected]"] } ``` - [[allowScripts (Deno)|allowScripts]]は[[deno approve-scripts]]で実行するのを推奨 - バージョンがexactなので安心 ```console $ rm -rf node_modules deno.lock && deno i Installed 94 packages in 348ms Reused 94 packages from cache ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Downloaded 0 packages from JSR Downloaded 0 packages from npm Dependencies: + npm:prisma 7.8.0 ``` これだと本当に実行されているのかは分からないが、warningがないので少なくとも無効になっていないことは分かる。ちゃんと確認したければ `deno i --log-level=debug` を使う。 ### ライフサイクルスクリプト無効 `deno.json` ```json { "nodeModulesDir": "auto", "imports": { "prisma": "npm:prisma@^7.8.0" } } ``` ```console $ rm -rf node_modules deno.lock && deno i Add npm:[email protected] Installed 94 packages in 5s Reused 16 packages from cache ++++++++++++++++ Downloaded 0 packages from JSR Downloaded 78 packages from npm ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Dependencies: + npm:prisma 7.8.0 ╭ Warning │ │ Ignored build scripts for packages: │ npm:@prisma/[email protected] │ npm:[email protected] │ │ Run "deno approve-scripts" to run build scripts. ```