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 npxutilitário que acompanha o pacote npm 5.2resolve 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 scriptcampo do seu package.json, npmprocura node_modulesa 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 testisso, 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 sudonão é necessário. Isso também significa que gulpserá 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.
gulpe, coffeeportanto, 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ê
gulptenta executá-logulpfile.jsusando sua versão instalada localmentegulp, veja aqui . Daí a razão para uma instalação global e local do gulp.
Essencialmente, quando você instala gulplocalmente, o script não está no seu PATHe, portanto, você não pode apenas digitar gulpe esperar que o shell encontre o comando. Ao instalá-lo globalmente, o gulpscript entra no seu PATHarquivo porque o node/bin/diretório global provavelmente está no seu caminho.
Porém, para respeitar suas dependências locais, gulpuse sua própria versão instalada localmente para executar o gulpfile.js.
gulppacote instalado globalmente é necessário para colocar node_modules/.bin/gulpno caminho. O armazenamento é barato, mas jogar fora o MB para simular um link simbólico é pura negligência da IMO.
Você pode vincular o gulplocalmente 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 --globalcomando 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_modulespasta na sua instalação local estiver no seuPATH . Geralmente isso não é uma boa ideia.
Alternativamente, se houver npm testreferências gulp, basta digitar npm teste 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 runetc.
Depois disso, nunca instalei um módulo globalmente.