Aplicar o ambiente Nix-Shell no Visual Studio Code



Muitos desenvolvedores enfrentaram um problema com os pacotes em sua estação de trabalho. Depois de alguns meses com experimentos, incluindo diferentes idiomas e cadeias de ferramentas, instalei o Elixir, o Haskell-stack, o Node.js / NVM e outras coisas. As coisas mais interessantes acontecem quando você precisa de versões diferentes do mesmo pacote para projetos diferentes. A humanidade já inventou uma solução diferente para criar um ambiente isolado e trocá-los quando necessário. Estamos usando o NVM para gerenciar versões do Node.js., Python Virtual Env para selecionar versões de itens do Python ou Docker para criar SO dentro de um SO. Mas nenhuma das soluções atende a todos os meus requisitos para o ambiente de desenvolvimento isolado.

Introdução aos requisitos para gerenciar a ferramenta de ambiente isolado


Era uma tarde fria de outono. Eu estava sentado na minha cozinha e pensei no isolamento perfeito para o espaço de trabalho do projeto com suas dependências. Na verdade, não, mas o parágrafo deve ter uma introdução.

Depois disso, escrevi os seguintes critérios para minha ferramenta de isolamento perfeita:

  1. Deve cobrir diferentes idiomas e pacotes: não apenas Node.js, Python ou Haskell.
  2. Sem virtualização. Somos jovens demais para toda essa merda. Vamos economizar nosso tempo.
  3. Todos os pacotes da área de trabalho devem ser fáceis de remover.
  4. Todos os ambientes da área de trabalho devem ser fáceis de remover.
  5. Meu IDE deveria estar trabalhando com tudo isso sem chamar Molfars das montanhas dos Cárpatos ucranianos.

Precisamos de uma xícara de chá e do Google, mas a princípio, uma xícara de chá


Lembro que uma vez que li sobre o gerenciador de pacotes declarativo que pode produzir um ambiente isolado e gerenciar todas as dependências do sistema e dependências do projeto Haskell.
Cinco minutos pesquisando, 30 minutos lendo e 1 hora tentando, permite-me descobrir que a ferramenta atual é tudo o que preciso. Tudo que eu preciso é amor. Mas pare, é outra música. Tudo que eu preciso é Nix.

Vamos comparar os requisitos que escrevi acima dos recursos reais do Nix.

  1. Compatível com macOS - sim.
  2. Abrange diferentes idiomas e pacotes - sim.
  3. Sem virtualização - realmente sem virtualização.
  4. Todos os pacotes da área de trabalho devem ser fáceis de remover - talvez sim, mas não sei como.
  5. Meu IDE deve estar trabalhando com todas essas coisas - não. Não há como integrar o Nix Environment ao Visual Studio Code.

Alerta de spoiler
Isso foi há muito tempo. Quando a noite de outono estava fria, eu lhe disse, lembra? Mas hoje é uma noite completamente diferente. É outono quente e todos os meus problemas desapareceram.

Sirva-se. Extensão do código do Visual Studio Writing


A extensão ajuda a integrar o VS Code e o Nix-shell.
Estou com preguiça de escrever este capítulo do zero, então o texto abaixo é copiar / colar do README.md oficial da minha extensão.

Introdução


  • Primeiro de tudo, você deve instalar o gerenciador de pacotes Nix .
  • Reinicie o VS Code para garantir que o caminho para executar o nix-shell esteja configurado corretamente
  • Instale a extensão
  • Crie a configuração nix env, como default.nix, na raiz da área de trabalho do projeto
  • Abra o palete de comandos (Cmd / Ctrl + Shift + P) e digite Selecionar ambiente
  • Na lista de ambientes virtuais nix, escolha o que você deseja aplicar

Exemplo de execução do projeto Haskell


Para executar seu aplicativo Haskell, você precisa instalar o compilador GHC. Para evitar a instalação global do GHC e poder usar diferentes versões do compilador em seu host, faça isso usando o ambiente virtual nix.

Exemplo de compilador GHC dentro da loja NIX (shell.nix):

{ nixpkgs ? import <nixpkgs> {} }: let inherit (nixpkgs) pkgs; inherit (pkgs) haskellPackages; haskellDeps = ps: with ps; [ base lens mtl random ]; ghc = pkgs.haskell.packages.ghc864.ghcWithPackages haskellDeps; nixPackages = [ ghc pkgs.gdb haskellPackages.cabal-install ]; in pkgs.stdenv.mkDerivation { name = "snadbox-haskell-workspace"; buildInputs = nixPackages; } 

Agora vamos tentar abrir nosso projeto no Visual Studio Code.

imagem

Você pode ver, o IDE não consegue encontrar um compilador. Vamos ativar o shell.nix env.

imagem

Bingo! Está tudo bem agora.

Conclusão


Espero que o artigo tenha trazido novas idéias sobre como facilitar sua vida e gerenciar seu projeto sem caos no sistema de arquivos.

Os benefícios dessa abordagem são:

  • Todos os pacotes em um espaço de trabalho separado e não afetam o escopo global contra o implícito.
  • Seu IDE vê toda a equipe do espaço de trabalho e funcionando conforme o esperado
  • Projeto simples de inicialização a partir de um arquivo de configuração em máquinas diferentes

Nada é perfeito em nosso mundo:

  • Precisa aprender um novo idioma para escrever arquivos de configuração
  • A opção Nix CLI não tem significado óbvio e o tempo todo, quando você interage com as ferramentas da CLI, precisa da ajuda do comando read
  • Todas as linguagens de programação têm seu material para instalar bibliotecas do ecossistema. Como NPM, Cabal, Cargo, Pip, etc. E quando você instala esse tipo de pacote via Nix, corre o risco de não funcionar da caixa alguns linters, ferramentas de análise etc.

Links externos


Source: https://habr.com/ru/post/pt474916/


All Articles