Back-End

12 mai, 2016

Chega de pacotes NPM globais – Parte 02

Publicidade

Em um artigo anterior que escrevi no ano passado, eu falei sobre eliminar dependências do projeto que precisavam ser instaladas globalmente, como Grunt, Gulp, Browserify, Webpack etc. Eu não discuti para eliminar esses pacotes, apenas substituindo a flag -g por –save ou –save-dev quando eles são instalados com npm install e, em seguida, usar scripts npm para executar os binários. Bem, há mais…

Outra solução

Esse problema tem orbitado em minha cabeça ultimamente, tanto que foi suficiente para me convencer a escrever mais textos sobre esse assunto. O primeiro foi ao ar em 04 de setembro no Sitepoint e é chamado How to Solve the Global npm Module Dependency Problem, e o segundo foi publicado apenas no Smashing Magazine como The Issue With Global Node Packages.

Esses dois artigos tinham algo que a parte 1 do meu artigo não tem: uma alternativa para apenas usar scripts npm. No entanto, devo dizer que eu defendo ainda de todo o coração o uso de scripts NPM se for apenas para ajudar outras pessoas a usarem o seu projeto ou mesmo para você, se a sua chamada para Browserify tem várias transformações ou plugins que você não quer digitar toda vez, mas às vezes você só quer escrever “grunt” ou “gulp”, ou qualquer que seja a ferramenta, e fazer algo acontecer.

Antes de eu revelar o “segredo” de que uma fração de vocês pode não ter conhecimento, eu preciso dar crédito a Gabriel Falkenberg por seu comentário no meu artigo anterior. Foi ele que me apresentou a esse truque.

Então, o truque é que você pode adicionar caminhos relativos à variável de ambiente PATH. Para aqueles que talvez não saibam, a variável de ambiente PATH é onde seu console olha ao tentar encontrar o arquivo executável que coincide com o comando inserido. Assim, para isso especificamente, podemos adicionar ./node_modules/.bin/ em nosso path, de preferência antes do caminho para o npm globals, mas depois de praticamente todo o resto (por razões de segurança, ver os comentários do Francesco; você também pode querer considerar direnv se estiver em uma máquina baseada em Unix) para que os binários locais tenham prioridade sobre os pacotes NPM globais.

Pessoalmente, eu também acrescentei ../node_modules/.bin e ../../node_modules/.bin para o meu PATH para que eu possa ir mais profundamente na estrutura de arquivos do meu projeto e ainda ser capaz de executar os comandos que eu preciso. Se você não tiver certeza de como alterar o seu PATH, confira aqui se você estiver no Windows e aqui se estiver usando uma máquina baseada em Unix.

Conclusão

Isso tornou as coisas muito mais simples para mim, pelo menos quando eu estou começando com uma nova ferramenta. Geralmente, depois de experimentar por um tempo, tudo vai acabar em scripts npm de qualquer maneira. Não importa como você faça, espero que isso ajude você a começar a salvar esses módulos como dependências para o bem de todos os outros que poderão trabalhar em seu projeto.

P.S. Você também pode configurar o seu editor de código para executar seus scripts com o pressionar de um botão em vez de apenas usar diretamente a linha de comando. Eu uso o build tools do Sublime Text em meus projetos para que eu possa usar apenas um par de keystrokes para disparar meus scripts mais usados.

***

Joe Zim faz parte do time de colunistas internacionais do iMasters. A tradução do artigo é feita pela redação iMasters, com autorização do autor, e você pode acompanhar o artigo em inglês no link: http://www.joezimjs.com/javascript/no-more-global-npm-packages-2/