A maioria dos projetos em que trabalho atualmente contém um arquivo package.json para gerenciar as dependências. O senhor acha que, a essa altura, eu já estaria acostumado a ver o arquivo package.json quando eu fizesse um git pull e isso acionava algo em minha cabeça para executar npm install para garantir que eu tivesse as dependências mais recentes instaladas, mas, de alguma forma, continuo esquecendo de fazer isso. Em vez disso, vejo npm start resultando em erros, o que me leva a ficar com cara de palma após palma. Provavelmente é hora de automatizar essa tarefa.


Uma rápida pesquisa no Google me levou a um série de gists para usar um git hook para acionar o npm install se um arquivo package.json tiver sido atualizado. Coloque um post-merge no seu arquivo .git/hooks com o seguinte conteúdo:



#/usr/bin/env bash
# MIT © Sindre Sorhus - sindresorhus.com

# git hook to run a command after `git pull` if a specified file was changed
# Run `chmod +x post-merge` to make it executable then put it into `.git/hooks/`.

changed_files="$(git diff-tree -r --name-only --no-commit-id ORIG_HEAD HEAD)"

check_run() {
	echo "$changed_files" | grep --quiet "$1" && eval "$2"
}

# Example usage
# In this example it's used to run `npm install` if package.json changed and `bower install` if `bower.json` changed.
check_run package.json "npm install"
check_run bower.json "bower install"


A leitura dos comentários no gist mostra uma série de outros acionadores condicionais úteis, como o composer installdo PHP, pré-processamento de arquivos .sass e outros.



# Updating git submodules
check_run .gitmodules "git submodule init && git submodule update"

# Installing composer dependencies
check_run composer.json "composer install"

# For those who use gulp
check_run web/assets "gulp --production"


Esse gancho será incrivelmente útil para mim daqui para frente – não precisarei mais me lembrar das etapas que preciso executar a cada puxada!

  • Eu’sou um impostor

    Essa é a coisa mais difícil que já tive de escrever, muito menos admitir para mim mesmo. Já escrevi cartas de demissão de empregos que amava, terminei relacionamentos, fracassei em uma série de tarefas e me decepcionei em minha vida. Todos esses sentimentos foram muito…

  • Animação de dobragem CSS 3D
  • Demonstrações favoritas de Chris Coyier’s CodePen

    David me perguntou se eu gostaria de fazer um post como convidado, escolhendo algumas das minhas canetas favoritas do CodePen. É uma tarefa difícil! São tantas! Mas consegui escolher algumas que me surpreenderam nos últimos meses. Se o senhor…

  • Crie um elemento de formulário de seleção compatível com NoScript com um evento onChange