Исследование удаленной разработки Visual Studio Code

задняя часть внешний интерфейс Visual Studio Code

Резюме:IDE новая эра!

FundebugПерепечатано в соответствии с первоначальными требованиями, авторские права принадлежат оригинальному автору.

в предыдущих статьяхВеселый проект — запуск кода Visual Studio в браузере, я сообщил, что команда разработчиков Coder будетVisual Studio CodeПопробуйте перейти в браузер. Это интересный проект, но чего я не ожидал, так это того, что Microsoft официально запустила расширение VSCode для удаленной разработки вскоре после этого, что является просто ритмом официального убийства коллег. отофициальный сайт кодераСудя по информации, они, кажется, сосредоточили свои усилия на корпоративной версии, которую следует считать продуктом, родившимся в неподходящее время. Сегодня мы познакомим вас с собственной платформой Microsoft для удаленной разработки на основе VSCode.

Принцип работы

В принципе, расширение удаленной разработки VSCode эквивалентно копированию VSCode с собственной машины разработчика на целевую машину (удаленный хост) в качестве службы, а локальный VSCode используется в качестве клиента Протоколы удаленной связи координируются и взаимодействуют с каждым другие, а фактическая работа по разработке в основном выполняется на стороне сервера. Что особенного в этой архитектуре, так это то, что расширения, которые мы используем каждый день, также делятся на два лагеря: части, связанные с настройкой интерфейса, в основном включая стили, темы, значки и т. д., выполняются на стороне клиента; тогда как большинство расширений, связанных с разработка выполняется на стороне сервера. Позже в части фактической работы мы увидим соответствующие изменения в интерфейсе.

В настоящее время удаленная разработка VSCode поддерживает следующие три основных режима:

  • Удаленный SSH: подключитесь к серверу Linux через SSH;
  • Удаленный контейнер: подключитесь к контейнеру Docker;
  • Удаленный WSL: подключитесь к установленной среде WSL.

В этой статье в основном представлен первый метод, основанный на SSH. За исключением некоторых различий в начальной конфигурации, контейнерный метод в основном одинаков с точки зрения конкретного использования. Что же касается WSL, то на данный момент его можно считать ничем не отличающимся от запуска линукса с виртуальной машины, так что я бы не стал на него обращать особого внимания. Студенты, которые хотят использовать этот метод, могут обратиться кофициальная документация.

предпосылки

чтобы использоватьVSCode Remote SSH, сначала убедитесь, что вы понимаете некоторые из его ограничений и требований.

  • Remote SSHВ качестве сервера поддерживается только Linux, и это должна быть 64-разрядная версия. Вероятно, это связано с тем, что Linux имеет только полную поддержку SSH-сервера, а Windows или MacOS требуют дополнительной работы. Учитывая, что большинство производственных серверов должны быть Linux, я считаю, что это ограничение не является проблемой для большинства студентов;
  • Для определенного типа Linux официальная поддержка включает три основных дистрибутива: Debian, RHEL/CentOS и Ubuntu. Многие другие дистрибутивы Linux также должны работать, но нет никаких гарантий, и есть несколько более редких дистрибутивов, которые не поддерживаются (в основном из-за проблем с поддержкой в ​​базовых средах, таких как glibc). Кроме того, предпочтительна CentOS 7.x или выше, версии 6.x обычно требуют определенных настроек для работы (см.:Updating glibc and libstdc++ on RHEL / CentOS 6);
  • Конечно, чтобы использовать метод Container или WSL, на машине должна быть базовая среда Docker или WSL;
  • На локальном компьютере должен быть клиент командной строки SSH. Для Win10, если патч не слишком старый, OpenSSH уже должен быть встроен.PuttyВ настоящее время не поддерживается.

Установите расширение

Подтвердите, что предварительные условия выполнены, а затем вы должны установить расширение для удаленной разработки в свой собственный VSCode.

