Как добавить переменные среды в launch.json в VSCode

87

Работа с новым редактором VSCode над проектом node.js. Я пытаюсь настроить свой профиль «Запуск» для отладки путем редактирования файла launch.json. Мне нужно настроить строку подключения в качестве переменной среды. Согласно комментариям в файле launch.json:

// Environment variables passed to the program.
"env": { }

Я попытался добавить свою переменную среды следующим образом:

"env":
{
"CONNECTION_STRING": "Data Source=server;Initial Catalog=catalog;User ID=uid;Password=pwd;MultipleActiveResultSets=true"
}

Это вызывает ошибку, когда я пытаюсь запустить свое приложение; «Процесс OpenDebug неожиданно завершился». Я еще не нашел никаких файлов журналов и т. Д., Которые могли бы объяснить, в чем проблема.

Я знаю, что это приложение работает правильно, когда я настраиваю переменную среды и запускаю свое приложение из стандартной командной строки. Приложение также работает должным образом, если я закомментирую свою переменную в файле launch.json; Я просто не могу подключиться к базе данных.

Я предполагаю, что использую неправильный формат в файле launch.json, но я еще не нашел способа заставить эту работу работать.

Любые идеи?

Джейсон Киббл
источник

Ответы:

22

Кажется, проблема с переменными окружения в Windows (и, вероятно, в Linux). Он работает на OS X. Мы ведем расследование. Ожидайте исправления в ближайшее время.

Обновление (2 июня 2015 г.): Visual Studio Code 0.3.0 содержит исправление для этого.

Андре Вайнанд
источник
93

Я успешно передаю их, используя envсвойство в launch.json:

{
  "version": "0.2.0",
  "configurations": [
    {
    "type": "node",
    "request": "launch",
    "name": "SLS Webpack",
    "protocol": "legacy",
    "program": "${workspaceRoot}/node_modules/.bin/sls",
    "cwd": "${workspaceRoot}",
    "args": ["webpack", "watch", "-f", "${fileBasenameNoExtension}", "-p", "${fileDirname}/event.json"],
    "env": {"AWS_REGION":"us-east-1", "SLS_DEBUG":"*"},
    "outFiles": ["${cwd}/dist/**/*.js"],
    "sourceMaps": true,
    "smartStep": true    
    }
  ]
}
btburton42
источник
2
Я получилProperty env is not allowd in launch.json
nowox
2
envбыл переименован в environmentв текущих версиях VSCode, синтаксис также изменен. См. Сообщение @Gabriel ниже.
Бурито
14

это работает

введите описание изображения здесь

просто добавьте следующее

"env": {"NODE_ENV": "development"}

"configurations": [
    {
        "type": "node",
        "request": "launch",
        "name": "Launch Program", //TODO: cmd as launch program
        "skipFiles": [
            "<node_internals>/**"
        ],
        "program": "${workspaceFolder}\\index.js",
        "env": {
            "NODE_ENV": "development"
        }
    }
]
Альджон Ямаро
источник
2
Со всеми изменениями в средстве выполнения задач VS Code с момента исходного вопроса, этот ответ должен переместиться вверх по списку, это правильно и работает!
Тревор,
12

Вот так, под вашей ОС:

        "osx": {
            "MIMode": "lldb",
            "environment": [{"name": "DYLD_LIBRATY_PATH", "value": "/Users/x/boost_1_63_0/stage/lib/"}]
        },
Габриэль
источник
Это также работает для меня в Linux, но я думаю, что это также сильно связано с типом отладчика ( cppdbgв моем случае)
Amfasis
Почему словарь сейчас в списке?
Сес Тиммерман,
@CeesTimmerman, это так, чтобы у вас было несколько переменных среды ... каждая из них - словарь имени и значения. Немного многословно, но позволяет автоматически заполнять «имя» и «путь».
Роберт Лагг,
10

С конца 2016 года вы также можете использовать envFile для проектов Node.js :

Отладчик узла VS Code теперь поддерживает загрузку переменных среды из файла и передает их среде выполнения узла. https://github.com/Microsoft/vscode/issues/15964

Также см .: Загрузить переменные среды из внешнего файла (узла) :

