Измените версию Node.js для типа отладчика extensionHost в VSCode
Я разрабатываю расширение VSCode, которое запрашивает экземпляр базы данных Oracle через oracledb npm
за основу взято расширение vscode-database.
Версия узла установлена на 8.9.4. Тестовый скрипт, который проверяет соединение с Oracle, работает нормально:
-> node -v
8.9.4
-> node connect.js
ok
Но когда я пытаюсь отладить расширение VSCode с помощью того же сценария подключения, я получаю сообщение об ошибке:
Не удалось активировать расширение bajdzis.vscode-database: NJS-045: невозможно загрузить двоичный файл дополнения oracledb для Node.js 7.9.0 (win32, x64)
Ошибка говорит, что используется Node.js 7.9.0, а не 8.9.4. Я предполагаю, что 7.9.0 - это некоторый внутренний экземпляр Node, который используется отладчиком VSCode.
Можно ли заставить отладчик VSCode использовать версию Node, установленную на компьютере разработчика, а не на внутренней?
1 ответ
Хотя отладчик VS Code не может использовать другую версию Node.js, можно скомпилировать собственные модули (например, node-oracledb) для целевой версии Node.js. Вот некоторые подробности.
Для кода VS 1.21.1 (который использует Electron 1.7.0) я сделал следующее с терминала в моем каталоге расширений (возможно, потребуется удалить oracledb
каталог от node_modules
первый):
# Electron's version.
export npm_config_target=1.7.0
# The architecture of Electron, can be ia32 or x64.
export npm_config_arch=x64
export npm_config_target_arch=x64
# Download headers for Electron.
export npm_config_disturl=https://atom.io/download/electron
# Tell node-pre-gyp that we are building for Electron.
export npm_config_runtime=electron
# Tell node-pre-gyp to build module from source code.
export npm_config_build_from_source=true
# Install all dependencies, and store cache to ~/.electron-gyp.
HOME=~/.electron-gyp npm install
Последняя строка начала установку npm, которая правильно скомпилировала бинарный файл для целевой платформы (пользовательская версия Node.js 7.9.0, которая имеет более новую версию V8, чем та, которая обычно есть в Node.js).