Имя расширения для удаленной разработки:Remote Development, который на самом деле является пакетом расширений (Extension Pack) отRemote-SSH,Remote-Containers,Remote-WSLтак же какPythonЧетыре расширения объединены, кромеPythonВ основном используется для поддержки функций, остальные три расширенные функции очевидны. В настоящее время расширение все еще находится в предварительной версии, но его можно установить в официальной версии VSCode (если оно не может быть установлено, подтвердите, что версия VSCode выше, чем1.35).

Настроить SSH-ключ

Чтобы подключиться к серверу через SSH, мы можем использовать имя пользователя/пароль или ключ SSH. Для среды повседневного использования метод на основе ключа SSH, хотя первоначальная настройка немного сложнее, может быть выполнен один раз и навсегда.

Генерация SSH-ключей и их распространение на удаленные машины — это рутинная операция по эксплуатации и обслуживанию сервера, и конкретный процесс здесь повторяться не будет. Официальная документация также содержит более подробнуюпошаговое руководство, учащиеся, которым это нужно, могут обратиться к нему.

Вот дополнительное примечание: для клиентов Windows сгенерированный ключ обычно находится в каталоге %USERPROFILE%.ssh. Мы будем использовать этот каталог в последующих разделах конфигурации.

подключиться к серверу

После настройки ключа SSH вы можете подключиться к серверу. Самый прямой способ — через палитру команд, выбрать командуRemote-SSH: Connect to Host, а затем следуйте инструкциям, чтобы ввести формат какuser@hostадрес сервера.

Однако явно негуманно вручную вводить адрес каждый раз при открытии среды, поэтому расширение удаленной разработки предоставляет нам способ сохранить конфигурацию сервера. Этот метод обычно вызывается через командную панель:Remote-SSH: Open Configuration File.

Эта команда, в свою очередь, предлагает нам выбрать файл конфигурации для редактирования.

Вы можете подумать, что два файла на приведенном выше рисунке представляют конфигурации на уровне компьютера и на уровне пользователя соответственно, и обычно следует выбирать конфигурацию на уровне пользователя. После открытия вы увидите, что он предоставил нам шаблон по умолчанию. Мы добавляем серверные записи в формате и дополнительно предоставляем параметр местоположения для файла сертификата. Для адреса сервера и имени пользователя введите в соответствии с вашей реальной ситуацией:

# Read more about SSH config files: https://linux.die.net/man/5/ssh_config
# Host alias
#    HostName hostname
#    User user

Host test-server
    HostName <192.168.207.130>
    User <user>
    IdentityFile C:/Users/<user>/.ssh/id_rsa

После установки расширения для удаленной разработки мы заметим, что под панелью активности есть значок удаленного доступа. Щелчок по этому значку откроет удаленное представление, содержащее определенные нами серверы. Щелкните правой кнопкой мыши сервер и выберитеConnect to Host in Current/New Window, он откроет соединение с сервером в текущем или новом окне, что позволит вам начать работу.

Работа по инициализации при первом подключении к удаленному серверу занимает некоторое время, и открыть его позже будет гораздо быстрее. Пожалуйста, наберитесь терпения и дождитесь завершения инициализации сервера, если все пойдет хорошо, вы увидите переход VSCode в режим удаленной разработки.

Удаленный режим разработки

При работе в удаленном режиме вы заметите некоторые отличия от локальной разработки.

Во-первых, зеленый текст в левой части строки состояния будет четко указывать на то, что вы в данный момент находитесь в удаленном режиме (цвета могут отличаться в зависимости от других тем):

Во-вторых, когда вы используете команду «Открыть файл» или «Открыть каталог», вы также обнаружите, что теперь отображается не локальный файловый диалог операционной системы, а другой интерфейс для выбора пути на удаленном сервере. :

Также обратите внимание на следующие изменения расширенного представления.

