DEV Community

Cover image for Como criar um npx
Matheus Santos
Matheus Santos

Posted on

6 1

Como criar um npx

Um npx (pacote executável do npm) pode ser muito útil para automatizar tarefas repetitivas ou mesmo para soltar a criatividade e criar algo novo. Neste artigo vou mostrar como é simples criar um.

O básico

Primeiro de tudo precisamos criar um repositório npm para o nosso pacote, para isso rode o comando npm init -y numa pasta vazia. Agora temos o nosso package.json.

Neste ponto é interessante mudar o nome do pacote, a chave name do package.json. Vamos mudar para my-npx.

// package.json
{
  "name": "my-npx",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [],
  "author": "",
  "license": "ISC"
}
Enter fullscreen mode Exit fullscreen mode

O próximo passo é criar o nosso script. Vamos criar o arquivo index.js e dar um simples console.log.

Observações importantes:

  • É necessário colocar #!/usr/bin/env node logo na primeira linha do nosso index.js
  // index.js
  #!/usr/bin/env node

  console.log('Meu primeiro npx!');
Enter fullscreen mode Exit fullscreen mode
  • É necessário, também, criar a chave bin no package.json e passar para ela o caminho do nosso index.js
  // package.json
  {
    "name": "my-npx",
    "version": "1.0.0",
    "description": "",
    "bin": "index.js",
    "main": "index.js",
    "scripts": {
      "test": "echo \"Error: no test specified\" && exit 1"
    },
    "keywords": [],
    "author": "",
    "license": "ISC"
  }
Enter fullscreen mode Exit fullscreen mode

Tudo pronto, agora vamos testar. Rode o comando npm i -g para instalar globalmente o nosso pacote npm. Com ele instalado basta rodar npx my-npx e você verá a mágica acontecer!

Melhorando o script

Para dar uma melhorada no script vamos fazer um fetch para uma API de fatos aleatórios, https://uselessfacts.jsph.pl.

Vamos precisar do node-fetch, npm i node-fetch@2.

// index.js
#!/usr/bin/env node

const fetch = require('node-fetch');

const getRandomFact = async () => {
  const ENDPOINT = 'https://uselessfacts.jsph.pl/random.json?language=en';
  const randomFact = await fetch(ENDPOINT).then((response) => response.json());

  return randomFact.text;
};

getRandomFact().then((randomFact) => console.log(randomFact));
Enter fullscreen mode Exit fullscreen mode

Agora é só rodar npx my-npx para testar as mudanças no nosso npx.


Publicando o pacote para o npm

Digamos que você fez um npx muito incrível e quer compartilhar para o mundo, como fazer isso?

A primeira coisa a se fazer é criar uma conta no site do npm. Feito isso rode o comando npm adduser para fazer o login com a sua conta do npm que foi criada.

Agora vamos fazer algumas modificações no package.json antes de publicar.

Para evitar problemas desinstale o pacote localmente antes de modificar o package.json.

// package.json
{
  "name": "{seu-usuário}-my-npx", // substitua pelo seu nome de usuário do npm, esse formato garante que você crie um nome único
  "version": "1.0.0",
  "description": "Meu primeiro npx", // adicione uma pequena descrição
  "bin": "index.js",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [],
  "author": "{Nome} {Sobrenome}", // substitua pelo seu nome
  "license": "ISC",
  "dependencies": {
    "node-fetch": "^2.6.7"
  }
}
Enter fullscreen mode Exit fullscreen mode

Próximo passo é dar um npm publish na pasta onde está o package.json e pronto, pacote publicado!

Rode npx matheusg18-my-npx aí para ver o que acontece.


Observações

  • Para rodar npm i -g é necessário que o terminal esteja aberto na pasta onde está o package.json;
  • Para listar os pacotes npm instalados globalmente: npm list -g --depth 0;
  • Para desinstalar o npx que foi criado:
    • rodar o comando npm remove -g na pasta onde está o package.json, ou
    • rodar o comando npm remove -g my-npx.
  • Quando for atualizar o pacote, antes de executar npm publish de novo, mude a versão do seu pacote no package.json.
   // package.json
   {
     "name": "{seu-usuário}-my-npx",
     "version": "1.1.0",  // exemplo
     ...
   }
Enter fullscreen mode Exit fullscreen mode

Considerações finais

Espero que tenham gostado do artigo. Qualquer dúvida é só perguntar aqui em baixo e eu tentarei ao máximo responder!

Exemplo de um npx que eu criei: npx trybe-prj
Github: @matheusg18
Linkedin: @matheusg18

Referências

https://docs.npmjs.com/
https://pakstech.com/blog/npx-script/

Top comments (3)

Collapse
 
israeljs profile image
Israel Jerônimo

Parabéns Matheus! Ficou muito bom!

Collapse
 
ggiacomini2012 profile image
Guilherme Giacomini Teixeira

Bom d+!

Collapse
 
ilanaragao profile image
Ilan Aragão

Obrigado por compartilhar Matheus. Simples e direto ao ponto ... até salvei pra usar no futuro.

SurveyJS custom survey software

JavaScript Form Builder UI Component

Generate dynamic JSON-driven forms directly in your JavaScript app (Angular, React, Vue.js, jQuery) with a fully customizable drag-and-drop form builder. Easily integrate with any backend system and retain full ownership over your data, with no user or form submission limits.

Learn more

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay