확장 및 에코시스템 지원
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 | ✅ | 해당/A 1 |
조직 | 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 사이드바, 제스트 러너, 해왕성 | ❌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. openTextDocument 및 findFiles 작업 영역 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.parse 및 Url.toString() 을 대신 사용합니다(예). |
Uri 대신 파일 경로에 workspace.openTextDocument 메서드 사용 |
위와 동일 | 원시 파일 경로 문자열 대신 Uri 인스턴스를 제공합니다(예). |
workspace.rootPath 속성을 사용하여 작업 영역의 존재 여부 검색 |
workspace.rootPath 속성이 workspace 의 첫 번째 workspaceFolder 에 대해 Uri.fsPath 를 호출합니다(위에서 언급한 것과 같은 문제가 있음). |
대신 workspace.workspaceFolders 속성을 사용하여 작업 영역의 존재 여부를 검색하고, 필요한 경우 각 workspaceFolder 의 Uri.scheme 을 살펴보고 로컬인지 여부를 확인합니다. |
언어 서비스를 등록할 때 문서 체계를 지정하지 않음(LanguageClient 또는 languages.register* 메서드를 통해) |
게스트가 로컬 확장과 호스트 둘 다에서 언어 서비스 결과를 받으므로 두 참가자가 같은 언어 서비스 확장을 설치한 경우 게스트는 특정 항목에 대해 중복된 항목(예: 자동 완성, 코드 작업)을 보게 됩니다. | 언어 서비스를 file 및 untitled 체계로만 제한합니다(예). |
문서의 DiagnosticCollection 을 채우기 전에 문서의 Uri.scheme 을 검사하지 않음 |
위와 동일 | Uri.scheme === file 인 documents 에 대해서만 Diagnostics 를 생성합니다(예). |
사용자 지정 TaskProvider 에서 Tasks 를 반환할 때 작업 영역 체계를 검사하지 않음 |
게스트가 모든 원격 및 로컬 작업을 표시하므로 두 참가자가 모두 같은 확장을 설치한 경우 중복된 항목이 표시됩니다. | Uri.scheme === file 인 WorkspaceFolder 에 대해서만 Tasks 를 반환합니다(예). |