Из рисунка видно, что расширение удаленной разработки и некоторые темы интерфейса хранятся в локальном VSCode, а расширение, используемое для разработки, локально отключено. Возможно, из-за соображений производительности эти расширения не устанавливаются автоматически на удаленный сервер, поэтому для удаленного включения этих расширений необходимо выбрать определенные расширения на схеме.Install on SSH <server>Заказ. Для расширений, которые были установлены на удаленном конце, будет отображаться сообщение с подсказкой.Extension is enabled on SSH <server> and disabled locally.

Следующие операции ничем не отличаются от обычной локальной разработки. Вы можете открывать каталоги, редактировать файлы, запускать программы и многое другое. Но следует отметить, что почти все операции теперь выполняются на сервере за кулисами.Если вы все еще подсознательно думаете, что это локальная операция, это иногда будет немного сбивать с толку, поэтому вам следует придерживаться его некоторое время, чтобы получить привык к этому.

Еще одно предложение: если сервер — Linux, а клиент — Windows, и вы собираетесь открыть репозиторий Git, рассмотрите возможность настройки в Git.autocrlf = false, чтобы избежать необъяснимых изменений, вызванных различиями в обработке новых строк на разных платформах.

настраивать

Недавно я записал классИзучение панорамы кода Visual Studio, в которых структура множества имеет особое представление. Настройка VSCode представляет собой очень гибкую, но очень сложную иерархическую структуру, в контексте удаленной разработки, добавления настроек удаленного источника, поэтому структура более сложная.

По умолчанию локальная пользовательская конфигурация VSCode автоматически применяется к среде удаленного сервера без каких-либо дополнительных действий с нашей стороны. Однако клиент и сервер, как правило, представляют собой разные операционные системы, и между ними неизбежно существуют некоторые различия, поэтому иногда приходится настраивать удаленную среду отдельно. Для этого VSCode предоставляет командуOpen Remote SettingsСпециально используется для редактирования удаленной конфигурации. Как и другие команды, вы можете вызывать ее из палитры команд.

Кроме того, удаленная разработка также регистрирует некоторую собственную уникальную информацию о конфигурации. Важнейшим из которых может бытьremote.extensionKind. Как мы упоминали в основной части ранее в этой статье, для поддержки режима удаленной разработки VSCode делит расширение на два типа запуска: локальный и удаленный. Вообще говоря, VSCode автоматически определяет, где следует разместить расширение, но в некоторых случаях это может быть непросто определить, поэтому VSCode позволяет нам настроить его самостоятельно.

{
    "remote.extensionKind": {
        "ext1": "ui",
        "ext2": "workspace"
    }
}

Для каждого расширения мы можем установить его вuiилиworkspaceПредставление включено на локальном / сервере. Таким образом, VSCode при запуске удаленного режима будет расширяться для получения соответствующего лечения. Если вы все еще чувствуете себя немного запутанным, я предлагаю оглянуться назад в начале графика статьи.

немного техники внутри

При работе в удаленном режиме почти все операции, связанные с разработкой, выполняются на удаленном сервере. Это также включает Терминал. Вы можете попробовать ввести некоторые команды в терминале, вы можете найти из подсказок и результатов, что это не Windows Cmd клиента, а настоящий терминал Linux. Кроме того, мы также обнаружим, что VSCode создаст.vscode-serverкаталог, который на самом деле является полной программой VSCode (длинный инфикс используется для различения разных сеансов, но специально не проверялся). Все расширения разработки, открытые на сервере, также будут автоматически скопированы в соответствующие подкаталоги.

Если вы хотите получить некоторое представление о работе удаленного режима, на панели вывода естьRemote-SSHПредставления могут дать вам некоторую информацию. Вывод этого вывода по-прежнему ограничен, но вы также можете увидеть некоторые подробности запуска службы и вызова команды. Кроме того, выходной видLog (Remote Server)а такжеLog (Remote Extension Host)Также отображаются некоторые записи журнала, относящиеся к серверу.

