npm: deshabilita el script postinstall para el paquete

142

¿Existe alguna opción npm para deshabilitar el script postinstall mientras se instala el paquete? ¿O para reescribir cualquier campo de package.json?

lejano
fuente
La pregunta es muy clara, pero ... ¿es por casualidad este su objetivo final? github.com/zloirock/core-js#postinstall-message ;-)
conny

Respuestas:

267

No es posible deshabilitar solo postinstallscripts. Sin embargo, puede deshabilitar todos los scripts usando:

$ npm install --ignore-scripts

Como delbertooo mencionó en los comentarios, esto también deshabilita los scripts de las dependencias.

Gergo Erdosi
fuente
2
Gracias. Esto es exactamente lo que necesito. ¿Dónde puedo encontrar esas opciones? Esto no se describe en 'npm help install', 'npm help config' y 'npm help scripts'.
Farwayer
3
Verifiqué el código directamente: github.com/npm/npm/blob/master/lib/build.js#L179
Gergo Erdosi
69
¡Precaución! La opción --ignore-scriptsdeshabilita TODOS los scripts, incluso desde sus dependencias. Si sus dependencias necesitan ejecutar scripts para, por ejemplo, instalar algunos archivos binarios, pueden romperse / estar incompletos.
delbertooo
77
Entonces, ¿hay una técnica para instalar node_modules (y todos sus scripts) pero ignorar solo los scripts del paquete principal?
Derrick
3
No solo esto, sino que --ignore-scriptsla opción de configuración asociada (que configuré globalmente) también significará que npm run startsilenciosamente no hará nada e informará el éxito. Asombro.
Ash Berlin-Taylor
21

También puede habilitar la configuración en el archivo de configuración npm.

npm config set ignore-scripts true

Nota: Esto deshabilitará los scripts para todos los paquetes de NPM.

RoboMex
fuente
2
Esta debería ser la respuesta. Ver la publicación del blog de npm: blog.npmjs.org/post/141702881055/…
Pieter Venter
4

Para hacer esto para su propia biblioteca, le recomiendo algo simple como:

#!/usr/bin/env bash

## this is your postinstall.sh script:

set -e;

if [ "$your_pkg_skip_postinstall" == "yes" ]; then
  echo "skipping your package's postinstall routine.";
  exit 0;
fi

luego realice su instalación de npm con:

your_pkg_skip_postinstall="yes" npm install
Alexander Mills
fuente
1
¡Gracias! Esto funciona muy bien si solo está tratando de deshabilitar su propio script pero no TODOS los scripts en todas las dependencias.
Brian Neisler
@BrianNeisler eres muy bienvenido, siempre se siente bien ayudar a otras personas. Por cierto, creo que los corchetes dobles [[]] podrían ser mejores que los corchetes simples para la mayoría de los casos de uso, aunque no estoy seguro.
Alexander Mills
2

Quería deshabilitar el script postinstall para mi proyecto, pero quería que todos los scripts de las dependencias de mi proyecto se ejecutaran cuando lo haga npm install. Esto es lo que terminé haciendo.

  1. Crea un guión ./scripts/skip.js
if (process.env.SKIP_BUILD) {
    process.exit(0);
} else {
    process.exit(1);
}
  1. En su archivo package.json
 "scripts": {
  ...
  "postinstall": "node ./scripts/skip.js || npm run build",
  ...
 }

ahora solo configure la variable de entorno SKIP_BUILD = 1 para evitar que su paquete se compile y sus dependencias se compilen bien

SKIP_BUILD=1 npm install
Atul
fuente