Чтобы использовать эту функцию, добавьте атрибут envFile в конфигурацию запуска и укажите абсолютный путь к файлу, содержащему переменные среды:

Для проектов Asp.Net Core эта функция изначально не поддерживается vscode, но недавно была добавлена ​​в расширение vscode omnisharp. Эта функция доступна с 10 сентября 2018 г. в версии 1.16.0 .

B12Toaster
источник
Это удобно, но как использовать эти переменные в «аргументах» для файла конфигурации VSCode Launch? Вы можете указать "args", но вы не можете использовать там переменные среды (в терминале вы можете)
Джерри Грин
Я хочу сделать "args": ["-p", "${SERVER_PORT}"]вместе "envFile": "${workspaceFolder}/.env", но похоже "${SERVER_PORT}", не работает
Джерри Грин
5

У меня была такая же проблема, и оказалось, что у меня был .envфайл в корне моего проекта, который переопределял launch.jsonнастройки. ВАС ВНИМАТЕЛЬНО. :)

CpILL
источник
3

Для справки, я столкнулся с аналогичной проблемой (в 2020 году, спустя много времени после того, как ошибка, упомянутая в принятом ответе выше, была исправлена) для другого языка и хотел бы указать на кое-что:

Согласно документации Microsoft по конфигурациям запуска, многие общие параметры, в том числе "env"не требуемые функции для всех различных сред отладки / запуска, то есть мне кажется, что это не VS Code, который «предоставляет» возможность для переменных среды, а скорее выбор конкретного расширения отладчика для реализации этой функции. Следовательно, либо

  • Неожиданный сбой приложения отладки
  • предупреждение Property "env" is not allowed

может возникнуть из-за того, что конкретный язык / отладчик, который вы используете, не поддерживает или не реализовал обработку переменных среды.

Как сказал qbiq, возможно, быстрое решение этой проблемы, если переменные среды не будут меняться при запуске, - это их экспорт и запуск VS Code с этим конкретным набором переменных.

звездная мощь
источник
3

Версия 1.49.1

Вы можете добавить переменные env, используя envсвойство в файле launch.json или используя envFileсвойство, значение которого является местоположением вашего файла .env.

пример env:

{
  ...
   "env": { "PORT": "4000" }
  ...
}

Пример envFile:

{
  ...
  "envFile": "${workspaceFolder}/server/.env",
  ...
}
Исаак Пак
источник
Оба по-прежнему не работают для python
garyM
1

В качестве обходного пути вы можете установить переменные среды при запуске VSCode, например, используя этот небольшой скрипт PowerShell:

param(
 $vars = @{}
)

$vars.Keys | % {
    write-host "adding env variable: $_=$($vars[$_])"
    [Environment]::SetEnvironmentVariable($_, $vars[$_], "Process")
}
$ver = "0.1.0"
& "$env:LOCALAPPDATA\Code\app-$ver\Code.exe"

Сохраните его как vscode.ps1и вызовите из командной строки, например:

powershell ".\vscode.ps1 -vars @{ 'NODE_ENV'='test'; 'SOMETHING'='else' }"
qbik
источник
1

В июне 2020 года это все еще вводит в заблуждение и не работает в OSX Catalina 10.15.5. Я использую инсайдеров VSCode с расширением CodeLLDB версии 1.5.3 :

Version: 1.47.0-insider
Commit: 0913b1aa43191d8af0ccb4a133d9a8d7c1a81d69
Date: 2020-06-23T09:38:28.751Z (1 day ago)
Electron: 8.3.3
Chrome: 80.0.3987.165
Node.js: 12.13.0
V8: 8.0.426.27-electron.0
OS: Darwin x64 19.5.0

При запуске отладчика с envключевым словом on launch.jsonя получаю следующее:

введите описание изображения здесь

Вкратце, использование "env"директивы в launch.jsonотобразит сообщение на снимке экрана. Это предотвратит запуск отладчика, что, на удивление, не хватает функции, но достаточно справедливо.

Но тогда, используя environmentвместо env, сообщение об ошибке не появляется, но переменные среды недоступны в отлаживаемой среде выполнения, поэтому getenv(whatever)не возвращает фактическое значение для этого ключа: -!

мозговой штурм
источник