NodeJs - alandrade21/docsCompartilhados GitHub Wiki

Nesta página:

  1. Instalar nodeJs
  2. Várias versões de Node na máquina
  3. Definir a versão do node por projeto
  4. Configurar npm
  5. Instalar Dependência
  6. Criação de componentes em TS
    1. Compartilhando o código do componente em desenv
    2. Publicar um pacote
    3. Desfazer um link antes do build de produção
  7. Números de Versão no package.json
  8. Error: ENOSPC: System limit for number of file watchers reached

Instalar nodeJs

Dê preferência por utilizar o NVM, listado na próxima seção.

curl -sL https://deb.nodesource.com/setup_12.x | sudo -E bash -
sudo apt install nodejs
sudo apt install build-essential

Testa a instalação

node -v
npm -v

Várias versões de Node na máquina

Informações retiradas dessa página.

Vamos utilizar o NVM.

Pacotes NPM em escopo global

Pode haver versão de Angular e de Typescript instalada globalmente. Essa instalação global faz com que os comandos ng ou tsc sejam reconhecidos em todo o operacional.

Para verificar se esse é o caso, simplesmente digite ng ou tsc no terminal. Se o comando for reconhecido, então essas ferramentas estão instaladas no escopo global.

Angular e Typescript são pacotes NPM. Se eles estão em escopo global é porque eles foram instalados com npm i -g <nome do pacote>.

Para verificar todos os pacotes instalados em escopo global, rode o comando npm list -g.

No linux, utilizando uma instalação global de NodeJs, os pacotes instalados em escopo global ficam na pasta /usr/lib/node_modules.

Desinstalando pacotes globais

Os pacotes de Angular e Typescript que estejam no escopo global devem ser removidos. Para isso utilize os comandos abaixo:

sudo npm un -g @angular/cli
sudo npm un -g typescript

Outra opção é simplesmente apagar as pastas destes pacotes de /usr/lib/node_modules.

Node em Escopo Global

Para verificar se o NodeJS está em escopo global, rode o comando node -v. Se o comando for reconhecido, ele responde qual é a versão instalada.

O comando which node vai responder onde o node está instalado. Você deve obter a resposta /usr/bin/node (ou qualquer outra pasta de sistema, fora do seu domínio de usuário).

Desinstalando a Versão Global do Node

sudo apt remove nodejs

Só o pacote do node deve aparecer como candidato à remoção.

Instalando o NVM

O NVM é um gerenciador/chaveador de versões do node, que utiliza a sua pasta de usuário ao invés da área do sistema.

Veja qual a versão mais recente no repositório github da ferramenta. Para instalar:

curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.37.2/install.sh | bash

Esse comando baixa o script de instalação e instala o NVM em ~/.nvm/. As versões diferentes do node serão instaladas nesse diretório tb.

Essa instalação acrescenta as linhas abaixo no arquivo ~/.bashrc:

export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"  # This loads nvm
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"  # This loads nvm bash_completion

Logo após a instalação, pode ser necessário abrir um novo terminal para o NVM ser reconhecido.

Comandos NVM

  • Versão do nvm instalada:
nvm --version
  • Listar versões instaladas do node:
nvm ls
  • Listar versões disponíveis do node para instalação:
nvm ls-remote
  • Instalar uma versão do node:
nvm install vX.X.X
  • Instalar a versão mais recente do node:
nvm install node
  • Desinstalar uma versão do node:
nvm uninstall vX.X.X
  • Usar uma versão do node (vale para aquela seção de shell):
nvm use vX.X.X
  • Usar a versão mais recente do node:
nvm use node
  • Definir nome para uma versão do node:
nvm alias meunome vX.X.X
nvm use meunome
  • Remover um nome de versão do node:
nvm unalias meunome
  • Definir uma versão padrão do node:
nvm alias default vX.X.X
  • Definir a versão mais nova versão padrão:
nvm alias default node
  • Saber a versão atual:
nvm current

Novos Escopos Globais

Cada versão instalada pelo comando nvm install vX.X.X é colocada em um subdiretório da pasta ~/.nvm/versions/node/.

