Esta resposta visa ajudar outras pessoas a evitar gastar 1-2 horas solucionando problemas e lentamente encontrando soluções díspares para problemas comuns ao usar WSL para o terminal no VS Code. Não cobre a instalação de pacotes específicos, mas sim os comuns que podem não ser instalados apropriadamente como dependências ao instalar coisas que dependem de sua presença e na correção de configurações comuns relacionadas.
Resumo das etapas
- WSL instalado
- Código VS (ou outro IDE) configurado para terminal
- NPM instalado e correção de caminho em .profile (pode ajudar com outras ferramentas)
- build-essential instalado (ajuda com quaisquer ferramentas que usem make / gcc / etc)
- Tarefas de código VS usando WSL
- Extras
Primeiros passos e requisitos
- Você deve ter o WSL instalado . (O que significa que você deve estar executando o Windows 10 de 64 bits , com as atualizações apropriadas) Siga o guia de instalação se ainda não estiver instalado. Isso exigirá algumas reinicializações.
Configuração do Terminal de Código VS
O atalho de teclado CTRL+ ,ou File
→ Preferences
→Settings
No canto superior direito da janela de edição, certifique-se de estar trabalhando no contexto correto para você: Configurações do usuário ou Configurações do espaço de trabalho .
Na barra de pesquisa de configurações, digite terminal.integrated.shell.windows
(ou o que quer que leve você longe o suficiente)
Encontre a configuração no arquivo de configurações real, use Edit
(mouse sobre a linha, estará à esquerda: em uma tela de toque sem um mouse, você deve ser capaz de simplesmente tocar à esquerda da linha) e selecionarReplace in Settings
No painel direito, modifique a entrada criada no arquivo json modificado: substitua a configuração anterior por
"C:\\WINDOWS\\Sysnative\\bash.exe"
Outros IDEs: IntelliJ
Abra Configurações / Ferramentas / Terminal e defina o campo "Caminho do shell" para "C:\Users\USERNAME\AppData\Local\Microsoft\WindowsApps\ubuntu.exe"
Tornando seu Terminal WSL Ubuntu Bash funcional para dev
Quando você usa CTRL+` para abrir o terminal, agora você deve ter um terminal bash.
Se esta é a primeira vez que você executa bash.exe, pode ser questionado sobre a instalação do Ubuntu. Faça isso. Assim que a instalação for concluída, escolha seu nome de usuário e senha para serem usados no WSL Ubuntu. Eles não precisam coincidir com a sua conta atual do Windows e é importante observar que não serão alterados com base nas alterações na senha da sua conta do Windows.
Quando terminar, você terá um prompt de comando bash em seu terminal.
Observe que, ao contrário do git-bash no Windows, este é um ambiente separado. Embora possa ser usado para iniciar software Windows fora dele, você precisará de pacotes Ubuntu apropriados para executá-los dentro do terminal real.
Atualmente, o WSL não vem carregado com tudo o que você espera ou está acostumado a ter, e algumas coisas podem entrar em conflito com o software que você carregou no Windows, com base nas configurações de perfil padrão.
Atualizações e git
Observação: vou documentar isso como sudo para pessoas que simplesmente precisam de partes únicas disso, mas uma opção no início é sudo su
executar os seguintes comandos sem sudo.
Certifique-se de que seus pacotes do Ubuntu estejam atualizados:
sudo apt-get -y update
sudo apt-get -y upgrade
sudo apt-get -y dist-upgrade
sudo apt autoremove
Instale o git:
sudo apt-get install git
Node.js e NPM
Se você já tem o Node ou NPM carregado no Windows, executá-los no Ubuntu pode ser problemático devido a problemas de caminho. Portanto, você precisa instalar as versões nativas do Ubuntu e garantir que sejam usadas.
Primeiro, instale node.js com NPM . (alternativo: instale NVM e use-o para instalar node.js)
Após a instalação, a execução dos comandos npm provavelmente falhará: por exemplo, npm -v
provavelmente fornecerá:
: not foundram Files/nodejs/npm: 3: /mnt/c/Program Files/nodejs/npm:
: not foundram Files/nodejs/npm: 5: /mnt/c/Program Files/nodejs/npm:
/mnt/c/Program Files/nodejs/npm: 6: /mnt/c/Program Files/nodejs/npm: Syntax error: word unexpected (expecting "in")
Isso se deve a um problema de caminho com uma solução bastante simples . Usando seu editor CLI favorito (como nano
, vim
, emacs
, cat
e sed
... etc), abra o~/.profile
nano ~/.profile
Nota: NÃO tente editar arquivos Linux usando ferramentas do Windows . (Obrigado ao comentário de @david-c-rankin para o link oficial com o texto em negrito em vermelho explicando isso) Se você não quiser usar um editor CLI para isso no terminal, consulte o final deste post para um link sobre como para obter uma GUI em execução.
Atualmente, a variável bash PATH padrão em WSL é
PATH="$HOME/bin:$HOME/.local/bin:$PATH"
Que está injetando o caminho do Windows após os primeiros dois diretórios binários. Infelizmente, isso não faz com que / usr / bin seja usado antes do npm do Windows instalado, então adicione isso antes do $ PATH final:
PATH="$HOME/bin:$HOME/.local/bin:/usr/bin:$PATH"
Salve e recarregue o terminal ou apenas forneça o arquivo de caminho
source ~/.profile
Construir essencial
Se você estiver usando algo que requeira compilação ou use make, é quase garantido que você precisará deles instalados; portanto, se você não os instalou durante a instalação do node.js, faça-o. É muito mais fácil simplesmente usar o pacote build-essential em vez de tentar instalar tudo separadamente.
Observe que pacotes como o Compass que dependem do Ruby FFI falharão sem eles. Se você estiver tendo problemas para instalar e executar uma ferramenta corretamente, certifique-se de ter gcc e make instalado pode ser um bom lugar para começar.
sudo apt-get install -y build-essential
Executar tarefas usando Ubuntu
Observe que se você usar o tasks.json do VS Code para executar tarefas de compilação, por padrão ele ainda as executará usando o subsistema Windows em vez do Ubuntu. Às vezes, pode ser isso que você deseja, mas se acabou de instalar o grunt-cli no Ubuntu e não no Windows, provavelmente não é.
O VS Code teve recentemente a atualização de maio de 2017 sobre como as Tarefas funcionam, o que permite definir o executor de tarefas como o terminal . Esta é de longe a maneira mais fácil de migrar tarefas.
Basta definir
"runner": "terminal",
em seu tasks.json
e pronto (supondo que você tenha todas as ferramentas apropriadas que está tentando executar agora instaladas no WSL Ubuntu).
Isso é muito portátil, idealmente não requer mudanças entre sistemas que têm ou não WSL, ou para outros sistemas operacionais, e é o método que eu recomendaria.
A partir do momento, este método gera outra TERMINAL
instância de guia (acessada no menu suspenso). Você ainda pode configurar observadores apropriados, mas isso significa que ele não está mais na OUTPUT
guia.
O método antigo é capaz de invocar o shell WSL Ubunutu Bash e exibi-lo OUTPUT
, e envolve a chamada de bash.exe com o argumento -c ou o uso de um script de shell. Infelizmente não é tão semântico, pois estamos fazendobash
nosso comando e passando-o o que queremos executar como um argumento. Isso também significa que não é tão rapidamente portátil para outros sistemas.
Você pode usar o mesmo local que deu ao VS Code anteriormente para o próprio terminal, C:\\WINDOWS\\Sysnative\\bash.exe
como o valor paracommand
Defina o primeiro elemento da args
matriz como -c
e o segundo como o comando que você deseja executar ( crédito da segunda metade desta resposta ).
Como alternativa, você pode executar um script de shell conforme visto aqui .
Outros bits úteis
Quer iniciar o VSCode no Windows a partir da linha de comando WSL Bash ?
Quer ter uma interface gráfica para o WSL Ubuntu ? (isso permitirá que você faça coisas como usar um editor de GUI do Linux para arquivos dentro do próprio sistema Ubuntu: não os edite usando as ferramentas de edição do Windows, veja comentários / nota na seção sobre npm)
Quer construir (veja a parte acima sobre como configurar o VS Code Tasks corretamente para WSL) e depurar inteiramente dentro do WSL Ubuntu ? (isso mostra como fazer isso usando gdb, mas o pipeTransport
conceito poderia ser usado com outros depuradores) (crédito para esta resposta , mas a anterior também fornece um método usando loopback local que pode ser útil)