[[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.
```