익스텐션 게시하기
익스텐션을 완성한 경우에, 다른 사람들이 익스텐션을 찾고 다운로드하고 사용할 수 있게 VS Code Extension Marketplace에 게시 할 수 있습니다. 다른 방법으로, 익스텐션을 설치 가능한 VSIX 포맷의 패키지로 만들어 다른 사람들과 공유 할 수 있습니다.
이번 주제에서 다루는 내용:
- VS Code 익스텐션을 관리 하는 CLI 툴인
vsce
를 사용하기 - 익스텐션을 패키징, 게시 그리고 게시 취소하기.
- 익스텐션 게시를 위한
publisherId
등록 하기
vsce
vsce는 ‘Visual Studio Code Extension’의 줄임말로 VS Code 익스텐션을 패키징, 게시, 관리하는 커맨드라인 도구 입니다.
설치
Node.js가 설치되어 있는지 확인 후 다음을 실행하십시오:
npm install -g vsce
사용예시
vsce
를 사용하여 익스텐션을 쉽게 패키징하고 게시 할 수 있습니다.
$ cd myExtension
$ vsce package
# myExtension.vsix generated
$ vsce publish
# <publisherID>.myExtension published to VS Code MarketPlace
또한 vsce
로 익스텐션 검색, 메타데이터 검색, 게시 취소를 할 수 있습니다. 가능한 모든 vsce
명령어를 확인하려면, vsce --help
를 실행하십시오.
익스텐션 게시하기
메모 보안 문제로 인해, vsce
는 사용자 제공 SVG 이미지를 포함하는 익스텐션을 게시 할 수 없습니다.
게시 도구는 다음 상황들을 만족해야합니다.
package.json
에 제공되는 아이콘은 SVG 가 아니어야 합니다.package.json
에 쓰이는 뱃지는 검증된 뱃지 제공자로부터 온 SVG만 허용 됩니다.README.md
와CHANGELOG.md
의 이미지 URL은https
URL로 제공되어야 합니다.README.md
와CHANGELOG.md
의 이미지는 검증된 뱃지 제공자로부터 온 SVG만 허용 됩니다.
Visual Studio Code 는 마켓플레이스 서비스를 위해 Azure DevOps를 사용합니다. 이는 익스텐션의 검증, 호스팅, 관리가 Azure DevOps를 통해서 행해진다는것을 의미합니다 .
vsce
는 Personal Access Tokens를 사용해야만 익스텐션을 게시할 수 있습니다. 익스텐션 게시를 위해서 적어도 한개 이상을 생성하십시오.
Personal Access Token 생성하기
먼저, Azure DevOps organization가 있는지 확인하십시오.
예시에서 vscode
를 organization 의 이름으로 사용합니다. 여러분의 organization의 홈페이지에서 (예를 들면: https://dev.azure.com/vscode
), 프로필 이미지 옆의 유저 설정 메뉴를 열고 Personal access tokens를 선택하십시오.
Personal Access Tokens 페이지에서, New Token을 클릭하여 새로운 Personal Access Token을 생성하십시오:
Personal Access Token에 이름을 부여하고, 모든 organization에서 접근 가능하게 한 다음, custom defined 범위를 선택하여 Show all scopes를 클릭하십시오. 필요한 경우 만료기간을 1년으로 연장하십시오.
마지막으로, 가능한 범위들을 Marketplace를 찾을 때까지 아래로 스크롤하여 Acquire 과 Manage 모두 선택하십시오:
Create를 선택하면 이제 새로운 Personal Access Token을 생성 할 것입니다. 토큰을 Copy 하십시오. 게시자를 생성할때 필요합니다.
게시자 생성하기
게시자 는 Visual Studio Code 마켓플레이스에 익스텐션을 게시할 수 있는 신분입니다. 모든 익스텐션은 package.json
파일에 publisher
이름이 포함되어있어야만 합니다.
Personal Access Token을 만들고 나면, 여러분은 vsce
를 사용하여 새로운 게시자를 생성 할 수 있습니다.
vsce create-publisher (publisher name)
vsce
는 현재 게시자의 이후 사용을 위해 제공된 Personal Access Token 정보를 기억할 것입니다.
메모 다음 섹션에서 설명하는 대로 게시자를 마켓플레이스 게시자 관리 페이지에서 생성한 다음 vsce
를 통해서 로그인 하는 방법도 있습니다 .
게시자로 로그인하기
이미 게시자를 생성했고 vsce
에서 사용하려는 경우:
vsce login (publisher name)
create-publisher
명령과 유사하게, vsce
는 사용자의 Personal Access Token을 요구하고 이후의 명령어를 위해 기억할 것입니다.
한편, 사용자의 Personal Access Token을 추가 파라미터 -p <token>
를 사용하여 입력 할 수도 있습니다.
vsce publish -p <token>
익스텐션 버전의 관리
사용자는 익스텐션을 게시할때 SemVer에 호환 되는 버전을 표기하는 것 : major
, minor
, patch
으로 버전 넘버를 관리 할 수 있습니다.
예를 들어, 만약 익스텐션의 버전을 1.0.0 에서 1.1.0 으로 업데이트 하려는 경우, minor
로 표기하십시오:
vsce publish minor
이는 익스텐션을 게시 하기 전에, 익스텐션의 package.json
[version] 항목을 수정할 것입니다.
커맨드 라인에서 온전한 SemVer에 호환 되는 버전을 표기하는 방법도 있습니다.
vsce publish 2.0.1
메모 : 만약
vsce publish
가 깃 저장소에서 실행 되는 경우, 태그가 npm-version으로 달린 버전 커밋이 생성될 것입니다. 기본 커밋 메세지는 익스텐션의 버전이지만, 다른 커밋 메세지를-m
플래그를 이용하여 사용 할 수 있습니다. ( 현재 버전은 커밋 메세지에서%s
를 통해 참조 가능합니다.)
익스텐션 게시 취소하기
vsce
에서 익스텐션 ID publisher.extension
을 통해 익스텐션 게시를 취소할 수 있습니다.
vsce unpublish (publisher name).(extension name)
메모: 익스텐션 게시를 취소할 때, 마켓플레이스에서 수집된 익스텐션 통계가 제거 될 것입니다. 경우에 따라 퍼블리싱을 취소하기보단 업데이트 하십시오.
익스텐션 패키징하기
만약 익스텐션을 로컬 VS Code에서 설치 후 테스트 하려 하거나 혹은 VS Code 마켓플레이스에 게시 하지 않고 익스텐션을 배포 하고자 하는 경우, 익스텐션을 패키징 하는 방법을 선택 하십시오. vsce
는 사용자가 쉽게 설치 할 수 있는 VSIX
파일로 익스텐션을 패키징 할 수 있습니다. 어떤 익스텐션들은 VSIX 파일을 깃허브 릴리즈를 통해 퍼블리시 하기도 합니다.
익스텐션 저자는 익스텐션의 루트 폴더에서 vsce package
를 실행하여 VSIX 파일을 만들 수 있습니다.
사용자가 VSIX 파일을 받았을 경우, code --install-extension my-extension-0.0.1.vsix
명령어를 사용하여해 익스텐션을 설치할 수 있습니다.
비공개적으로 공유하기
만약 익스텐션을 비공개적으로 공유하려는 경우, 패키지된 익스텐션 .vsix
파일을 보내십시오.
익스텐션 폴더
익스텐션을 불러오려면, 사용자는 VS Code 익스텐션 폴더 .vscode/extensions
에 파일을 복사 해야 합니다. 이는 사용중인 플랫폼에 따라 다음 폴더에 위치해 있습니다.
- Windows
%USERPROFILE%\.vscode\extensions
- macOS
~/.vscode/extensions
- Linux
~/.vscode/extensions
Visual Studio Code와의 호환성
익스텐션을 작성할때, package.json
내부의 engines.vscode
를 통해서 Visual Studio Code와의 호환성을 표기 해야 합니다.
{
"engines": {
"vscode": "^1.8.0"
}
}
1.8.0
의 값은 익스텐션이 오직 VS Code 1.8.0
버전에만 호환 가능함을 의미합니다. ^1.8.0
은 익스텐션이 VS Code 버전 1.8.0
그리고 1.8.1
, 1.9.0
과 같이 그 이상과도 호환 가능함을 의미합니다.
engines.vscode
필드를 사용하여 익스텐션이 의존하는 API를 포함하고 있는 클라이언트에만 설치 할 수 있게 하십시오. 이러한 메커니즘은 Insider에서의 안정적인 릴리스를 가능하게 합니다.
예를 들어, 최근의 VS Code Stable 버전이 1.8.0
이고 새로운 API를 포함하는 1.9.0
버전에서 개발 중인 경우 1.9.0-insider
를 통해 릴리스 할 수 있습니다. 만약 익스텐션 버전을 1.9.0
의 새로운 API를 활용할 수 있게 게시 하려는 경우, 버전 의존성을 ^1.9.0
으로 표기해야 합니다. 새로운 익스텐션 버전으로 인해 VS Code >=1.9.0
에서만 설치 가능할 것이고, 이는 현재 1.9.0
의 사용자는 사용 가능하지만, Stable 버전을 사용 하는 다른 사용자의 경우 Stable 버전이 1.9.0
가 될 때 사용 가능함을 의미합니다.
고급 사용법
마켓플레이스 완성
여러분의 익스텐션이 Visual Studio 마켓플레이스에서 어떤식으로 보일지 커스터마이즈 할 수 있습니다. Go extension에 있는 예시를 참조하십시오.
여러분의 익스텐션을 더욱 멋져보이게 하는 몇가지 팁이 있습니다.
README.md
파일은 익스텐션의 마켓플레이스 페이지의 보여지는 핵심입니다.vsce
는 README 링크를 2가지 방법을 통해 수정 할 수 있습니다.- 만약 여러분의 깃허브 저장소로
package.json
의repository
필드를 더하는 경우,vsce
에서 자동으로 감지하여 링크를 조정 할 것입니다. vsce package
명령어를 사용하면서--baseContentUrl
과--baseImagesUrl
플래그를 사용해서 오버라이드 할 수 있습니다. 그 후 패키지된.vsix
파일의 경로를vsce publish
의 인수로 제공하여 익스텐션을 게시 하십시오.
- 만약 여러분의 깃허브 저장소로
LICENSE
파일은 익스텐션의 라이센스를 명시하기 위해 사용됩니다.CHANGELOG.md
파일은 익스텐션의 change log를 기록하기 위해 사용됩니다.package.json
의galleryBanner.color
를 의도한 hex값으로 설정하여 배너 배경색을 설정할 수 있습니다.- 익스텐션에 포함시킨
128px
정사각형 PNG 파일의 상대 경로를,package.json
의icon
에 설정하여 아이콘을 설정할 수 있습니다.
Marketplace Presentation Tips를 참고하십시오.
.vscodeignore
.vscodeignore
파일을 생성하여 익스텐션 패키지에서 특정 파일들을 배제할 수 있습니다. 이 .vscodeingore
파일은 각 줄마다 반복되는 glob패턴 들로 구성되어 있습니다.
예를 들어:
**/*.ts
**/tsconfig.json
!file.ts
여러분은 실행에 필요하지 않은 모든 파일을 배제해야 합니다. 예를 들어, 익스텐션이 타입스크립트로 작성 된 경우, 예제와 같이 모든 **/*.ts
파일을 배제하십시오.
메모: devDependencies
에 작성된 개발 의존성은 자동으로 배제될것이니, .vscodeignore
파일에 추가하지 마십시오.
Pre-publish 단계
Pre-publish 단계를 여러분의 매니페스트 파일에 더하는것이 가능합니다. 이 명령어는 익스텐션이 패키지 될 때마다 실행 될 것입니다.
{
"name": "uuid",
"version": "0.0.1",
"publisher": "someone",
"engines": {
"vscode": "0.10.x"
},
"scripts": {
"vscode:prepublish": "tsc"
}
}
이는 익스텐션이 패키징 될 때마다 타입스크립트 컴파일러를 호출 할 것입니다.
다음 단계들
- Extension Marketplace - VS Code의 공개적인 익스텐션 마켓플레이스에 대해 더 배우십시오.
- Testing Extensions - 높은 완성도를 위해, 익스텐션에 테스트를 더하십시오.
- Bundling Extensions - webpack으로 bundling하여 여러분의 익스텐션 로드 시간을 개선하십시오.
자주 나오는 질문들
익스텐션을 게시 할때 403 Forbidden (또는 401 Unauthorized) 에러가 발생하는 경우?
PAT(Personal Access Token)을 생성할때 쉬운 실수 중 하나는 계정 필드에서 all accessible accounts
를 선택하지 않는것입니다. (대신 특정 계정을 선택) 또한 작업물을 게시 하기 위해 Authorized 범위를 All scopes
로 설정하십시오.
vsce
를 이용하여 내 익스텐션 게시를 취소 할 수 없는 경우?
익스텐션 ID나 게시자 이름이 변경 되었을 수 있습니다. 대신 여러분의 익스텐션을 마켓플레이스에서 관리 페이지를 통해 직접 관리 할 수 있습니다. 여러분의 퍼블리셔 관리 페이지에서 익스텐션을 업데이트 하거나, 게시 취소하십시오.
vsce 가 파일 속성을 보전 하지 않는 경우?
익스텐션을 Windows에서 만들고 게시하는 경우에 유념해주십시오, 모든 익스텐션 패키지에 포함되어 있는 파일은 POSFIX 파일 속성이 없는, 다시말해 실행가능한 비트 입니다. 어떤 node_modules
는 정상적으로 작동하기 위해 이러한 속성에 의존하기 때문에. Linux와 macOS에서 게시하는 것을 권장됩니다.
Continuous integration (CI) 빌드에서 게시할 수 있습니까?
가능합니다, Continuous Integration 주제의 Automated publishing 섹션을 참조하여 Azure DevOps를 설정하고 자동으로 마켓플레이스에 익스텐션을 게시 하는 방법을 배우십시오.