Jawaban ini berusaha untuk membantu orang lain menghindari menghabiskan 1-2 jam untuk memecahkan masalah dan perlahan menemukan solusi yang berbeda untuk masalah umum saat menggunakan WSL untuk terminal di VS Code. Ini tidak mencakup penginstalan paket tertentu, melainkan yang umum yang mungkin tidak diinstal dengan benar sebagai dependensi saat menginstal hal-hal yang bergantung pada keberadaannya, dan untuk memperbaiki pengaturan umum terkait.
Ringkasan langkah-langkah
- WSL diinstal
- VS Code (atau IDE lain) dikonfigurasi untuk terminal
- NPM diinstal & perbaikan jalur di .profile (dapat membantu dengan alat lain)
- build-essential diinstal (membantu alat apa pun yang menggunakan make / gcc / etc)
- VS Code Tasks menggunakan WSL
- Ekstra
Memulai & Persyaratan
- Anda harus menginstal WSL . (Artinya Anda harus menjalankan Windows 10 64 bit , dengan pembaruan yang sesuai) Ikuti panduan penginstalan jika belum diinstal. Ini akan membutuhkan beberapa reboot.
Konfigurasi Terminal VS Code
Baik pintasan CTRL+ ,keyboard, atau File
→ Preferences
→Settings
Di kanan atas jendela pengeditan, pastikan Anda bekerja dalam konteks yang benar untuk Anda: Pengaturan Pengguna atau Pengaturan Ruang Kerja .
Di bilah pencarian pengaturan, ketik terminal.integrated.shell.windows
(atau apa pun yang membuat Anda cukup lama)
Temukan pengaturan di file pengaturan aktual, gunakan Edit
(mouse di atas garis, itu akan berada di sebelah kiri: pada layar sentuh tanpa mouse, Anda harus cukup mengetuk di sebelah kiri baris), dan pilihReplace in Settings
Di panel kanan, ubah entri yang dibuat di file json yang dimodifikasi: ganti pengaturan sebelumnya dengan
"C:\\WINDOWS\\Sysnative\\bash.exe"
IDE lainnya: IntelliJ
Buka Pengaturan / Alat / Terminal dan setel bidang "Jalur shell" ke "C:\Users\USERNAME\AppData\Local\Microsoft\WindowsApps\ubuntu.exe"
Menjadikan Terminal Bash Ubuntu WSL Anda berfungsi untuk dev
Saat Anda menggunakan CTRL+ `untuk membuka terminal, Anda sekarang harus memiliki terminal bash.
Jika ini adalah pertama kalinya Anda menjalankan bash.exe, Anda mungkin ditanya tentang menginstal Ubuntu. Lakukan. Setelah instalasi Anda selesai, pilih nama pengguna dan kata sandi Anda untuk digunakan di WSL Ubuntu. Ini tidak harus sesuai dengan akun Windows Anda saat ini, dan penting untuk diperhatikan bahwa mereka tidak akan berubah berdasarkan perubahan pada kata sandi akun Windows Anda.
Setelah Anda selesai, Anda akan memiliki prompt perintah bash di terminal Anda.
Perhatikan bahwa tidak seperti git-bash di Windows, ini adalah lingkungan yang terpisah. Meskipun dapat digunakan untuk meluncurkan perangkat lunak Windows di luar dirinya sendiri, Anda memerlukan paket Ubuntu yang sesuai untuk menjalankannya di dalam terminal sebenarnya.
Saat ini, WSL tidak dimuat dengan semua yang Anda harapkan atau biasa Anda miliki, dan beberapa hal dapat bertentangan dengan perangkat lunak yang Anda muat di Windows, berdasarkan pengaturan profil default.
Pembaruan & git
Catatan: Saya akan mendokumentasikan ini sebagai sudo untuk orang-orang yang hanya membutuhkan satu bagian saja, tetapi salah satu opsi pada awalnya adalah dengan sudo su
menjalankan perintah berikut tanpa sudo.
Pastikan paket Ubuntu Anda sudah yang terbaru:
sudo apt-get -y update
sudo apt-get -y upgrade
sudo apt-get -y dist-upgrade
sudo apt autoremove
Instal git:
sudo apt-get install git
Node.js & NPM
Jika Anda sudah memuat Node atau NPM di Windows, menjalankannya di Ubuntu dapat menimbulkan masalah karena masalah jalur. Jadi, Anda perlu menginstal versi asli Ubuntu dan memastikan bahwa versi tersebut digunakan.
Pertama, instal node.js dengan NPM . (alternatif: instal NVM dan gunakan untuk menginstal node.js)
Setelah menginstal, menjalankan perintah npm mungkin akan gagal: misalnya, npm -v
mungkin akan memberi Anda:
: 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")
Ini karena masalah jalur dengan solusi yang cukup mudah . Menggunakan editor CLI favorit Anda (seperti nano
, vim
, emacs
, cat
dan sed
... dll), membuka Anda~/.profile
nano ~/.profile
Catatan: JANGAN mencoba mengedit file Linux menggunakan alat Windows . (Terima kasih untuk komentar @ david-c-rankin untuk tautan resmi dengan teks merah tebal yang menjelaskan hal ini) Jika Anda tidak ingin menggunakan editor CLI untuk ini di terminal, lihat bagian bawah posting ini untuk tautan tentang caranya untuk menjalankan GUI.
Saat ini, variabel PATH bash default di WSL adalah
PATH="$HOME/bin:$HOME/.local/bin:$PATH"
Yang menginjeksi jalur windows setelah dua direktori biner pertama. Sayangnya, ini tidak mengakibatkan / usr / bin digunakan sebelum windows menginstal npm, jadi tambahkan sebelum $ PATH terakhir:
PATH="$HOME/bin:$HOME/.local/bin:/usr/bin:$PATH"
Simpan, lalu muat ulang terminal atau cukup ambil file jalurnya
source ~/.profile
Build-essential
Jika Anda menggunakan apa pun yang memerlukan kompilasi atau penggunaan make, hampir dapat dipastikan bahwa Anda memerlukannya untuk diinstal; jadi jika Anda tidak menginstalnya saat menginstal node.js, lakukanlah. Jauh lebih mudah menggunakan paket build-essential daripada mencoba menginstal semuanya secara terpisah.
Perhatikan bahwa paket seperti Kompas yang mengandalkan Ruby FFI akan gagal tanpa ini. Jika Anda mengalami masalah saat menginstal dan menjalankan alat dengan benar, pastikan Anda memiliki gcc dan membuat penginstalan dapat menjadi tempat yang baik untuk memulai.
sudo apt-get install -y build-essential
Menjalankan Tugas menggunakan Ubuntu
Perhatikan bahwa jika Anda menggunakan task.json VS Code untuk menjalankan tugas build, secara default masih akan menjalankannya menggunakan subsistem Windows, bukan Ubuntu. Terkadang ini mungkin yang Anda inginkan, tetapi jika Anda baru saja selesai menginstal grunt-cli di Ubuntu dan bukan Windows, mungkin juga tidak.
VS Code baru-baru ini memiliki update Mei 2017 tentang cara kerja Tasks yang memungkinkannya untuk mengatur pelari tugas sebagai terminal . Sejauh ini, ini adalah cara termudah untuk memindahkan tugas.
Cukup atur
"runner": "terminal",
di Anda tasks.json
dan Anda selesai (dengan asumsi Anda memiliki semua alat yang sesuai yang Anda coba jalankan sekarang diinstal di WSL Ubuntu).
Ini sangat portabel, idealnya tidak memerlukan perubahan antara sistem yang memiliki WSL atau tidak, atau ke OS lain, dan merupakan metode yang saya rekomendasikan.
Saat ini, metode ini memunculkan TERMINAL
instance tab lain (diakses dari drop down). Anda masih dapat mengatur pengamat yang sesuai, tetapi itu berarti tidak lagi ada di OUTPUT
tab.
Metode lama mampu memanggil shell WSL Ubunutu Bash dan menampilkannya OUTPUT
, dan melibatkan pemanggilan bash.exe dengan argumen -c atau menggunakan skrip shell. Sayangnya ini tidak semantik, karena kita membuat bash
perintah kita dan meneruskannya apa yang ingin kita jalankan sebagai argumen. Ini juga berarti tidak dapat dibawa dengan cepat ke sistem lain.
Anda dapat menggunakan lokasi yang sama dengan yang Anda berikan pada Kode VS sebelumnya untuk terminal itu sendiri, C:\\WINDOWS\\Sysnative\\bash.exe
sebagai nilainyacommand
Tetapkan elemen pertama dari args
array sebagai -c
dan yang kedua sebagai perintah yang ingin Anda jalankan ( kreditkan ke paruh kedua jawaban ini ).
Sebagai alternatif, Anda dapat menjalankan skrip shell seperti yang terlihat di sini .
Bit bermanfaat lebih lanjut
Ingin memulai VSCode di Windows dari baris perintah WSL Bash ?
Ingin memiliki antarmuka grafis untuk WSL Ubuntu Anda ? (ini akan memungkinkan Anda melakukan hal-hal seperti menggunakan editor GUI Linux untuk file dalam sistem Ubuntu itu sendiri: jangan mengeditnya menggunakan alat pengeditan Windows, lihat komentar / catatan di bagian npm)
Ingin membangun (lihat bagian di atas tentang menyiapkan VS Code Tasks dengan benar untuk WSL) dan melakukan debug sepenuhnya dalam WSL Ubuntu ? (ini menunjukkan bagaimana melakukannya menggunakan gdb, tetapi pipeTransport
konsepnya dapat digunakan dengan debugger lain) (kredit untuk jawaban ini , tapi yang sebelumnya juga menyediakan metode menggunakan loopback lokal yang terbukti berguna)