Розширення для VS Code — потужний інструмент для покращення досвіду розробки. Вони можуть додавати нові функції, покращувати існуючий функціонал та автоматизувати повторювані завдання. Але з усією цією потужністю виникає необхідність у зберіганні даних. Розширення VS Code потребують місце для зберігання даних, як глобально, так і в межах конкретних робочих просторах. Ця стаття розгляне різні варіанти зберігання даних у VS Code для розробників розширень: глобальний стан, стан робочого простору та секретне зберігання.
І не забувайте барабани!
Вступ до розробки розширень для VS Code
Перед тим, як зануритись у зберігання даних, давайте коротко розглянемо розробку розширень для VS Code. Розширення VS Code пишуться на JavaScript або TypeScript і використовують API VS Code для взаємодії з редактором. Це API надає великий набір функціональностей, дозволяючи розширенням налаштовувати поведінку редактора, додавати нові перегляди та взаємодіяти з кодом.
API VS Code
API VS Code є величезним і пропонує безліч функцій для розробників розширень. Однак для цієї статті ми зосередимося на аспектах API, пов’язаних з зберіганням даних. API VS Code надає механізми для зберігання та отримання даних глобально та в межах конкретних робочих просторів.
Глобальний стан
Глобальний стан — це механізм зберігання, який надає API VS Code і дозволяє розширенням зберігати та отримувати дані, що зберігаються між усіма робочими просторами. Уявіть це як загальний банк пам'яті для вашого розширення, незалежно від того, над яким проектом ви працюєте.
Коли ви використовуєте глобальний стан, VS Code зберігає ваші дані в базі даних SQLite, що знаходиться в директорії підтримки додатків користувача. Це означає, що дані залишаються доступними:
- Після закриття та відкриття VS Code
- Після перемикання між різними проектами
- Після перезавантаження комп’ютера
// Зберігання значення в глобальному стані
context.globalState.update('lastUsedFramework', 'React');
// Отримання значення пізніше
const lastFramework = context.globalState.get('lastUsedFramework');
// Повертає 'React'
Глобальний стан кожного розширення зберігається в файлі SQLite в директорії /Users//Library/Application Support/Code/User/globalStorage/
в файлі state.vscdb
.
Users/
└── /
└── Library/
└── Application Support/
└── Code/
└── User/
└── globalStorage/
├── ./
├── ...
├── ./
├── state.vscdb
├── state.vscdb.backup
└── storage.json
Стан робочого простору
Стан робочого простору — це механізм зберігання, що зберігає дані, унікальні для конкретного проекту або робочого простору. На відміну від глобального стану, який зберігає дані між усіма проектами, стан робочого простору можна порівняти з проектним щоденником, який скидається при перемиканні на інший робочий простір.
// Зберігання даних для конкретного робочого простору
context.workspaceState.update('projectConfiguration', {
framework: 'React',
bundler: 'Webpack',
version: '18.2.0'
});
// Отримання даних
const projectConfig = context.workspaceState.get('projectConfiguration');
Стан робочого простору кожного розширення зберігається в файлі SQLite в директорії конкретного робочого простору:
Users/
└── /
└── Library/
└── Application Support/
└── Code/
└── User/
└── workspaceStorage/
├── /
│ ├── state.vscdb
│ ├── workspace.json
│ └── ...
├── /
│ ├── state.vscdb
│ ├── workspace.json
│ └── ...
└── ...
Кожен робочий простір отримує унікальний ідентифікатор (хеш робочого простору), і його стан зберігається в файлі state.vscdb
у директорії цього робочого простору.
Коли ви перемикаєтеся між робочими просторами, VS Code створює нову директорію з унікальним ідентифікатором робочого простору, що забезпечує ізольований стан для кожного проекту.
База даних SQLite (state.vscdb
) містить дані, специфічні для робочого простору, які зберігаються розширеннями за допомогою context.workspaceState.update()
, тоді як workspace.json
містить додаткову конфігурацію робочого простору.
Секретне зберігання
Секретне зберігання в VS Code надає безпечний спосіб зберігати конфіденційну інформацію, таку як API ключі та паролі. Давайте розглянемо, як це працює і чому це необхідно для безпечної розробки розширень.
Еволюція секретного зберігання
Раніше VS Code використовував бібліотеку під назвою Keytar для керування секретами. Однак вони перейшли на API safeStorage від Electron для кращої безпеки та зручності обслуговування. Це зміна є прозорою для розробників розширень — API залишається тим самим, але безпека підвищена.
Уявіть це як безпечний сховок, до якого може отримати доступ лише ваше розширення. Коли ви зберігаєте секрет, він автоматично шифрується та зберігається в захищеному сховищі облікових даних вашої системи:
// Безпечне зберігання секрету
await context.secrets.store('githubToken', 'ghp_123xyz');
// Отримання збереженого секрету
const token = await context.secrets.get('githubToken');
Місце зберігання змінюється в залежності від операційної системи, оскільки VS Code використовує рідне безпечне зберігання кожної системи:
- На macOS секрети зберігаються в Keychain Access.
- На Windows — у Windows Credential Manager.
- На Linux — у Keyring.
Висновок
Розширення VS Code пропонують різні варіанти зберігання для різних потреб. Глобальний стан зберігає дані, які стосуються всіх робочих просторів, тоді як стан робочого простору фокусується на даних, що стосуються конкретного проекту. Для конфіденційних даних, таких як API ключі, механізм безпечного зберігання надає зашифрований і специфічний для платформи спосіб зберігання інформації. Розуміючи ці варіанти, розробники розширень можуть ефективно керувати даними у своїх розширеннях і покращити користувацький досвід.
Сподіваюся, що ця стаття була корисною, поділіться своїми думками та поставте «клап» якщо вам сподобалося!
Перекладено з: VS Code Extension Storage Explained: The What, Where, and How