Questa risposta cerca di aiutare gli altri a evitare di spendere 1-2 ore per la risoluzione dei problemi e di trovare lentamente soluzioni disparate per problemi comuni quando si usa WSL per il terminale in VS Code. Non copre l'installazione di pacchetti specifici, ma piuttosto quelli comuni che potrebbero non essere installati correttamente come dipendenze quando si installano cose che si basano sulla loro presenza e sulla correzione delle impostazioni comuni correlate.
Riepilogo dei passaggi
- WSL installato
- VS Code (o altro IDE) configurato per il terminale
- NPM installato e correzione del percorso in .profile (può aiutare con altri strumenti)
- build-essential installato (aiuta con tutti gli strumenti che usano make / gcc / etc)
- VS Code Tasks utilizzando WSL
- Extra
Guida introduttiva e requisiti
Configurazione terminale VS Code
O la scorciatoia da tastiera CTRL+ ,o File
→ Preferences
→Settings
In alto a destra della finestra di modifica, assicurati di lavorare nel contesto corretto per te: Impostazioni utente o Impostazioni area di lavoro .
Nella barra di ricerca delle impostazioni, digita terminal.integrated.shell.windows
(o qualsiasi cosa ti porti abbastanza lontano)
Trova l'impostazione nel file delle impostazioni effettive, usa Edit
(il mouse sulla riga, sarà sulla sinistra: su un touch screen senza mouse, dovresti essere in grado di toccare semplicemente a sinistra della riga) e selezionareReplace in Settings
Nel riquadro di destra, modifica la voce creata nel file json modificato: sostituisci l'impostazione precedente con
"C:\\WINDOWS\\Sysnative\\bash.exe"
Altri IDE: IntelliJ
Apri Impostazioni / Strumenti / Terminale e imposta il campo "Percorso shell" su "C:\Users\USERNAME\AppData\Local\Microsoft\WindowsApps\ubuntu.exe"
Rendere il tuo terminale WSL Ubuntu Bash funzionale per dev
Quando usi CTRL+ `per aprire il terminale, ora dovresti avere un terminale bash.
Se è la prima volta che esegui bash.exe, ti potrebbe essere chiesto di installare Ubuntu. Fare così. Una volta completata l'installazione, scegli il nome utente e la password da utilizzare in WSL Ubuntu. Questi non devono coincidere con il tuo account Windows corrente ed è importante notare che non cambieranno in base alle modifiche alla password del tuo account Windows.
Una volta che hai finito, avrai un prompt dei comandi bash nel tuo terminale.
Nota che a differenza di git-bash su Windows, questo è un ambiente separato. Sebbene possa essere utilizzato per avviare il software Windows al di fuori di se stesso, avrai bisogno di pacchetti Ubuntu appropriati per eseguirli all'interno del terminale effettivo.
Attualmente, WSL non viene caricato con tutto ciò che potresti aspettarti o a cui sei abituato, e alcune cose possono entrare in conflitto con il software caricato in Windows, in base alle impostazioni del profilo predefinito.
Aggiornamenti e git
Nota: li documenterò come sudo per le persone che hanno semplicemente bisogno di singoli pezzi di questo, ma un'opzione all'inizio è invece quella di sudo su
eseguire semplicemente i seguenti comandi senza sudo.
Assicurati che i tuoi pacchetti Ubuntu siano aggiornati:
sudo apt-get -y update
sudo apt-get -y upgrade
sudo apt-get -y dist-upgrade
sudo apt autoremove
Installa git:
sudo apt-get install git
Node.js e NPM
Se hai già Node o NPM caricati in Windows, eseguirli in Ubuntu può diventare problematico a causa di problemi di percorso. Quindi, è necessario installare le versioni native di Ubuntu e assicurarsi che vengano invece utilizzate.
Innanzitutto, installa node.js con NPM . (alternativo: installa NVM e usalo per installare node.js)
Dopo l'installazione, l'esecuzione dei comandi npm probabilmente fallirà: ad esempio, npm -v
probabilmente ti darà:
: 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")
Ciò è dovuto a un problema di percorso con una soluzione abbastanza semplice . Utilizzando il vostro editor preferito CLI (come nano
, vim
, emacs
, cat
e sed
... ecc), aprire il~/.profile
nano ~/.profile
Nota: NON tentare di modificare i file Linux utilizzando gli strumenti di Windows . (Grazie al commento di @ david-c-rankin per il collegamento ufficiale con il testo rosso in grassetto che lo spiega) Se non si desidera utilizzare un editor CLI per questo nel terminale, vedere in fondo a questo post un collegamento su come per ottenere una GUI in esecuzione.
Attualmente, la variabile PATH bash predefinita in WSL è
PATH="$HOME/bin:$HOME/.local/bin:$PATH"
Che sta iniettando il percorso di Windows dopo le prime due directory binarie. Sfortunatamente, questo non fa sì che / usr / bin venga utilizzato prima di Windows installato npm, quindi aggiungilo prima del $ PATH finale:
PATH="$HOME/bin:$HOME/.local/bin:/usr/bin:$PATH"
Salvare e quindi ricaricare il terminale o semplicemente generare il file del percorso
source ~/.profile
Costruire essenziale
Se stai usando qualcosa che richiede la compilazione o altrimenti usa make, è quasi garantito che avrai bisogno di questi installati; quindi se non li hai installati durante l'installazione di node.js, fallo. È molto più facile usare semplicemente il pacchetto essenziale per la compilazione piuttosto che provare a installare tutto separatamente.
Nota che pacchetti come Compass che si basano su Ruby FFI non funzioneranno senza di essi. Se hai problemi a installare ed eseguire correttamente uno strumento, assicurarti di avere gcc e make installati può essere un buon punto di partenza.
sudo apt-get install -y build-essential
Esecuzione di attività utilizzando Ubuntu
Si noti che se si utilizza task.json di VS Code per eseguire attività di compilazione, per impostazione predefinita verranno comunque eseguite utilizzando il sottosistema di Windows anziché quello di Ubuntu. A volte questo può essere quello che vuoi, ma se hai appena finito di installare grunt-cli in Ubuntu e non in Windows, probabilmente non lo è.
VS Code ha recentemente ricevuto l'aggiornamento di maggio 2017 sul funzionamento di Tasks che gli consente di impostare il task runner come terminale . Questo è di gran lunga il modo più semplice per migrare le attività.
Semplicemente impostato
"runner": "terminal",
nel tuo tasks.json
e il gioco è fatto (supponendo che tu abbia tutti gli strumenti appropriati che stai cercando di eseguire ora installati in WSL Ubuntu).
Questo è molto portabile, idealmente non richiede modifiche tra sistemi che hanno o non hanno WSL, o ad altri sistemi operativi, ed è il metodo che consiglierei.
Al momento, questo metodo genera un'altra TERMINAL
istanza di scheda (accessibile dal menu a discesa). Puoi ancora impostare watcher appropriati, ma significa che non è più presente nella OUTPUT
scheda.
Il vecchio metodo è in grado di invocare la shell WSL Ubunutu Bash e di visualizzarla OUTPUT
, e prevede la chiamata di bash.exe con l'argomento -c o l'utilizzo di uno script di shell. Sfortunatamente non è così semantico, dal momento che stiamo eseguendo il bash
nostro comando e passandolo invece ciò che vogliamo eseguire come argomento. Ciò significa anche che non è facilmente trasportabile su altri sistemi.
Puoi utilizzare la stessa posizione che hai fornito in precedenza a VS Code per il terminale stesso, C:\\WINDOWS\\Sysnative\\bash.exe
come valore percommand
Imposta il primo elemento args
dell'array come -c
e il secondo come comando che desideri eseguire ( credito alla seconda metà di questa risposta ).
In alternativa, puoi invece eseguire uno script di shell come mostrato qui .
Ulteriori informazioni utili
Vuoi avviare VSCode in Windows dalla riga di comando di WSL Bash ?
Vuoi avere un'interfaccia grafica per il tuo WSL Ubuntu ? (questo ti permetterà di fare cose come usare un editor GUI Linux per i file all'interno del sistema Ubuntu stesso: non modificarli usando gli strumenti di modifica di Windows, vedi commenti / note nella sezione su npm)
Vuoi compilare (vedere la parte precedente sulla configurazione corretta di VS Code Tasks per WSL) ed eseguire il debug interamente in WSL Ubuntu ? (questo mostra come farlo usando gdb, ma il pipeTransport
concetto potrebbe essere usato con altri debugger) (credito a questa risposta , ma quella prima fornisce anche un metodo che utilizza il loopback locale che potrebbe rivelarsi utile)