В написанном мной расширении я хочу переопределить существующий параметр в рабочей области, чтобы он указывал на сценарий, который я упаковываю вместе с расширением. Например, на Mac этот сценарий находится в ~/.vscode/extensions/publisher.name.version/script.
Если я предполагаю, что это то место, где живет расширение, тогда в моей функции активации я могу обновить это значение, используя
export async function activate(context: vscode.ExtensionContext) {
const home = process.env.HOME;
const execLocation = home + "/.vscode/extensions/publisher.name.version/script";
...
а затем обновите настройку рабочего пространства.
Однако - я хотел бы получить доступ к местоположению локально установленных расширений вместе с идентификатором и версией моего расширения - я не могу найти правильную настройку в VSCode для этого. Я был бы очень благодарен, если бы кто-нибудь знал правильную переменную среды, чтобы я мог получить к ним доступ.
Я знаю, что можно вызвать код из командной строки с опцией --extensionHomePath - я не уверен, как получить доступ к этой переменной программно.
Также я не уверен, как найти версию, издателя и имя из параметра context - очевидно, я знаю их из файла package.json, но было бы неплохо иметь возможность получить к ним программный доступ, если это возможно.





Вы можете получить эту информацию с помощью метода asAbsolutePath() в ExtensionContext.
Этот метод дает вам абсолютный путь к ресурсу для данного относительного пути (относительно корня вашего проекта).
Поэтому я предлагаю вам изменить свой код на следующий:
export async function activate(context: vscode.ExtensionContext) {
const execLocation = context.asAbsolutePath("script");
console.info("Absolute exec location: " + execLocation);
Большое спасибо за этот ответ. Я заметил, что отладка этого не работает (
asAbsolutePath- это локальный каталог разработки), но при создании vsix и установке из vsixasAbsolutePathдействительно указывает правильное местоположение. Еще раз большое спасибо.