npm: desativa o script postinstall para o pacote

142

Existe alguma opção npm para desativar o script pós-instalação durante a instalação do pacote? Ou para reescrever qualquer campo do package.json?

farwayer
fonte
A questão é muito clara, mas ... é por acaso esse o seu objetivo final? github.com/zloirock/core-js#postinstall-message ;-)
conny

Respostas:

267

Não é possível desativar apenas postinstallscripts. No entanto, você pode desativar todos os scripts usando:

$ npm install --ignore-scripts

Como delbertooo mencionado nos comentários, isso também desabilita os scripts das dependências.

Gergo Erdosi
fonte
2
THX. É exatamente disso que eu preciso. Onde posso encontrar essas opções? Isso não está descrito em 'npm help install', 'npm help config' e 'npm help scripts'.
farwayer
3
Verifiquei o código diretamente: github.com/npm/npm/blob/master/lib/build.js#L179
Gergo Erdosi
69
Cuidado! A opção --ignore-scriptsdesativa TODOS os scripts - mesmo de suas dependências. Se suas dependências precisarem executar scripts para, por exemplo, instalar alguns binários, elas podem ser interrompidas / incompletas.
delbertooo
7
Então, existe uma técnica para instalar node_modules (e todos os seus scripts), mas ignorar apenas os scripts do pacote principal?
Derrick
3
Não apenas isso, mas --ignore-scriptsa opção de configuração associada (que eu defino globalmente) também significará que npm run startsilenciosamente nada fará e relatará sucesso. Surpreender.
Ash Berlin-Taylor
21

Você também pode ativar as configurações no arquivo de configuração npm.

npm config set ignore-scripts true

Nota: Isso desativará os scripts para todos os pacotes NPM.

RoboMex
fonte
2
Essa deve ser a resposta. Veja a publicação no blog da npm: blog.npmjs.org/post/141702881055/…
Pieter Venter
4

Para fazer isso em sua própria biblioteca, recomendo algo simples 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

instale seu npm com:

your_pkg_skip_postinstall="yes" npm install
Alexander Mills
fonte
1
Obrigado! Isso funciona muito bem se você está apenas tentando desativar seu próprio script, mas não TODOS os scripts em todas as dependências.
Brian Neisler
@BrianNeisler é muito bem-vindo, sempre se sente bem em ajudar outras pessoas. A propósito, acho que colchetes duplos [[]] podem ser melhores que colchetes simples para a maioria dos casos de uso, não tenho certeza.
Alexander Mills
2

Queria desabilitar o script pós-instalação para o meu projeto, mas queria que todos os scripts das dependências do meu projeto fossem executados quando o fiz npm install. Foi isso que acabei fazendo.

  1. Crie um script ./scripts/skip.js
if (process.env.SKIP_BUILD) {
    process.exit(0);
} else {
    process.exit(1);
}
  1. No seu arquivo package.json
 "scripts": {
  ...
  "postinstall": "node ./scripts/skip.js || npm run build",
  ...
 }

agora apenas defina a variável de ambiente SKIP_BUILD = 1 para impedir a criação do seu pacote e suas dependências criarão muito bem

SKIP_BUILD=1 npm install
Atul
fonte