확장 및 에코시스템 지원

Visual Studio Live Share의 주요 목표 중 하나는 개발자가 즐겨 사용하고 고도로 사용자 지정된 도구에서 편안하게 서로 협업할 수 있도록 하는 것입니다. 이러한 방식으로 임시 상호 작용은 도움을 제공하는 대상과 관계없이 시각적으로 익숙하고 인체 공학적으로 유지되면서 자주 발생할 수 있습니다. 이를 위해서는 협업 세션 내의 참가자가 자신의 개인 기본 설정 및 워크플로(예: 색/아이콘 테마, 키 바인딩, 편집기 생산성 향상 도구)를 지원하는 확장을 계속 사용할 수 있어야 합니다.

또한 높은 생산성을 유지하면서 최대한 빠르게 협업 세션에 참가할 수 있도록 Visual Studio Live Share의 목표는 게스트가 호스트가 공유한 프로젝트별 도구를 자동으로 활용할 수 있도록 하는 것입니다. 이러한 방식으로 추가 설정 없이 링크를 클릭하고 원하는 도구를 실행하고 협업을 시작할 수 있습니다. 이를 위해서는 핵심 편집, 빌드, 디버그 워크플로를 구동하는 확장이 호스트에서 게스트로 투명하게 “원격으로 작동”하여 자동 완성, 정의로 이동, 디버깅 등의 기능이 “원활하게 작동”해야 합니다.

이 문서에서는 방대한 확장 에코시스템의 현재 알려진 상태와 앞서 언급한 목표에 대한 “성과 기록표”를 다룹니다. 이 조건을 충족하지 않지만, 개인 워크플로에 중요한 확장이 있는 경우 알려주세요.

사용자별 확장

사용자별 사용자 지정을 지원하는 확장은 호스트에 대해 작동해야 할 뿐만 아니라 모든 게스트에 대해 작동해야 합니다. 확장이 호스트에 대해 제대로 작동하지 않고(재발할 수 있음) Visual Studio Live Share에서 버그일 확률이 높은 경우 이슈를 제출해 주세요(발견할 경우). 확장이 게스트에 대해 예상대로 동작하지 않는 경우 확장 자체를 변경해야 할 수 있으며, 에코시스템과의 협업을 통해 이러한 시나리오를 해결/개선해 나가겠습니다.

Visual Studio Code

범주 예시 게스트 지원 여부 협업 여부
색 테마 One Dark Pro, Output Colorizer, Rainbow String, Colored Regions, Indented Block Highlighting, Todo Highlight, Bracket Pair Colorizer 해당 사항 없음
아이콘 집합 vscode-icons, Visual Studio Classic Icons 해당 사항 없음
키 바인딩 Vim, IntelliJ IDEA Keybindings, Emacs Friendly Keymap 해당 사항 없음
코드 조각 Angular v5 Snippets, HTML Snippets, SVG Icons, File Header N/A1
조직 Settings Sync, Project Manager, Timeit, Checkpoints, TODO Parser, Favorites(❌), Bookmarks(❌) 2 해당 번호 3
생산성 GitLens, Auto-Rename Tag, Code Outline, Color Highlight, Increment Selection, Bracketeer, Image Preview, JSON Helper (Hover), Color Picker, Copy Word in Cursor, CodeMetrics(CodeLens), Git Co-Authors, JavaScript Booster(CodeActions), Turbo Console Log, Goto Next/Previous Member, Auto-scroll, NPM Import Version(❌), Import Cost(❌) 2 3
REPL REST Client, Code Runner, Quokka.js, R 4 3
리소스 관리자 mssql, ftp-simple, Azure Functions, Docker, Brew Services 5 3

1사용자가 이미 코드 조각에 익숙하지 않은 경우 해당 코드 조각을 사용할 수 있을 것으로 예상하지 않으므로 공유하도록 하는 것이 반드시 의미가 있는 것은 아닙니다.

2이러한 확장 범주는 매우 다양하기 때문에 모두 작동한다고 말할 수 없습니다. 그러나 이론적으로는 그렇지 않은 주요 사항을 추적합니다.

3이러한 확장 범주는 공동 작업 환경의 이점을 얻을 수 있으므로 이를 알아보려면 최종 사용자 피드백이 필요합니다.

4이를 위해서는 게스트가 런타임 도구(예: Node.js)를 설치하고 코드를 로컬로 실행하여 작동해야 합니다.

5이러한 작업은 특정 종류의 서버에 연결하여 작동하며, 게스트가 공유한 중앙 집중식 서버 중 하나에서 작동할 수 있습니다.

프로젝트별 확장

애플리케이션의 핵심 편집, 빌드, 디버깅을 지원하고 언어/플랫폼/라이브러리/SDK와 관련된 호스트 설치 확장은 아무것도 설치할 필요 없이 게스트가 자동으로 사용할 수 있어야 합니다. 이러한 방식으로 호스트는 프로젝트의 생산적인 개발을 지원하도록 환경을 설정할 수 있으며, 추가 필수 조건 없이 게스트가 즉시 프로젝트에 참가할 수 있도록 할 수 있습니다. 프로젝트별 확장은 어떤 방식으로든 주관적이거나 개인적이지 않으므로 누구나 익숙한 환경에 영향을 주지 않고 호스트에서 게스트로 결정론적으로 공유할 수 있습니다.

또한 게스트는 설치했지만, 호스트는 설치하지 않은 프로젝트별 확장을 지원하기 위해 성능은 저하되었지만, 작동하는 환경(예: 단일 파일 IntelliSense 가져오기, 문서 서식을 지정하는 기능)을 제공하는 것이 좋습니다.