Assim, se instalamos nvm install v15.11.0, esta versão estará instalada em ~/.nvm/versions/node/v15.11.0/.

O escopo global desta versão estará em ~/.nvm/versions/node/v15.11.0/lib/node_modules/.

Definir a versão do node por projeto

Informações retiradas da página How to run multiple Node and Angular versions simultaneously.

Versões específicas do angular tem dependências de versões específicas de node e de typescript. Esta é a tabela de versões compatíveis).

Crie um arquivo .nvmrc na raiz do projeto e coloque dentro dele a versão do node. Ex: 12.4.0.

Todos os comandos node agora tem que ser rodados com nvm:

  • O que era rodado com node [arguments], agora precisa ser rodado com nvm run [arguments].
  • O que era rodado com npm run [nome do script] [arguments], agora precisa ser rodado com nvm exec npm run [nome do script] [arguments].

Configurar npm

Roda os comandos abaixo depois de instalar o npm.

npm set init.author.name 'André Andrade'
npm set init.author.email '[email protected]'
npm set init.author.url 'https://github.com/alandrade21'
npm adduser

Esse último comando vai pedir seu usuário e sua senha no repositório npm, e será utilizado na hora de publicar pacotes.

Verifica as configurações feitas com o comando

npm config ls

Instalar Dependência

Dependências de desenvolvimento

npm i <pacote> -D

ou

npm install @types/node --save-dev

Dependências de RunTime

npm i <pacote> -S

Criação de componentes em TS

Crie um novo diretório de projeto para escrever o código do componente.

Entre nesse diretório e inicialize o projeto com

npm init -y

Gera o arquivo tsconfig.json com o comando tsc --init.

No tsconfig.json coloca a propriedade "declaration" : true. Isso vai gerar o arquivo de tipos .d.ts.

Escreve o componente, de preferência no arquivo index.ts.

Transpila o componente com tsc. O resultado vai aparecer na pasta ./dist.

Completa o arquivo package.json com as entradas:

"main": "dist/index.js",
"types" : "dist/index.d.ts"

Coloque seu namespace no nome do componente: @alandrade21/<nome-do-componente>.

Compartilhando o código do componente em desenv

Para evitar publicar um componente antes do término do seu desenvolvimento e ainda assim permitir seu uso em outros projetos, vamos linkar a pasta do componente no projeto.

Vai para a pasta do componente e roda o comando:

sudo npm link

Isso cria um link global para o componente em /usr/lib/node_modules/@alandrade21/<nome-do-componente>. Por isso a permissão de sudo.

Vai para a pasta do projeto que usará o componente e roda o comando:

npm link <nome-do-componente>

Publicar um pacote

Coloca a entrada files no package.json, da seguinte forma:

“files”: [“dist/**/*”]

Isso garante que apenas os arquivos necessários serão utilizados no empacotamento.

Loga no repositório npm com o comando:

npm login

Dentro do diretório do componente a ser publicado, publica o pacote com o comando:

npm publish

Desfazer um link antes do build de produção

Desfaça o link no projeto que consome o compenente.

npm uninstall --no-save <nome-do-componente>

Instale o pacote a partir do npm:

npm install

O componente já está no package.json, é só rodar o comando acima para usar a versão publicada.

Para apagar o link global, vai para o diretório do componente e roda:

npm uninstall

Números de Versão no package.json

Número de versão composto por Major.Minor.Patch.

  • ~: Atualiza para versões mais novas que tenham trocado apenas o patch number.
  • ^: Atualiza para versões mais novas que tenham trocado ou o patch number ou minor number.

Error: ENOSPC: System limit for number of file watchers reached

Aumentar o limite de user watches no sistema operacional.

Verificar o limite atual:

cat /proc/sys/fs/inotify/max_user_watches

Ajustar o novo limite no arquivo /etc/sysctl.conf:

echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf && sudo sysctl -p

O comando acima acrescenta a linha fs.inotify.max_user_watches=524288 ao arquivo /etc/sysctl.conf e em seguida pede ao kernel para recarregar as novas configurações.

Verificar o novo limite:

cat /proc/sys/fs/inotify/max_user_watches
⚠️ **GitHub.com Fallback** ⚠️