νƒ€μž…μŠ€ν¬λ¦½νŠΈλ‘œ λΉ„μ£Όμ–Ό μŠ€νŠœλ””μ˜€ ν™•μž₯을 μž‘μ„±ν•  μ€€λΉ„λ₯Ό ν•˜κ³ , μž‘μ„±λœ ν™•μž‘μ„ κ²Œμ‹œν•˜λŠ” λ‚΄μš©μ— λŒ€ν•œ λ¦¬λ·°μž…λ‹ˆλ‹€.

λΉ„μ£Όμ–Ό μŠ€νŠœλ””μ˜€ μ½”λ“œμ˜ ν™•μž‘μ— λŒ€ν•œ μ •λ³΄λŠ” Extension API νŽ˜μ΄μ§€μ—μ„œ μ œκ³΅ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.

μ€€λΉ„

Your First Extension: Visual Studio Code νŽ˜μ΄μ§€μ—μ„œ νƒ€μž…μŠ€ν¬λ¦½νŠΈλ‘œ ν™•μž₯을 μž‘μ„±ν•˜λŠ” 방법을 μ•Œλ €μ€λ‹ˆλ‹€.

yoman νŒ¨ν‚€μ§€μ™€ VS Code Extension Generator νŒ¨ν‚€μ§€λ₯Ό μ‚¬μš©ν•΄μ„œ λΆ€νŠΈμŠ€νŠΈλž© μ½”λ“œλ₯Ό 얻을 수 μžˆμŠ΅λ‹ˆλ‹€.

의쑴 νŒ¨ν‚€μ§€ μ„€μΉ˜

$ npm install -g yo generator-code # yoman νŒ¨ν‚€μ§€μ™€ vs code extension generator νŒ¨ν‚€μ§€λ₯Ό 전역에 μ„€μΉ˜ν•©λ‹ˆλ‹€.

ν”„λ‘œμ νŠΈ μ΄ˆκΈ°ν™”

$ yo code # ν”„λ‘œμ νŠΈλ₯Ό μ΄ˆκΈ°ν™”ν•˜κΈ° μœ„ν•œ 정보λ₯Ό μž…λ ₯λ°›λŠ” λ‚΄μš©μ΄ 좜λ ₯λ©λ‹ˆλ‹€. (μ•„λž˜ λͺ©λ‘μ„ ν™•μΈν•˜μ„Έμš”.)
  1. What type of extension do you want to create?
    1. New Extension (TypeScript) πŸ‘‰ 선택
    2. New Extension (JavaScript)
    3. New Color Theme
    4. New Language Support
    5. New Code Snippets
    6. New Keymap
    7. New Extension Pack
    8. New Language Pack (Localization)
    9. New Web Extension (TypeScript)
    10. New Notebook Renderer (TypeScript)
  2. What’s the name of your extension? ν™•μž₯ 이름 μž…λ ₯
  3. What’s the identifier of your extension? ν™•μž₯ μ‹λ³„μž μž…λ ₯
  4. What’s the description of your extension? μ„€λͺ…을 μž…λ ₯
  5. Initialize a git repository? git μ €μž₯μ†Œ μ΄ˆκΈ°ν™” N λ˜λŠ” git μ €μž₯μ†Œ URI
  6. Bundle the source code with webpack? webpack을 μ‚¬μš©ν•΄μ„œ λ²ˆλ“€λ§ Y
  7. Which package manager to use?
    1. npm πŸ‘‰ 선택
    2. yarn
    3. pnpm
  8. Do you want to open the new folder with Visual Studio Code?
    1. Open with code
    2. Skip

ν”„λ‘œμ νŠΈ 정보λ₯Ό λͺ¨λ‘ μž…λ ₯ν•˜λ©΄ ν™•μž₯의 μ‹λ³„μžμ— ν•΄λ‹Ήν•˜λŠ” 디렉터리가 μž‘μ„±λ˜κ³ , νƒ€μž…μŠ€ν¬λ¦½νŠΈλ‘œ λΉ„μ£Όμ–Ό μŠ€νŠœλ””μ˜€ μ½”λ“œ ν™•μž₯을 μž‘μ„±ν•  수 μžˆλŠ” ν™˜κ²½μ΄ μ€€λΉ„λ©λ‹ˆλ‹€.

μ€€λΉ„λœ ν”„λ‘œμ νŠΈμ˜ package.json νŒŒμΌμ„ 보면, 2. μ—μ„œ μž…λ ₯ν•œ λ‚΄μš©μ΄ displayName 으둜 μ‚¬μš©λ˜κ³ , 3. μ—μ„œ μž…λ ₯ν•œ λ‚΄μš©μ΄ name 으둜 μ‚¬μš©λ˜κ³ , 4. μ—μ„œ μž…λ ₯ν•œ λ‚΄μš©μ΄ description 으둜 μ‚¬μš©λ˜λŠ” 것을 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.

