VSCode에서 launch.json에 환경 변수를 추가하는 방법


95

node.js 프로젝트에서 새 VSCode 편집기로 작업합니다. launch.json 파일을 편집하여 디버깅을 위해 "Launch"프로필을 구성하려고합니다. 환경 변수로 연결 문자열을 설정해야합니다. 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 파일에서 잘못된 형식을 사용하고 있다고 가정하고 있지만 아직이 작업을 수행 할 방법을 찾지 못했습니다.

어떤 아이디어?

답변:


23

Windows (및 Linux)에서 환경 변수에 문제가있는 것 같습니다. OS X에서 작동합니다. 조사 중입니다. 곧 수정 될 것으로 예상됩니다.

업데이트 (2015 년 6 월 2 일) : Visual Studio Code 0.3.0에는 이에 대한 수정 사항이 포함되어 있습니다.


102

나는 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
envenvironment현재 버전의 VSCode에서 로 이름이 바뀌 었으며 구문도 변경되었습니다. 아래 @Gabriel의 게시물을 참조하십시오.
burito

15

이것은 효과가있다

여기에 이미지 설명 입력

다음을 추가하십시오

"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 작업 실행기에 대한 모든 변경 사항으로이 답변은 목록 위로 이동해야합니다. 맞고 작동합니다!
Trevor

13

이와 같이 OS에서 :

        "osx": {
            "MIMode": "lldb",
            "environment": [{"name": "DYLD_LIBRATY_PATH", "value": "/Users/x/boost_1_63_0/stage/lib/"}]
        },

이것은 Linux에서도 작동하지만 디버거 유형 ( cppdbg제 경우) 과도 밀접한 관련이 있다고 생각합니다
Amfasis

지금 사전이 목록에있는 이유는 무엇입니까?
Cees Timmerman

@CeesTimmerman, 여러 환경 변수를 가질 수 있습니다 ... 각각 이름과 값의 사전. 약간 장황하지만 '이름'과 '경로'의 자동 완성을 허용합니다.
Robert Lugg

12

2016 년 말부터 envFile Node.js 프로젝트 에도 사용할 수 있습니다 .

VS Code Node 디버거는 이제 파일에서 환경 변수를로드하고이를 노드 런타임에 전달하도록 지원합니다. https://github.com/Microsoft/vscode/issues/15964

참조 : 외부 파일 (노드)에서 환경 변수로드 :

이 기능을 사용하려면 시작 구성에 envFile 속성을 추가하고 환경 변수가 포함 된 파일의 절대 경로를 지정합니다.

Asp.Net Core 프로젝트 의 경우이 기능 vscode에서 기본적으로 지원되지 않지만 최근 omnisharp vscode 확장에 추가되었습니다. 이 기능은 2018 년 9 월 10 일부터 v1.16.0을 통해 사용할 수 있습니다 .


이것은 편리하지만 VSCode 실행 구성 파일의 "args"에서 이러한 변수를 사용하는 방법은 무엇입니까? 당신은 "인수"를 지정할 수 있지만, 당신은 (당신이 할 수있는 터미널에서) 환경 변수가 사용할 수 없습니다
제리 그린

내가하고 싶은 "args": ["-p", "${SERVER_PORT}"]와 함께 "envFile": "${workspaceFolder}/.env",하지만 외모처럼이 "${SERVER_PORT}"작동하지 않습니다
제리 그린

7

나는 똑같은 문제가 있었고 .env내 프로젝트 루트에 launch.json설정 을 재정의 하는 파일 이 있음이 밝혀졌습니다 . 경고를 받았습니다. :)


3

참고로, 다른 언어에 대해 비슷한 문제 (2020 년, 위의 답변에 언급 된 버그가 수정 된 지 오래됨)를 발견했으며 무언가를 지적하고 싶습니다.

에 accoding의 마이크로 소프트의 문서 , 발사 구성, 많은 일반적인 옵션에 포함 "env"되지 않습니다 requried , 환경 변수에 대한 옵션을 '제공한다'고 VS 코드 아니라고 보인다,라고하는 것입니다 - 모든 다른 디버깅 / 실행 환경을위한 기능을 오히려이 기능을 구현하기위한 특정 디버거 확장의 선택입니다. 따라서

  • 디버깅 응용 프로그램의 예기치 않은 충돌
  • 경고 Property "env" is not allowed

사용중인 특정 언어 / 디버거가 환경 변수 처리를 지원하지 않거나 구현하지 않았기 때문에 발생할 수 있습니다.

qbiq가 말했듯이 환경 변수가 실행 중에 변경되지 않는 경우 이에 대한 빠른 해결 방법은 해당 변수를 내보내고 특정 변수 세트로 VS 코드를 실행하는 것입니다.


3

버전 1.49.1

envlaunch.json 파일의 envFile속성을 사용하거나 값이 .env 파일의 위치 인 속성 을 사용하여 env 변수를 추가 할 수 있습니다 .

env 예 :

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

envFile 예 :

{
  ...
  "envFile": "${workspaceFolder}/server/.env",
  ...
}

둘 다 아직 파이썬에 대한 고장된다
garyM

2

2020 년 6 월에 이것은 OSX Catalina 10.15.5에서 여전히 매우 오해의 소지가 있고 깨졌습니다. CodeLLDB 확장 버전 1.5.3 과 함께 VSCode 내부자를 사용하고 있습니다 .

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"지시문을 사용 launch.json하면 스크린 샷에 메시지가 표시됩니다. 이것은 디버거 실행을 막을 것입니다. 놀랍게도 기능이 부족하지만 충분히 공평합니다.

하지만, 사용하는 environment대신 env, 오류 메시지가 팝업되지 거기 하지만 환경 변수는 디버깅되는 런타임에서 사용할 수 없습니다, 그래서 getenv(whatever)그 키의 실제 값을 반환하지 않습니다 -!


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' }"
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.