Esta respuesta busca ayudar a otros a evitar pasar de 1 a 2 horas solucionando problemas y encontrando lentamente soluciones dispares para problemas comunes al usar WSL para el terminal en VS Code. No cubre la instalación de paquetes específicos, sino más bien los comunes que pueden no instalarse correctamente como dependencias al instalar cosas que dependen de su presencia y al corregir configuraciones comunes relacionadas.
Resumen de pasos
- WSL instalado
- VS Code (u otro IDE) configurado para terminal
- NPM instalado y corrección de ruta en .profile (puede ayudar con otras herramientas)
- build-essential instalado (ayuda con cualquier herramienta que use make / gcc / etc)
- Tareas de VS Code usando WSL
- Extras
Introducción y requisitos
- Debe tener WSL instalado . (Lo que significa que debe ejecutar Windows 10 de 64 bits , con las actualizaciones adecuadas) Siga la guía de instalación si aún no está instalada. Esto requerirá algunos reinicios.
Configuración del terminal de código VS
O el atajo de teclado CTRL+ ,, o File
→ Preferences
→Settings
En la parte superior derecha de la ventana de edición, asegúrese de estar trabajando en el contexto correcto para usted: Configuración del usuario o Configuración del espacio de trabajo .
En la barra de búsqueda de configuración, escriba terminal.integrated.shell.windows
(o lo que sea que lo lleve lo suficientemente lejos)
Busque la configuración en el archivo de configuración real, use Edit
(mouse sobre la línea, estará a la izquierda: en una pantalla táctil sin mouse, debería poder simplemente tocar a la izquierda de la línea) y seleccioneReplace in Settings
En el panel derecho, modifique la entrada creada en el archivo json modificado: reemplace la configuración anterior con
"C:\\WINDOWS\\Sysnative\\bash.exe"
Otros IDE: IntelliJ
Abra Configuración / Herramientas / Terminal y configure el campo "Ruta de Shell" en "C:\Users\USERNAME\AppData\Local\Microsoft\WindowsApps\ubuntu.exe"
Hacer que su terminal WSL Ubuntu Bash sea funcional para desarrolladores
Cuando usa CTRL+ `para abrir la terminal, ahora debería tener una terminal bash.
Si es la primera vez que ejecuta bash.exe, es posible que se le pregunte sobre la instalación de Ubuntu. Hágalo. Una vez que se complete la instalación, elija su nombre de usuario y contraseña para usar en WSL Ubuntu. Estos no tienen que coincidir con su cuenta actual de Windows y es importante tener en cuenta que no cambiarán según los cambios en la contraseña de su cuenta de Windows.
Una vez que haya terminado, tendrá un símbolo del sistema bash en su terminal.
Tenga en cuenta que, a diferencia de git-bash en Windows, este es un entorno independiente. Si bien se puede usar para iniciar software de Windows fuera de sí mismo, necesitará los paquetes de Ubuntu adecuados para ejecutarlos dentro de la terminal real.
Actualmente, WSL no viene cargado con todo lo que podría esperar o estar acostumbrado a tener, y algunas cosas pueden entrar en conflicto con el software que ha cargado en Windows, según la configuración de perfil predeterminada.
Actualizaciones y git
Nota: Voy a documentarlos como sudo para las personas que simplemente necesitan partes individuales de esto, pero una opción al principio es sudo su
simplemente ejecutar los siguientes comandos sin sudo.
Asegúrese de que sus paquetes de Ubuntu estén actualizados:
sudo apt-get -y update
sudo apt-get -y upgrade
sudo apt-get -y dist-upgrade
sudo apt autoremove
Instalar git:
sudo apt-get install git
Node.js y NPM
Si ya tiene Node o NPM cargado en Windows, ejecutarlos en Ubuntu puede resultar problemático debido a problemas de ruta. Por lo tanto, debe instalar las versiones nativas de Ubuntu y asegurarse de que se utilicen en su lugar.
Primero, instale node.js con NPM . (alternativo: instale NVM y utilícelo para instalar node.js)
Después de la instalación, la ejecución de los comandos npm probablemente fallará: por ejemplo, npm -v
probablemente le 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")
Esto se debe a un problema de ruta con una solución bastante sencilla . Usando su editor CLI favorito (como nano
, vim
, emacs
, cat
y sed
... etc), abra su~/.profile
nano ~/.profile
Nota: NO intente editar archivos de Linux con herramientas de Windows . (Gracias al comentario de @ david-c-rankin por el enlace oficial con el texto rojo en negrita que explica esto) Si no desea utilizar un editor CLI para esto en la terminal, consulte la parte inferior de esta publicación para obtener un enlace sobre cómo para ejecutar una GUI.
Actualmente, la variable PATH de bash predeterminada en WSL es
PATH="$HOME/bin:$HOME/.local/bin:$PATH"
Que está inyectando la ruta de Windows después de los dos primeros directorios binarios. Desafortunadamente, esto no da como resultado que / usr / bin se use antes de que Windows instale npm, así que agréguelo antes del $ PATH final:
PATH="$HOME/bin:$HOME/.local/bin:/usr/bin:$PATH"
Guarde y luego vuelva a cargar el terminal o simplemente obtenga el archivo de ruta
source ~/.profile
Construir-esencial
Si está utilizando algo que requiera compilación o utilice make, es casi seguro que los necesitará instalados; así que si no los instaló mientras instalaba node.js, hágalo. Es mucho más fácil simplemente usar el paquete esencial de compilación en lugar de intentar instalar todo por separado.
Tenga en cuenta que los paquetes como Compass que se basan en Ruby FFI fallarán sin estos. Si tiene problemas para instalar y ejecutar correctamente una herramienta, asegurarse de tener instalado gcc y make puede ser un buen lugar para comenzar.
sudo apt-get install -y build-essential
Ejecución de tareas con Ubuntu
Tenga en cuenta que si usa tasks.json de VS Code para ejecutar tareas de compilación, de forma predeterminada aún las ejecutará usando el subsistema de Windows en lugar del de Ubuntu. A veces, esto puede ser lo que desea, pero si acaba de terminar de instalar grunt-cli en Ubuntu y no en Windows, probablemente no lo sea.
VS Code recientemente tuvo la actualización de mayo de 2017 sobre cómo funcionan las Tareas que le permite configurar el ejecutor de tareas como terminal . Esta es, con mucho, la forma más fácil de migrar tareas.
Simplemente configure
"runner": "terminal",
en su tasks.json
y ya está (asumiendo que tiene todas las herramientas apropiadas que está intentando ejecutar ahora instaladas en WSL Ubuntu).
Esto es muy portátil, idealmente no requiere cambios entre sistemas que tienen o no tienen WSL, u otros sistemas operativos, y es el método que recomendaría.
Por el momento, este método genera otra TERMINAL
instancia de pestaña (a la que se accede desde el menú desplegable). Aún puede configurar los observadores adecuados, pero eso significa que ya no está en la OUTPUT
pestaña.
El método antiguo es capaz de invocar el shell WSL Ubunutu Bash y hacer que aparezca OUTPUT
, e implica llamar a bash.exe con el argumento -c o usar un script de shell. Desafortunadamente, no es tan semántico, ya que estamos creando bash
nuestro comando y pasándole lo que queremos ejecutar como argumento. Esto también significa que no se puede trasladar tan rápidamente a otros sistemas.
Puede usar la misma ubicación que le dio a VS Code anteriormente para el terminal en sí, C:\\WINDOWS\\Sysnative\\bash.exe
como valor paracommand
Establezca el primer elemento de la args
matriz como -c
y el segundo como el comando que desea ejecutar ( crédito a la segunda mitad de esta respuesta ).
Alternativamente, puede ejecutar un script de shell como se ve aquí .
Más bits útiles
¿Quiere iniciar VSCode en Windows desde la línea de comandos de WSL Bash ?
¿Quiere tener una interfaz gráfica para su WSL Ubuntu ? (esto le permitirá hacer cosas como usar un editor de GUI de Linux para archivos dentro del propio sistema Ubuntu: no los edite usando las herramientas de edición de Windows, vea los comentarios / nota en la sección de npm)
¿Desea compilar (consulte la parte anterior sobre cómo configurar las tareas de código VS correctamente para WSL) y depurar completamente dentro de WSL Ubuntu ? (esto muestra cómo hacerlo usando gdb, pero el pipeTransport
concepto podría usarse con otros depuradores) (crédito a esta respuesta , pero la anterior también proporciona un método que usa loopback local que podría resultar útil)