Як додати змінні середовища до 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"
}

Це спричиняє помилку під час спроби запустити програму; Msgstr "Процес 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    
    }
  ]
}

2
Я отримавProperty env is not allowd in launch.json
nowox

2
envбуло перейменовано на environmentпоточну версію VSCode, синтаксис також змінено. Дивіться пост @Gabriel нижче.
буріто

14

це працює

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

просто додайте наступне

"env": {"NODE_ENV": "розвиток"}

"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 Node тепер підтримує завантаження змінних середовища з файлу та передає їх виконанню вузла. https://github.com/Microsoft/vscode/issues/15964

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

Для використання цієї функції додайте атрибут envFile до конфігурації запуску та вкажіть абсолютний шлях до файлу, що містить змінні середовища:

Для проектів Asp.Net Core ця функція не підтримується вбудовано vscode, але нещодавно вона була додана до розширення omnisharp vscode. Ця функція доступна з 10 вересня 2018 року через v1.16.0 .


Це зручно, але як використовувати ці змінні в "args" для файлу конфігурації VSCode Launch? Ви можете вказати "args", але ви не можете там використовувати змінні середовища (у терміналі ви можете)
Джеррі Грін,

Я хочу піти "args": ["-p", "${SERVER_PORT}"]разом "envFile": "${workspaceFolder}/.env", але, схоже, "${SERVER_PORT}"це не працює
Джеррі Грін

5

У мене була та сама проблема, і виявляється, у мене був .envфайл у корені мого проекту, який перекривав launch.jsonналаштування. ВИ ПОПЕРЕДЖЕНІ. :)


3

Для довідки я зіткнувся з подібною проблемою (у 2020 році, довго після того, як була виправлена ​​помилка, згадана у прийнятій відповіді вище) для іншої мови, і хотів би вказати на щось:

Кодуючи документацію корпорації Майкрософт щодо конфігурацій запуску, багато загальних варіантів, у тому числі "env"не є необхідними функціями для всіх різних середовищ налагодження / запуску - тобто, мені здається, що не код VS "надає" опцію для змінних середовища, скоріше, вибір конкретного розширення налагоджувача для реалізації цієї функції. Тому будь-який

  • Несподіваний збій програми налагодження
  • попередження 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",
  ...
}

І те, і
інше

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' }"

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ключовим словом на launch.jsonя отримую це:

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

Отже, у двох словах, використання "env"директиви in launch.jsonпокаже повідомлення на скріншоті. Це запобіжить запуск налагоджувача, напрочуд не вистачає функції, але досить справедливо.

Але тоді, використовуючи environmentзамість env, повідомлення про помилку не з’являється, але змінні середовища недоступні під час налагодження середовища виконання, тому getenv(whatever)не повертає фактичне значення для цього ключа: -!

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.