2 manuais sobre o gulp dizem que eu preciso instalar o gulp primeiro globalmente (com sinalizador -g) e depois mais uma vez localmente. Por que eu preciso disso?
2 manuais sobre o gulp dizem que eu preciso instalar o gulp primeiro globalmente (com sinalizador -g) e depois mais uma vez localmente. Por que eu preciso disso?
Respostas:
Ao instalar uma ferramenta globalmente, ela deve ser usada por um usuário como um utilitário de linha de comando em qualquer lugar, inclusive fora dos projetos de nós. As instalações globais para um projeto de nó são ruins porque dificultam a implantação.
O npx
utilitário que acompanha o pacote npm
5.2
resolve esse problema. Com ele, você pode chamar utilitários instalados localmente, como utilitários instalados globalmente (mas você deve iniciar o comando npx
). Por exemplo, se você desejar chamar um instalado localmente eslint
, poderá:
npx eslint .
Quando usado em um script
campo do seu package.json, npm
procura node_modules
a ferramenta e também os módulos instalados globalmente, para que a instalação local seja suficiente.
Então, se você está satisfeito com (no seu package.json):
"devDependencies": {
"gulp": "3.5.2"
}
"scripts": {
"test": "gulp test"
}
etc. e executando com npm run test
isso, você não precisa da instalação global.
Ambos os métodos são úteis para configurar as pessoas com o seu projeto, uma vez que sudo
não é necessário. Isso também significa que gulp
será atualizado quando a versão for lançada no package.json, para que todos usem a mesma versão do gulp ao desenvolver com o seu projeto.
Parece que o gulp tem um comportamento incomum quando usado globalmente. Quando usado como uma instalação global, o gulp procura um gulp instalado localmente para passar o controle. Portanto, uma instalação global gulp requer uma instalação local gulp para funcionar. A resposta acima ainda permanece. As instalações locais são sempre preferíveis às instalações globais.
./node_modules/.bin/gulp
.
gulp
e, coffee
portanto, os comandos funcionam na raiz do projeto do nó (por exemplo alias gulp="node_modules/.bin/gulp"
). Dessa forma, os comandos são fáceis de usar, se necessário, e os conflitos de versão global / local não ocorrem.
gulp
, ele me dá a seguinte mensagem de erro Local gulp not found in ...
. Tanto quanto eu entendo, ele deve primeiro examinar os node_modules locais e, se não for encontrado, deve procurar os módulos instalados globalmente, não é? Obrigado!
TLDR; Aqui está o porquê :
A razão pela qual isso funciona é porque você
gulp
tenta executá-logulpfile.js
usando sua versão instalada localmentegulp
, veja aqui . Daí a razão para uma instalação global e local do gulp.
Essencialmente, quando você instala gulp
localmente, o script não está no seu PATH
e, portanto, você não pode apenas digitar gulp
e esperar que o shell encontre o comando. Ao instalá-lo globalmente, o gulp
script entra no seu PATH
arquivo porque o node/bin/
diretório global provavelmente está no seu caminho.
Porém, para respeitar suas dependências locais, gulp
use sua própria versão instalada localmente para executar o gulpfile.js
.
gulp
pacote instalado globalmente é necessário para colocar node_modules/.bin/gulp
no caminho. O armazenamento é barato, mas jogar fora o MB para simular um link simbólico é pura negligência da IMO.
Você pode vincular o gulp
localmente instalado globalmente ao
npm link gulp
npm link
.
A pergunta " Por que precisamos instalar o gulp global e localmente? " Pode ser dividida nas duas perguntas a seguir:
Por que preciso instalar o gulp localmente se já o instalei globalmente?
Por que preciso instalar o gulp globalmente se já o instalei localmente?
Vários outros forneceram excelentes respostas para essas perguntas isoladamente, mas achei que seria benéfico consolidar as informações em uma resposta unificada.
Por que preciso instalar o gulp localmente se já o instalei globalmente?
A lógica para instalar o gulp localmente é composta por vários motivos:
Por que preciso instalar o gulp globalmente se já o instalei localmente?
Para evitar a instalação local, você pode usar npm link [package]
, mas o comando link e o install --global
comando parecem não suportar o--save-dev
opção, o que significa que não parece haver uma maneira fácil de instalar o gulp globalmente e, em seguida, adicionar facilmente qualquer versão que seja seu arquivo package.json local.
Por fim, acredito que faz mais sentido ter a opção de usar módulos globais para evitar a duplicação da instalação de ferramentas comuns em todos os seus projetos, especialmente no caso de ferramentas de desenvolvimento como grunt, gulp, jshint etc. parece que você acaba lutando um pouco com as ferramentas quando vai contra a corrente.
Tecnicamente, você não precisa instalá-lo globalmente se a node_modules
pasta na sua instalação local estiver no seuPATH
. Geralmente isso não é uma boa ideia.
Alternativamente, se houver npm test
referências gulp
, basta digitar npm test
e ele executará o gole local.
Eu nunca instalei o gulp globalmente - acho que é uma forma ruim.
Não tenho certeza se nosso problema estava diretamente relacionado à instalação do gulp apenas localmente. Mas tivemos que instalar um monte de dependências por conta própria. Isso levou a um pacote.json "enorme" e não temos certeza se é realmente uma ótima idéia instalar o gulp apenas localmente. Tivemos que fazer isso por causa do nosso ambiente de construção. Mas eu não recomendaria instalar o gulp não globalmente se não for absolutamente necessário. Enfrentamos problemas semelhantes aos descritos na seguinte postagem no blog
Nenhum desses problemas surge para nenhum de nossos desenvolvedores em suas máquinas locais, porque todos eles instalaram o gulp globalmente. No sistema de compilação, tivemos os problemas descritos. Se alguém estiver interessado, eu poderia mergulhar mais fundo nesta questão. Mas agora eu só queria mencionar que não é um caminho fácil instalar o gulp apenas localmente.
Só porque eu não vi aqui, se você estiver no MacOS ou Linux, sugiro que você adicione isso ao seu PATH (no seu bashrc etc):
node_modules/.bin
Com essa entrada de caminho relativa, se você estiver sentado na pasta raiz de qualquer projeto de nó, poderá executar qualquer ferramenta de linha de comando (eslint, gulp, etc. etc.) sem se preocupar com "instalações globais" ou npm run
etc.
Depois disso, nunca instalei um módulo globalmente.