npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

check-links-please

v1.0.0

Published

Use this lib to check if an URL is valid

Downloads

5

Readme

Node.js: criando sua biblioteca - Curso

Criando um projeto em Node.js

  • Biblioteca: é um pacote de código utilizado para otimizar uma tarefa, evita a reescrita de código
  • Versão do Node utilizada: 14.10.1
    • Uso do nvm para gerenciar as versões do Node
  • Contexto do curso: fazer um sistema para abrir vários arquivos em formato markdown e verificar se os links estão quebrados.
  • npm init -y - para iniciar um package.json
  • npm install -g <nome do pacote> ou yarn add global <nome do pacote> - para instalar libs de modo global (evitar para nao poluir o diretório global)
    • OBS: Existem libs que precisam ser instaladas globalmente para funcionarem, é preciso verificar na documentação de cada uma
  • Instalamos a biblioteca chalk: npm install chalk
  • Criar um arquivo .gitignore com node_modules lá dentro
  • Documentação Chalk: Link
  • Type: module no package.json para importar a biblioteca chalk
  • Introdução ao CommonJS ou CJS: trata da importação e exportação de módulos/pedaços de código
    • Para exportar apenas uma função:
module.exports = function soma(num1, num2) {
 return num1 + num2;
};
  • ou
function soma(num1, num2) {
 return num1 + num2;
}
module.exports = soma;
  • Para exportar um objeto com funções:
module.exports { multiplica, soma };
  • Para importar funções desestruturando o objeto
const { multiplica, soma } = require('./caminho/arquivo');

const resultadoMult = multiplica(2, 2);
const resultadoSoma = soma(2, 2);
  • Exportando módulos:

    • EcmaScript Modules (ESM) ou CommonJS (CJS)
    • ESM:
      • export, export default { ... }
      • import { ... } from './caminho/arquivo'
  • Através da documentação procuramos respostas para as seguintes perguntas:

    • Como eu importo os métodos da lib para o meu código?
    • Quais são os métodos e/ou palavras-chaves que a lib disponibiliza e quais os usos?
    • Quais (e quantos) são os argumentos que devo passar como parâmetro para que estes métodos funcionem? Strings? Números? Um array de informações?

    Carregamento de Arquivos:

  • A lib fs: acessar arquivos que estão em outras pastas

    • Uso de underline (_) como parâmetro de erro para não precisar tratar os erros.
  • Promises: o que irá acontecer quando o processamento dos textos for muito grande? Pode demorar muito e tratar o programa

    • Para isso utilizamos código assíncrono, com promises por exemplo.
    • Readfile com Promises: fs.promises.readFile().then
  • Async/Await:

    • Mais uma forma de se resolver uma Promise
    • Uso do bloco try...catch para tratar os casos de sucesso/erro no código
    • Bloco finally: Bloco executado sempre independente da execução do código ter sido resolvida no try ou gerado um erro passado para o catch. Não recebe nenhum dado através de parênteses.

    Capturando Links:

    • Como extrair do texto a estrutura de Links entre colchetes/parenteses
    • Exressões Regulares: Ferramenta que serve para identificar padrões em estruturas de texto (strings) para que seja possível manipulá-las
      • Introdução ao uso do regex:
        • Regex são objetos que mapeiam padrões de texto por meio de uma linguagem própria, com sintaxe e regras específicas. Elas são uma ferramenta eficiente para resolver problemas de código que envolvem padrões e buscas textuais.
        • Documentação
        • Regex
        • Ir para capturando-links.js
  • Validações de formulário: existem libs para validação de formulários com Javascript

    • A validação de formulários é uma das tarefas que podem consumir muito tempo para desenvolver desde o início e normalmente não são features, ou seja, funcionalidades de um produto. Então, usamos as libs para focar nas partes mais importantes do desenvolvimento.
    • Exemplo de libs: Joi e Yup. Joi tem ambiente de testes que ajuda a visualizar melhor como utilizar os métodos da lib.
  • Introdução aos métodos match e exec

Usando a linha de comando

  • Preocupação com a interação com o usuário e a nossa lib - cli.js - Command Line Interface
  • Super comum passar caminhos e parâmetros para que as bibliotecas funcionem. Neste caso utilizamos:
const caminho = process.argv;
console.log(pegaArquivo(caminho[2]));
  • Caminho: Um caminho é onde se localiza um arquivo ou diretório (que também chamamos de pasta) no sistema de arquivos de um sistema operacional. é importante diferenciar caminho relativo de caminho absoluto, além de como acessá-los.
    • Caminho absoluto vs relativo:
      • Caminho absoluto: chamamos de caminho absoluto quando a localização de um arquivo ou pasta é especificado a partir do diretório-raiz do sistema operacional.
      • Caminho relativo: um caminho relativo para um diretório ou arquivo é definido a partir de sua relação com o pwd, ou seja, o present working directory (diretório de trabalho atual). Na linha de comando, pwd também é o comando print working directory (imprimir o diretório de trabalho), que usamos justamente para saber onde na estrutura de diretórios do sistema operacional se encontra o diretório em que estamos.
  • Criando scripts para interagir com o usuário:
    • Inserir script no Package.json "cli": "node cli.js ./arquivos/texto1.md"

Validando Links:

  • Instalando node-fetch via npm install node-fetch
    • Versão 3.2.6
      • Logo tenho que subsituir:
        • const fetch = require('node-fetch'); por const fetch = (...args) => import('node-fetch').then(({default: fetch}) => fetch(...args)); em http-validacao.js
  • Fetch API e Promise.all: métodos assincronos, isto é, buscar resolver várias promessas de uma vez
  • Neste curso começamos a abordar alguns conceitos importantes no desenvolvimento back-end e um deles é o de requisição/resposta, que são as duas pontas da comunicação cliente-servidor via HTTP.
  • O que aprendemos:
    • Como utilizar a lib node-fetch para acessar URLs e devolver informações como código de status HTTP;
    • A utilizar o método Promise.all para acessar de forma assíncrona um array de URLs e receber o resultado;
    • A combinar o uso do node-fetch e de promessas com async/await para garantir que o código seja executado de forma assíncrona, retornando os resultados.

Testes Unitários

  • Usar o framework Jest para realização de testes unitários
    • npm install --save-dev jest
      • --save-dev é para salvar como dev-dependencies, pois é utilizado somente em etapa de desenvolvimento, não deve ir para a produção
  • Criar diretório test com o arquivo index.test.js
  • Muitos conflitos foram evitados utilizando o template de typescript ja configurado com JEST para ECMAScript modules.
  • Um teste unitário, como os que fizemos, testa pequenas partes (ou unidades) de código; normalmente a menor parte “testável” do código. É o primeiro tipo de testes que fazemos, e além de testar funcionalidades nos ajudam a pensar em casos de uso; por exemplo, o que deve acontecer no caso de input incorreto de dados, ou falha em uma resposta. Ao testarmos as possibilidades, percebemos muitas vezes o que está faltando desenvolver.
  • Além dos testes unitários, ainda existem outros tipos, como os testes de integração, que justamente integra diferentes módulos e envolve uma complexidade maior, e os testes de interface, que simulam a interface e os eventos que o usuário pode efetuar nela, como clique em um botão ou preenchimento de um input.