ฉันจะเพิ่มตัวแปรสภาพแวดล้อมให้กับ launch.json ใน VSCode ได้อย่างไร


94

การทำงานกับตัวแก้ไข VSCode ใหม่บนโปรเจ็กต์ node.js ฉันกำลังพยายามกำหนดค่าโปรไฟล์ "Launch" ของฉันสำหรับการดีบักโดยแก้ไขไฟล์ launch.json ฉันต้องการตั้งค่า connectionstring เป็นตัวแปรสภาพแวดล้อม ตามความคิดเห็นในไฟล์ 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 มีการแก้ไขสำหรับสิ่งนี้


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
envถูกเปลี่ยนชื่อเป็นenvironmentVSCode เวอร์ชันปัจจุบันไวยากรณ์ก็เปลี่ยนไปเช่นกัน ดูโพสต์ของ @Gabriel ด้านล่าง
burito

15

มันใช้งานได้

ป้อนคำอธิบายภาพที่นี่

เพียงเพิ่มสิ่งต่อไปนี้

"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 เนื่องจากคำถามเดิมคำตอบนี้ควรย้ายไปอยู่ในรายการมันถูกต้องและใช้งานได้!
Trevor

13

เช่นนี้ภายใต้ระบบปฏิบัติการของคุณ:

        "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

ตั้งแต่ปลายปี 2559 คุณสามารถใช้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" สำหรับไฟล์ config VSCode Launch ได้อย่างไร คุณอาจระบุ "args" แต่คุณไม่สามารถใช้ตัวแปรสภาพแวดล้อมที่นั่นได้ (ในเทอร์มินัลคุณทำได้)
Jerry Green

ฉันอยากทำ"args": ["-p", "${SERVER_PORT}"]ด้วย"envFile": "${workspaceFolder}/.env"แต่ดูเหมือน"${SERVER_PORT}"จะไม่ได้ผล
Jerry Green

7

ฉันมีปัญหาเดียวกันนี้และปรากฎว่าฉันมี.envไฟล์ในรูทโปรเจ็กต์ของฉันซึ่งกำลังลบล้างการlaunch.jsonตั้งค่า คุณได้รับคำเตือน :)


3

สำหรับการอ้างอิงฉันพบปัญหาที่คล้ายกัน (ในปี 2020 นานหลังจากที่ข้อบกพร่องที่กล่าวถึงในคำตอบที่ยอมรับข้างต้นได้รับการแก้ไข) สำหรับภาษาอื่นและต้องการชี้ให้เห็นบางสิ่ง:

Accoding เพื่อเอกสารไมโครซอฟท์ในการกำหนดค่าการเปิดตัวตัวเลือกร่วมกันจำนวนมากรวมทั้ง"env"ยังไม่ได้requriedคุณสมบัติสำหรับการดีบัก / สภาพแวดล้อมการทำงานแตกต่างกันทั้งหมด - นั่นคือจะบอกว่ามันดูเหมือนว่าฉันว่ามันเป็นไปไม่ VS รหัสที่ 'ให้' ตัวเลือกสำหรับตัวแปรสภาพแวดล้อม แต่เป็นทางเลือกของส่วนขยายดีบักเกอร์เฉพาะเพื่อใช้คุณลักษณะนี้ ดังนั้นอย่างใดอย่างหนึ่ง

  • เกิดข้อผิดพลาดที่ไม่คาดคิดของแอปพลิเคชันการดีบัก
  • คำเตือน Property "env" is not allowed

อาจเกิดขึ้นเนื่องจากภาษา / ดีบักเกอร์ที่คุณใช้ไม่รองรับหรือไม่ได้ใช้การจัดการตัวแปรสภาพแวดล้อม

ดังที่ qbiq ได้กล่าวไว้อาจเป็นวิธีแก้ปัญหาอย่างรวดเร็วสำหรับสิ่งนี้หากตัวแปรสภาพแวดล้อมจะไม่เปลี่ยนแปลงในการเปิดตัวก็คือการส่งออกและเรียกใช้ VS Code ด้วยชุดตัวแปรเฉพาะนี้


3

เวอร์ชัน 1.49.1.2

คุณสามารถเพิ่มตัวแปร env โดยใช้envคุณสมบัติในไฟล์ launch.json ของคุณหรือโดยใช้envFileคุณสมบัติที่มีค่าเป็นตำแหน่งของไฟล์. env ของคุณ

ตัวอย่าง env:

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

envFile ตัวอย่าง:

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

ทั้งคู่ยังคงพังเพราะ python
garyM

2

ในเดือนมิถุนายน 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"คำสั่งใน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และเรียกใช้จาก commandline ดังนี้:

powershell ".\vscode.ps1 -vars @{ 'NODE_ENV'='test'; 'SOMETHING'='else' }"
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.