Я лично хочу узнать некоторые детали удаленной разработки на уровне исходного кода, но, к сожалению, в официальной кодовой базе Microsoft есть только некоторые документы и шаблоны задач, а исходный код расширений для удаленной разработки не открыт. На самом деле, если вы внимательно изучите некоторые детали удаленной разработки, то сможете понять, что удаленная разработка должна быть тесно связана с базовой архитектурой VSCode во многих аспектах, поэтому весьма вероятно, что расширение будет объединено с основным кодом VSCode. VSCode после того, как функция постепенно стабилизируется, больше не появляется как отдельное расширение. Конечно, это слова моей личной семьи, можете и вы их послушать.

Проблемы, о которых следует знать

Удаленная разработка VSCode все еще находится в состоянии предварительного просмотра, и она также имеет относительно большие изменения в некоторых внутренних архитектурах VSCode, все еще может быть много ошибок и могут быть некоторые проблемы совместимости для сторонних расширений. Если вы обнаружите какие-либо проблемы в использовании, вы можете перейти кПроблема удаленной разработкиНайдите или сообщите, или обратитесь к официальной документацииTroubleshootingдля решения некоторых общих проблем.

Если вы сами являетесь разработчиком расширений, имейте в виду, что некоторые из прошлых практик в удаленном режиме могут быть проблематичными, особенно для собственных библиотек nodejs, которые напрямую обращаются к локальным функциям. Microsoft также перечисляет некоторые распространенные сценарии, которые могут вызвать проблемы, и предлагаемые решения, пожалуйста, прочтите:Supporting Remote Development.

личное впечатление

Согласно официальному видению Microsoft и опыту некоторых разработчиков, удаленная разработка VSCode в основном используется для кроссплатформенной разработки, унифицированной среды разработки, моделирования песочницы и других сценариев. Для общего личного развития, мое ощущение, что управление через SSH немного медленнее, чем локальная разработка, теряется ощущение плавности, и у меня лично нет особо сильных требований к вышеперечисленным сценариям, поэтому удаленная разработка для меня, по крайней мере, пока , Это не имеет особого смысла. Но нужно признать, что этот метод дает большой простор для фантазии, и весьма вероятно, что в будущем будет замечен другой более полезный геймплей, так что это все же направление, достойное внимания.

Однако с архитектурной точки зрения у меня есть некоторые опасения по поводу этого расширения. Основная проблема — сложность. Основные проблемы, которые я вижу, включают в себя:

  • В настоящее время уровень настройки VSCode довольно сложен, и из официального выпуска можно почувствовать, что, поскольку эта архитектура имеет слишком много ответвлений и сложна в управлении, некоторые проблемы должны быть трудными для решения, и даже разработчики Microsoft не могут дать четкий ответ. А удаленный режим разработки усложнит эту структуру, что может сделать ее еще хуже;
  • Для расширенной локальной/удаленной классификации это также усложняет управление расширениями и менее интуитивно понятно;
  • Это также накладывает дополнительную нагрузку на разработчиков расширений: некоторые способы использования, которые работали в прошлом, могут вообще не работать в удаленном режиме, и этим разработчикам необходимо понимать некоторые тривиальные технические детали. Повышение порога для разработчиков расширений может нанести ущерб процветающей экосистеме VSCode.

В конечном счете, не лучше ли отделить функцию удаленной разработки в отдельный продукт? Э-э, я тоже не знаю.

О Фундебаге

FundebugСосредоточьтесь на JavaScript, апплете WeChat, мини-игре WeChat, апплете Alipay, React Native, Node.js и мониторинге ошибок онлайн-приложений Java в режиме реального времени. С момента официального запуска Double Eleven в 2016 году Fundebug обработала в общей сложности более 1 миллиарда ошибок, включая Sunshine Insurance, Walnut Programming, Lizhi FM, Head 1:1, Weimai, Youth League Club и многие другие бренды. Бесплатная пробная версия приветствуется!