Ответ 1
Этот ответ призван помочь другим избежать затрат на устранение неполадок в течение 1-2 часов и медленного поиска разрозненных решений для распространенных проблем при использовании WSL для терминала в VS Code. Он не охватывает установку определенных пакетов, а скорее общие, которые могут неправильно устанавливаться как зависимости при установке вещей, которые зависят от их присутствия, и от исправления связанных общих настроек.
Краткое изложение шагов
- WSL установлен
- Код VS (или другая IDE), настроенный для терминала
- NPM установлен и путь исправлен в .profile (может помочь с другими инструментами)
- build-essential установлен (помогает с любыми инструментами, использующими make/gcc/etc)
- VS Code Tasks с использованием WSL
- Дополнительно
Начало работы и требования
- У вас должен быть установлен WSL. (Это означает, что вы должны работать под управлением 64-битной Windows 10 с соответствующими обновлениями) Следуйте инструкциям по установке, если они еще не установлены. Это потребует некоторых перезагрузок.
Конфигурация терминала с кодом VS
Либо сочетание клавиш CTRL + ,, либо File
→ Preferences
→ Settings
В правом верхнем углу окна редактирования убедитесь, что вы работаете в правильном для вас контексте: либо " Настройки пользователя", либо " Настройки рабочего пространства".
В строке поиска настроек введите terminal.integrated.shell.windows
(или что-то еще, что вас продлит достаточно долго)
Найдите настройку в файле фактических настроек, используйте " Edit
(наведите курсор мыши на строку, она будет слева: на сенсорном экране без мыши вы сможете просто нажать слева от строки) и выберите " Replace in Settings
На правой панели измените запись, созданную в измененном файле json: замените предыдущий параметр на
"C:\\WINDOWS\\Sysnative\\bash.exe"
Другие IDE: IntelliJ
Откройте "Настройки"/"Инструменты"/"Терминал" и установите в поле "Путь к оболочке" значение "C:\Users\USERNAME\AppData\Local\Microsoft\WindowsApps\ubuntu.exe"
Сделайте ваш WSL Ubuntu Bash Terminal функциональным для dev
Когда вы используете 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 -ранкин комментарий за официальную ссылку с жирным красным текстом, объясняющим это) Если вы не хотите использовать редактор CLI для этого в терминале, см. В нижней части этого поста ссылку на как получить графический интерфейс один работает.
В настоящее время переменной PATH bash по умолчанию в 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, сделайте это. Гораздо проще просто использовать пакет build-essential, а не пытаться устанавливать все по отдельности.
Обратите внимание, что такие пакеты, как Compass, которые используют Ruby FFI, не смогут работать без них. Если у вас возникли проблемы с правильной установкой и запуском инструмента, хорошим началом может быть то, что вы установили gcc и make.
sudo apt-get install -y build-essential
Запуск задач с использованием Ubuntu
Обратите внимание, что если вы используете VS Code tasks.json для запуска задач сборки, по умолчанию он будет по-прежнему запускаться с использованием подсистемы Windows вместо Ubuntu. Иногда это может быть тем, что вы хотите, но если вы только что закончили установку grunt -c li в Ubuntu, а не в Windows, это, вероятно, не так.
Недавно VS Code получил майское обновление 2017 года о том, как работают Задачи, что позволяет ему назначать исполнитель задач в качестве терминала. Это, безусловно, самый простой способ перенести задачи.
Просто установить
"runner": "terminal",
в вашем tasks.json
и все готово (при условии, что у вас есть все соответствующие инструменты, которые вы пытаетесь запустить сейчас, установленные в WSL Ubuntu).
Это очень переносимый вариант, в идеале не требующий изменений между системами, которые имеют или не имеют WSL, или другими операционными системами, и этот метод я бы порекомендовал.
На данный момент этот метод порождает другой экземпляр вкладки TERMINAL
(доступ к которому осуществляется из раскрывающегося списка). Вы все еще можете настроить соответствующих наблюдателей, но это означает, что они больше не находятся на вкладке OUTPUT
.
Старый метод способен вызывать оболочку WSL Ubunutu Bash и отображать ее в OUTPUT
, и включает в себя либо вызов bash.exe с аргументом -c, либо использование сценария оболочки. К сожалению, это не так семантически, так как мы делаем bash
нашей командой и передаём то, что хотим вместо этого использовать в качестве аргумента. Это также означает, что он не так быстро переносится на другие системы.
В качестве значения для command
вы можете использовать то же местоположение, которое вы
C:\\WINDOWS\\Sysnative\\bash.exe
ранее для кода VS для самого терминала, C:\\WINDOWS\\Sysnative\\bash.exe
Установите первый элемент массива args
как -c
а второй - как команду, которую вы хотите выполнить (благодарность за вторую половину этого ответа).
В качестве альтернативы вы можете вместо этого запустить скрипт оболочки, как показано здесь.
Дополнительные полезные биты
Хотите запустить VSCode в Windows из командной строки WSL Bash?
Хотите иметь графический интерфейс для вашей WSL Ubuntu? (это позволит вам использовать такие вещи, как использование графического редактора Linux для файлов в самой системе Ubuntu: не редактируйте их с помощью инструментов редактирования Windows, см. комментарии/примечания в разделе на npm)
Хотите собрать (см. Выше часть о правильной настройке задач VS Code для WSL) и полностью отлаживать в WSL Ubuntu? (это показывает, как это сделать с помощью gdb, но концепция pipeTransport
может использоваться с другими отладчиками) (благодарность этому ответу, но pipeTransport
также предоставляет метод с использованием локальной обратной связи, который может оказаться полезным)