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?
javascript
gulp
Stepan Suvorov
fonte
fonte
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.
npm 5.2+
O
npx
utilitário que acompanha o pacotenpm
5.2
resolve esse problema. Com ele, você pode chamar utilitários instalados localmente, como utilitários instalados globalmente (mas você deve iniciar o comandonpx
). Por exemplo, se você desejar chamar um instalado localmenteeslint
, poderá:npm <5,2
Quando usado em um
script
campo do seu package.json,npm
procuranode_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):
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 quegulp
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.Termo aditivo:
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.
fonte
./node_modules/.bin/gulp
.gulp
e,coffee
portanto, os comandos funcionam na raiz do projeto do nó (por exemploalias 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 erroLocal 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ê :
Essencialmente, quando você instala
gulp
localmente, o script não está no seuPATH
e, portanto, você não pode apenas digitargulp
e esperar que o shell encontre o comando. Ao instalá-lo globalmente, ogulp
script entra no seuPATH
arquivo porque onode/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 ogulpfile.js
.fonte
gulp
pacote instalado globalmente é necessário para colocarnode_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 aofonte
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 oinstall --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.
fonte
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ênciasgulp
, basta digitarnpm test
e ele executará o gole local.Eu nunca instalei o gulp globalmente - acho que é uma forma ruim.
fonte
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.
fonte
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):
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.
fonte