Ця відповідь спрямована на те, щоб допомогти іншим не витрачати 1-2 години на усунення несправностей і повільно знаходити різні рішення загальних проблем при використанні WSL для терміналу в VS Code. Це не стосується встановлення конкретних пакетів, а досить загальних, які можуть неправильно встановлюватися як залежності при встановленні речей, які покладаються на їх наявність та на виправлення пов'язаних загальних налаштувань.
Короткий опис кроків
- WSL встановлено
- Код VS (або інший IDE), налаштований для терміналу
- Встановлено NPM та виправлено шлях у .profile (може допомогти з іншими інструментами)
- встановлений build-bistri (допомагає з будь-якими інструментами, що використовують make / gcc / etc)
- Завдання коду VS з використанням WSL
- Додаткові послуги
Початок роботи та вимоги
- У вас повинен бути встановлений WSL . (Це означає, що у вас повинна бути встановлена 64-розрядна Windows 10 із відповідними оновленнями). Дотримуйтесь інструкцій із встановлення, якщо вони ще не встановлені. Для цього знадобляться деякі перезавантаження.
Конфігурація терміналу коду VS
Або комбінація клавіш CTRL+ ,, або File
→ Preferences
→Settings
У верхньому правому куті вікна редагування переконайтеся, що ви працюєте у правильному для вас контексті: або Параметри користувача, або Налаштування робочої області .
На панелі пошуку налаштувань введіть terminal.integrated.shell.windows
(або будь-яке інше, що доставить вас досить довго)
Знайдіть налаштування у фактичному файлі налаштувань, використовуйте Edit
(наведіть курсор на лінію, це буде ліворуч: на сенсорному екрані без миші ви повинні мати можливість просто натиснути ліворуч від лінії) та виберітьReplace in Settings
На правій панелі змініть запис, створений у зміненому файлі json: замініть попереднє налаштування на
"C:\\WINDOWS\\Sysnative\\bash.exe"
Інші середовища розробки: IntelliJ
Відкрийте Налаштування / Інструменти / Термінал і встановіть для поля "Шлях оболонки" значення "C:\Users\USERNAME\AppData\Local\Microsoft\WindowsApps\ubuntu.exe"
Зробіть ваш термінал WSL Ubuntu Bash функціональним для розробника
Коли ви використовуєте CTRL+ `для відкриття терміналу, тепер у вас повинен бути термінал bash.
Якщо ви вперше запускаєте bash.exe, вас можуть запитати про встановлення Ubuntu. Зроби так. Після завершення встановлення виберіть своє ім’я користувача та пароль для використання в WSL Ubuntu. Вони не повинні збігатися з вашим поточним обліковим записом Windows, і важливо зауважити, що вони не змінюватимуться на основі змін пароля вашого облікового запису Windows.
Після закінчення у вас з’явиться командний рядок bash у вашому терміналі.
Зауважте, що на відміну від git-bash в Windows, це окреме середовище. Незважаючи на те, що його можна використовувати для запуску програмного забезпечення Windows за межами самого себе, вам знадобляться відповідні пакети Ubuntu, щоб запускати їх у реальному терміналі.
На даний момент WSL завантажується не всім, що ви могли б очікувати або звикли мати, і деякі речі можуть суперечити програмному забезпеченню, яке ви завантажили в Windows, на основі налаштувань профілю за замовчуванням.
Оновлення & git
Примітка: Я збираюся задокументувати їх як sudo для людей, яким просто потрібні окремі фрагменти цього, але одним із варіантів на початку є замість цього sudo su
і просто виконання наступних команд без sudo.
Переконайтесь, що ваші пакети Ubuntu оновлені:
sudo apt-get -y update
sudo apt-get -y upgrade
sudo apt-get -y dist-upgrade
sudo apt autoremove
Встановити git:
sudo apt-get install git
Node.js та NPM
Якщо у вас вже є Node або NPM, завантажені в Windows, їх запуск в Ubuntu може стати проблематичним через проблеми із шляхом. Отже, вам потрібно встановити рідні версії Ubuntu і переконатися, що вони використовуються замість них.
Спочатку встановіть node.js із NPM . (альтернативно: встановіть NVM і використовуйте його для встановлення node.js)
Після встановлення запуск команд npm, мабуть, не вдасться: наприклад, npm -v
напевно дасть вам:
: 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")
Це пов’язано з проблемою шляху з досить простим рішенням . Використовуючи свій улюблений редактор CLI (наприклад nano
, vim
, emacs
, cat
і sed
... і т.д.), відкрийте~/.profile
nano ~/.profile
Примітка: НЕ намагайтеся редагувати файли Linux за допомогою інструментів Windows . (Дякую коментарю @ david-c-rankin до офіційного посилання з жирним червоним текстом, що пояснює це). Якщо ви не хочете використовувати редактор CLI для цього в терміналі, дивіться внизу цієї публікації, щоб дізнатися, як щоб запустити графічний інтерфейс.
В даний час за замовчуванням змінною bash PATH у WSL є
PATH="$HOME/bin:$HOME/.local/bin:$PATH"
Який вводить шлях windows після перших двох двійкових каталогів. На жаль, це не призводить до того, що / usr / bin використовується до встановленої Windows npm, тому додайте, що до остаточного $ PATH:
PATH="$HOME/bin:$HOME/.local/bin:/usr/bin:$PATH"
Збережіть, а потім перезавантажте термінал або просто відкрийте файл шляху
source ~/.profile
Важливе для побудови
Якщо ви використовуєте щось, що вимагає компіляції або іншим чином використовує make, майже гарантовано, що вони вам знадобляться; так що якщо ви не встановили їх під час встановлення node.js, зробіть це. Набагато простіше просто використовувати пакет, необхідний для побудови, а не намагатися встановити все окремо.
Зауважте, що такі пакети, як Compass, які покладаються на Ruby FFI, не зможуть без них. Якщо у вас виникли проблеми з належним встановленням та запуском інструменту, переконайтесь, що у вас є gcc та встановити, може бути гарним місцем для початку.
sudo apt-get install -y build-essential
Запуск завдань за допомогою Ubuntu
Зверніть увагу, що якщо ви використовуєте VS Code's task.json для запуску завдань збірки, за замовчуванням він все одно буде виконувати їх, використовуючи підсистему Windows замість Ubuntu. Іноді це може бути саме тим, що ви хочете, але якщо ви щойно закінчили встановлення grunt-cli в Ubuntu, а не в Windows, можливо, це не так.
VS Code нещодавно оновився в травні 2017 року до того, як працюють Завдання, що дозволяє встановити програму завдань як термінал . Це, безумовно, найпростіший спосіб перенести завдання.
Просто встановити
"runner": "terminal",
в вашому , tasks.json
і ви зробили (якщо у вас є всі потрібні інструменти ви намагаєтеся запустити в даний час встановлені в WSL Ubuntu).
Це дуже портативно, в ідеалі не вимагає змін між системами, які мають або не мають WSL, або в інших ОС, і я рекомендую метод.
На даний момент цей метод створює інший TERMINAL
екземпляр вкладки (доступ до якого здійснюється зі спадного меню). Ви все ще можете налаштувати відповідних спостерігачів, але це означає, що він більше не сидить на OUTPUT
вкладці.
Старий метод може викликати оболонку WSL Ubunutu Bash і показати її в собі OUTPUT
, і передбачає або виклик bash.exe з аргументом -c, або використання сценарію оболонки. На жаль, це не настільки семантично, оскільки ми робимо bash
свою команду і передаємо їй те, що хочемо виконати як аргумент. Це також означає, що він не так швидко переноситься в інші системи.
Ви можете використовувати те саме розташування, яке раніше надавали код VS для самого терміналу, C:\\WINDOWS\\Sysnative\\bash.exe
як значення дляcommand
Встановіть перший елемент args
масиву як, -c
а другий як команду, яку потрібно виконати ( зарахування до другої половини цієї відповіді ).
Крім того, ви можете замість цього запустити сценарій оболонки, як показано тут .
Подальші корисні біти
Хочете запустити VSCode в Windows із командного рядка WSL Bash ?
Хочете мати графічний інтерфейс для вашого WSL Ubuntu ? (це дозволить вам робити такі речі, як використання редактора графічного інтерфейсу Linux для файлів у самій системі Ubuntu: не редагуйте їх за допомогою інструментів редагування Windows, див. коментарі / примітки в розділі про npm)
Хочете побудувати (див. Наведену вище частину щодо правильного налаштування завдань коду VS для WSL) та повністю налагодити у межах WSL Ubuntu ? (це показує, як це зробити за допомогою gdb, але pipeTransport
концепція може бути використана з іншими налагоджувачами) (заслуговує на увагу ця відповідь , але попередня також містить метод, що використовує локальний зворотний зв'язок, який може виявитися корисним)