npm 의 패키지는 package.json 에 라이프사이클 스크립트 를 정의할 수 있습니다. 가장 일반적인 스크립트는 아래와 같지만 다른 많은 스크립트 도 있습니다.
preinstall: 패키지가 설치되기 전에 실행postinstall: 패키지가 설치된 후 실행preuninstall: 패키지가 제거되기 전에 실행prepublishOnly: 패키지가 게시되기 전에 실행
이러한 스크립트는 패키지 관리자가 적절한 시점에 읽고 실행할 것으로 예상되는 임의의 셸 명령입니다. 그러나 임의의 스크립트를 실행하는 것은 잠재적인 보안 위험을 나타내므로 Bun 은 다른 npm 클라이언트와 달리 기본적으로 임의의 라이프사이클 스크립트를 실행하지 않습니다.
postinstall
postinstall 스크립트는 특히 중요합니다. 이는 네이티브 Node.js 애드온 으로 구현된 패키지의 플랫폼별 바이너리를 빌드하거나 설치하는 데 널리 사용됩니다. 예를 들어 node-sass 는 Sass 의 네이티브 바이너리를 빌드하기 위해 postinstall 을 사용하는 인기 있는 패키지입니다.
{
"name": "my-app",
"version": "1.0.0",
"dependencies": {
"node-sass": "^6.0.1"
}
}trustedDependencies
Bun 은 임의의 스크립트를 실행하는 대신 "기본 보안" 접근 방식을 사용합니다. 특정 패키지를 허용 목록에 추가할 수 있으며 Bun 은 해당 패키지에 대해 라이프사이클 스크립트를 실행합니다. 특정 패키지에 대해 라이프사이클 스크립트를 허용하도록 Bun 에 알려려면 package.json 의 trustedDependencies 배열에 패키지 이름을 추가합니다.
{
"name": "my-app",
"version": "1.0.0",
"trustedDependencies": ["node-sass"]
}trustedDependencies 에 추가되면 패키지를 설치/재설치합니다. Bun 은 이 필드를 읽고 my-trusted-package 에 대한 라이프사이클 스크립트를 실행합니다.
라이프사이클 스크립트가 있는 상위 500 개 npm 패키지는 기본적으로 허용됩니다. 전체 목록은 여기 에서 확인할 수 있습니다.
--ignore-scripts
모든 패키지에 대해 라이프사이클 스크립트를 비활성화하려면 --ignore-scripts 플래그를 사용합니다.
bun install --ignore-scripts