범주 예시 공유 여부 게스트 지원 여부
문법/구문 강조 표시 Fish Shell, Nginx, Vetur, DotEnv, ES6 String HTML, Todo+, Rainbow CSV
언어 서비스 YAML, Path Intellisense, ARM 1 2
JSON 스키마 Azure Functions
Linter ESLint, Markdownlint, Code Spell Checker, PHPCS 2
포맷터 Prettier, Beautify 2
디버거 Python, Debugger for Chrome 3 4
Test Runner Java Test Runner, Mocha Sidebar, Postman Runner, Jest Runner, Neptune 5 2
사용자 지정 파일 미리 보기 SVG Preview, GraphViz, Markdown Image Size
파일/프로젝트 생성기 Azure Functions, C/C++ Project Generator 6
소스 제어 공급자 SVN, Hg

1현재 C# 및 JavaScript/TypeScript만 해당됩니다.

2게스트는 로컬 파일에 액세스할 수 없으므로 현재 활성 문서만 지원합니다.

3핵심 디버깅 환경은 공유되지만 시작된 서버는 자동으로 전달되지 않습니다.

4게스트는 앱의 로컬 복사본이 없으므로 실행 중인 앱 및 디버그 세션은 호스트의 컴퓨터에서 시작해야 합니다.

5테스트 실행의 출력에는 결과 터미널, 출력 창 및 오류도 게스트와 공유되어야 합니다.

6거의 모든 항목이 Node.js fs 모듈을 직접 사용하여 파일을 만들며 이는 작동하지 않습니다.

알려진 문제

다음은 현재 알려진 확장 문제로서 이러한 문제는 협업 세션(및 해결 방법) 컨텍스트 내에서 확장이 게스트에 대해 작동하지 못하도록 할 수 있어 워크플로에 영향을 줄 수 있습니다.

Visual Studio Code

문제 이유 해결 방법
Node.js fs 모듈을 사용하여 파일(예: 구성 파일) 검색/읽기 또는 디렉터리 열거(언어 서비스가 아님) 게스트가 로컬 파일 액세스 권한이 없습니다. 1. 사용자 환경을 정상적으로 저하합니다(가능한 경우).

2. openTextDocumentfindFiles 작업 영역 API를 사용하여 파일을 읽고 열거합니다.
Node.js fs 모듈을 사용하여 파일 만들기 또는 쓰기 위와 동일 N/A API를 사용하여 openTextDocument(Uri) 파일을 만들 untitled 수 있지만 특정 경로의 파일 시스템에 직접 저장할 수는 없습니다.
프로젝트 번들 라이브러리 또는 도구에 따라 달라짐 위와 동일 1. 확장과 함께 종속성의 대체 버전을 번들로 묶습니다.

2. 게스트가 명시적으로 설치하겠다고 선택하는 경우 게스트 차단을 해제하도록 전역 설치를 지원합니다.

3. 호스트에 사용 가능한 올바른 종속성이 있을 수 있으므로 가능한 경우 상태/작업을 원격으로 작동시킵니다.
Node.js fs 모듈을 사용하여 디렉터리 만들기 위와 동일 해당 사항 없음
file 체계를 사용하는 문서로 기능을 제한함 게스트 쪽의 파일이 vsls 체계를 사용합니다. vsls 문서에 대한 지원을 추가합니다().
Uri.file 메서드 및/또는 Uri.fsPath/TextDocument.fileName 멤버를 사용하여 URI 직렬화/구문 분석 위와 동일 파일 체계를 유지 관리하고 준수하는 Uri.parseUrl.toString()을 대신 사용합니다().
Uri 대신 파일 경로에 workspace.openTextDocument 메서드 사용 위와 동일 원시 파일 경로 문자열 대신 Uri 인스턴스를 제공합니다().
workspace.rootPath 속성을 사용하여 작업 영역의 존재 여부 검색 workspace.rootPath 속성이 workspace의 첫 번째 workspaceFolder에 대해 Uri.fsPath를 호출합니다(위에서 언급한 것과 같은 문제가 있음). 대신 workspace.workspaceFolders 속성을 사용하여 작업 영역의 존재 여부를 검색하고, 필요한 경우 각 workspaceFolderUri.scheme을 살펴보고 로컬인지 여부를 확인합니다.
언어 서비스를 등록할 때 문서 체계를 지정하지 않음(LanguageClient 또는 languages.register* 메서드를 통해) 게스트가 로컬 확장과 호스트 둘 다에서 언어 서비스 결과를 받으므로 두 참가자가 같은 언어 서비스 확장을 설치한 경우 게스트는 특정 항목에 대해 중복된 항목(예: 자동 완성, 코드 작업)을 보게 됩니다. 언어 서비스를 fileuntitled 체계로만 제한합니다().
문서의 DiagnosticCollection을 채우기 전에 문서의 Uri.scheme을 검사하지 않음 위와 동일 Uri.scheme === filedocuments에 대해서만 Diagnostics를 생성합니다().
사용자 지정 TaskProvider에서 Tasks를 반환할 때 작업 영역 체계를 검사하지 않음 게스트가 모든 원격 및 로컬 작업을 표시하므로 두 참가자가 모두 같은 확장을 설치한 경우 중복된 항목이 표시됩니다. Uri.scheme === fileWorkspaceFolder에 대해서만 Tasks를 반환합니다().

참고 항목

문제가 있으신가요? 문제 해결을 참조하거나 피드백을 제공해 주세요.