이제, λΉ„μ£Όμ–Ό μŠ€νŠœλ””μ˜€ μ½”λ“œ ν™•μž‘μ„ μž‘μ„±ν•  μ€€λΉ„λ₯Ό λ§ˆμ³€μŠ΅λ‹ˆλ‹€.

μ›ν•˜λŠ” κΈ°λŠ₯을 κ΅¬ν˜„ν•˜κ³ , λΉ„μ£Όμ–Ό μŠ€νŠœλ””μ˜€ λ§ˆμΌ“ν”Œλ ˆμ΄μŠ€μ— κ²Œμ‹œν•˜λ©΄ ν˜Ήμ‹œλ‚˜ λΉ„μŠ·ν•œ κΈ°λŠ₯이 ν•„μš”ν•˜μ‹  뢄듀이 μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

κ²Œμ‹œ

Publishing Extension: Visual Studio Code νŽ˜μ΄μ§€μ—μ„œ μž‘μ„±ν•œ ν™•μž₯을 λΉ„μ£Όμ–Ό μŠ€νŠœλ””μ˜€ λ§ˆμΌ“ν”Œλ ˆμ΄μŠ€μ— κ²Œμ‹œν•˜λŠ” 방법을 μ„€λͺ…ν•©λ‹ˆλ‹€.

λΉ„μ£Όμ–Ό μŠ€νŠœλ””μ˜€ λ§ˆμΌ“ν”Œλ ˆμ΄μŠ€μ— μ‚¬μΈμΈν•˜κ³ , λΉ„μ£Όμ–Ό μŠ€νŠœλ””μ˜€ λ§ˆμΌ“ν”Œλ ˆμ΄μŠ€ 관리 νŽ˜μ΄μ§€μ—μ„œ κ²Œμ‹œμž(Publisher)λ₯Ό μž‘μ„±ν•΄μ•Ό ν•©λ‹ˆλ‹€.

둜컬 κ°œλ°œν™˜κ²½μ—μ„œ κ²Œμ‹œν•˜κΈ° μœ„ν•΄μ„œ, vsce 도ꡬλ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€.

λΉ„μ£Όμ–Ό μŠ€νŠœλ””μ˜€ λ§ˆμΌ“ν”Œλ ˆμ΄μŠ€λŠ” μ• μ Έ 데브옡슀 λ§ˆμΌ“ν”Œλ ˆμ΄μŠ€ μ„œλΉ„μŠ€λ₯Ό μ‚¬μš©ν•˜λ―€λ‘œ, μ• μ Έ 데브옡슀 계정을 μž‘μ„±ν•΄μ•Ό ν•©λ‹ˆλ‹€.

μ• μ Έ 데브옡슀 계정 μž‘μ„±κ³Ό 개인 μ•‘μ„ΈμŠ€ 토큰 (PAT, Personal Access Token)을 μž‘μ„±ν•˜λŠ” 방법을 Publishing Extension: Visual Studio Code#Get a Personal Access Token νŽ˜μ΄μ§€μ—μ„œ μ„€λͺ…ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.

λΉ„μ£Όμ–Ό μŠ€νŠœλ””μ˜€ λ§ˆμΌ“ν”Œλ ˆμ΄μŠ€μ˜ κ²Œμ‹œμž μž‘μƒκ³Ό μ• μ Έ 데브옡슀의 μ•‘μ„ΈμŠ€ 토큰을 μž‘μ„±ν–ˆμœΌλ©΄, 이제 κ²Œμ‹œν•  μ€€λΉ„λ₯Ό λ§ˆμ³€μŠ΅λ‹ˆλ‹€.

κ²Œμ‹œμ „ 확인 사항

Publishing Extension: Visual Studio Code#Publishing extensions νŽ˜μ΄μ§€μ—μ„œ vsce λ„κ΅¬λ‘œ κ²Œμ‹œν•  λ•Œ, ν™•μΈν•˜λŠ” 사항을 μ„€λͺ…ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.

  • μ‚¬μš©ν•˜λŠ” 이미지 파일의 URI λŠ” HTTPS λ₯Ό μ‚¬μš©ν•΄μ•Ό ν•©λ‹ˆλ‹€.
  • svg νŒŒμΌμ€ μ‹ λ’°ν•˜λŠ” μ œκ³΅μžκ°€ μ•„λ‹ˆλ©΄ μ‚¬μš©ν•˜μ§€ μ•ŠλŠ” 것을 ꢌμž₯ν•©λ‹ˆλ‹€.

package.json νŒŒμΌμ— μ•„λž˜ ν•­λͺ©μ΄ μ‘΄μž¬ν•˜λŠ” ν™•μΈν•©λ‹ˆλ‹€.

  • publisher
  • version

κ²Œμ‹œμž μ‹λ³„μž

ν”„λ‘œμ νŠΈμ˜ package.json νŒŒμΌμ„ μ—΄κ³ , publisher ν•­λͺ©μ„ μΆ”κ°€ν•©λ‹ˆλ‹€.

{
    // ... μƒλž΅
    "publisher": "<λΉ„μ£Όμ–Ό μŠ€νŠœλ””μ˜€ λ§ˆμΌ“ν”Œλ ˆμ΄μŠ€ κ²Œμ‹œμž μ‹λ³„μž>"
    // ... μƒλž΅
}

λ²ˆλ“€λ§ 확인

κ²Œμ‹œμ „μ— λ¬Έμ œμ—†μ΄ λ²ˆλ“€μ΄ μž‘μ„±λ˜λŠ”μ§€ ν™•μΈν•©λ‹ˆλ‹€.

$ npm run vscode:prepublish

vsce 도ꡬ μ„€μΉ˜

$ npm install -g vsce

vsce 둜그인

λ™μΌν•œ ν™˜κ²½μ—μ„œ κ²Œμ‹œλ₯Ό μ‹œλ„ν•˜λŠ” 쀑이면 졜초 ν•œλ²ˆλ§Œ vsce λ‘œκ·ΈμΈμ„ μ§„ν–‰ν•˜μ‹œλ©΄ λ©λ‹ˆλ‹€.

$ vsce login <λΉ„μ£Όμ–Ό μŠ€νŠœλ””μ˜€ λ§ˆμΌ“ν”Œλ ˆμ΄μŠ€ κ²Œμ‹œμž μ‹λ³„μž>

개인 μ•‘μ„ΈμŠ€ 토큰(PAT, Personal Access Token) μž…λ ₯을 κΈ°λ‹€λ¦¬λŠ” ν”„λ‘¬ν”„νŠΈκ°€ 좜λ ₯되면 μ• μ Έ λ°λΈŒμ˜΅μŠ€μ—μ„œ μž‘μ„±ν•œ 개인 μ•‘μ„ΈμŠ€ 토큰(PAT, Personal Access Token)을 μž…λ ₯ν•©λ‹ˆλ‹€.

μ•„λž˜ λͺ…λ ΉμœΌλ‘œ μ •μƒμ μœΌλ‘œ 둜그인이 λ˜μ—ˆλŠ”μ§€ 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.

$ vsce ls-publishers # μ •μƒμ μœΌλ‘œ 둜그인된 경우 κ²Œμ‹œμž λͺ©λ‘μ΄ 좜λ ₯λ©λ‹ˆλ‹€.

κ²Œμ‹œ

μ•„λž˜ λͺ…λ ΉμœΌλ‘œ λ²ˆλ“€λ§ν•˜κ³ , λΉ„μ£Όμ–Ό μŠ€νŠœλ””μ˜€ λ§ˆμΌ“ν”Œλ ˆμ΄μŠ€μ— κ²Œμ‹œν•©λ‹ˆλ‹€.

$ vsce publish

κ²Œμ‹œλœ ν™•μž‘μ€ 확인 ν›„ λ°”λ‘œ κ³΅κ°œλ©λ‹ˆλ‹€.

λ¬Έμ œν•΄κ²°

vsce publish λͺ…령은 ν˜„μž¬ μž‘μ—…μ€‘μΈ ν”„λ‘œμ νŠΈκ°€ κΉƒ μ €μž₯μ†ŒμΈ 경우 기본적으둜 κΉƒ νƒœκ·Έλ₯Ό μž‘μ„±ν•©λ‹ˆλ‹€.

λ”°λΌμ„œ, ν˜„μž¬ μ €μž₯μ†Œμ— μž‘μ„±ν•˜λ €λŠ” νƒœκ·Έκ°€ 있으면 κ²Œμ‹œκ°€ μ‹€νŒ¨ν•©λ‹ˆλ‹€.

μ˜ˆμƒλ˜λŠ” μ‹€νŒ¨ λ©”μ‹œμ§€λŠ” μ•„λž˜μ™€ κ°™μŠ΅λ‹ˆλ‹€.

Error: Invalid URL
Error: Process completed with exit code 1.

이 경우 vsce publish λͺ…령에 μ˜΅μ…˜μ„ μΆ”κ°€ν•©λ‹ˆλ‹€.

$ vsce publish --no-git-tag-version --no-update-package-json
  • --no-git-tag-version: κΉƒ νƒœκ·Έλ₯Ό μž‘μ„±ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.
  • --no-update-package-json: package.json νŒŒμΌμ„ λ³€κ²½ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

마침

이제 μ›ν•˜λŠ” κΈ°λŠ₯이 ν¬ν•¨λœ ν™•μž₯을 μž‘μ„±ν•˜κ³  κ²Œμ‹œν•  수 μžˆμŠ΅λ‹ˆλ‹€.