Làm cách nào để thêm các biến môi trường vào launcher.json trong VSCode


87

Làm việc với trình chỉnh sửa VSCode mới trên dự án node.js. Tôi đang cố gắng định cấu hình hồ sơ "Khởi chạy" của mình để gỡ lỗi bằng cách chỉnh sửa tệp khởi chạy.json. Tôi cần thiết lập một kết nối làm biến môi trường. Theo các nhận xét trong tệp launcher.json:

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

Tôi đã thử thêm biến môi trường của mình như vậy:

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

Điều này gây ra lỗi khi tôi cố gắng khởi chạy ứng dụng của mình; "Quá trình OpenDebug đã kết thúc đột ngột". Tôi chưa tìm thấy bất kỳ tệp nhật ký nào, v.v. có thể giải thích vấn đề là gì.

Tôi biết ứng dụng này hoạt động chính xác khi tôi thiết lập biến môi trường và khởi chạy ứng dụng của mình từ dấu nhắc lệnh tiêu chuẩn. Ứng dụng cũng chạy như mong đợi nếu tôi nhận xét về biến của mình trong tệp khởi chạy.json; Tôi chỉ không thể kết nối với cơ sở dữ liệu.

Tôi giả định rằng tôi đang sử dụng sai định dạng trong tệp khởi chạy.json, nhưng tôi chưa tìm thấy bất kỳ cách nào để làm cho điều này hoạt động.

Có ý kiến ​​gì không?

Câu trả lời:


22

Dường như có vấn đề với các biến môi trường trên Windows (và có thể là trên linux). Nó hoạt động trên OS X. Chúng tôi đang điều tra. Mong đợi một bản sửa lỗi sớm.

Cập nhật (ngày 2 tháng 6 năm 2015): Visual Studio Code 0.3.0 có bản sửa lỗi cho điều này.


93

Tôi chuyển chúng thành công bằng cách sử dụng thuộc envtính trong 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
Tôi đã nhậnProperty env is not allowd in launch.json
nowox

2
envđã được đổi tên thành environmenttrong các phiên bản VSCode hiện tại, cú pháp cũng được thay đổi. Xem bài đăng của @Gabriel bên dưới.
burito

14

cái này đang hoạt động

nhập mô tả hình ảnh ở đây

chỉ cần thêm những thứ sau

"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
Với tất cả các thay đổi đối với trình chạy nhiệm vụ Mã VS kể từ câu hỏi ban đầu, câu trả lời này sẽ di chuyển lên danh sách, nó đúng và nó hoạt động!
Trevor

12

Như thế này, trong hệ điều hành của bạn:

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

Điều này cũng hoạt động đối với của tôi trên Linux, nhưng tôi nghĩ nó cũng liên quan chặt chẽ đến loại trình gỡ lỗi ( cppdbgtrong trường hợp của tôi)
Amfasis

Tại sao từ điển lại nằm trong danh sách bây giờ?
Cees Timmerman

@CeesTimmerman, chính vì vậy bạn có thể có nhiều biến môi trường ... mỗi biến một từ điển gồm một tên và giá trị. Hơi dài dòng nhưng nó cho phép tự động hoàn thành 'tên' và 'đường dẫn'.
Robert Lugg

10

Kể từ cuối năm 2016, bạn cũng có thể sử dụng envFile cho các dự án Node.js :

Trình gỡ lỗi VS Code Node hiện hỗ trợ tải các biến môi trường từ tệp và chuyển chúng vào thời gian chạy của nút. https://github.com/Microsoft/vscode/issues/15964

Cũng xem: Tải các biến môi trường từ tệp bên ngoài (nút) :

Để sử dụng tính năng này, hãy thêm một thuộc tính envFile vào cấu hình khởi chạy của bạn và chỉ định đường dẫn tuyệt đối đến tệp chứa các biến môi trường:

Đối với các dự án Asp.Net Core , tính năng này không được hỗ trợ bởi vscode nhưng gần đây nó đã được thêm vào phần mở rộng omnisharp vscode. Tính năng này khả dụng kể từ ngày 10 tháng 9 năm 2018 thông qua v1.16.0 .


Điều này rất tiện lợi nhưng làm thế nào để sử dụng các biến này trong "args" cho tệp cấu hình VSCode Launch? Bạn có thể chỉ định "args" nhưng bạn không thể sử dụng các biến môi trường ở đó (trong terminal bạn có thể)
Jerry xanh

Tôi muốn làm "args": ["-p", "${SERVER_PORT}"]cùng với "envFile": "${workspaceFolder}/.env", nhưng có vẻ như "${SERVER_PORT}"không hiệu quả
Jerry Green

5

Tôi đã gặp vấn đề tương tự và hóa ra tôi có một .envtệp trong gốc dự án của mình đang ghi đè launch.jsoncài đặt. BẠN ĐÃ ĐƯỢC CẢNH BÁO. :)


3

Để tham khảo, tôi đã gặp một vấn đề tương tự (vào năm 2020, rất lâu sau khi lỗi được đề cập trong câu trả lời được chấp nhận ở trên đã được sửa) cho một ngôn ngữ khác và muốn chỉ ra điều gì đó:

Accoding để tài liệu của Microsoft trên các cấu hình khởi động, nhiều lựa chọn phổ biến, bao gồm "env"không requried tính năng cho tất cả các sửa lỗi / môi trường chạy khác nhau - đó là để nói, có vẻ như với tôi rằng nó không phải là VS Mã rằng 'cung cấp' tùy chọn cho các biến môi trường, thay vào đó, sự lựa chọn của phần mở rộng trình gỡ lỗi cụ thể để triển khai tính năng này. Do đó, một trong hai

  • Sự cố không mong muốn của ứng dụng gỡ lỗi
  • lời cảnh báo Property "env" is not allowed

có thể xảy ra do ngôn ngữ / trình gỡ lỗi cụ thể bạn đang sử dụng không hỗ trợ hoặc chưa triển khai xử lý các biến môi trường.

Như qbiq đã nói, có lẽ một giải pháp nhanh chóng cho việc này nếu các biến môi trường không thay đổi qua các lần khởi chạy là xuất chúng và chạy VS Code với tập hợp các biến cụ thể này.


3

Phiên bản 1.49.1

Bạn có thể thêm các biến env bằng cách sử dụng thuộc envtính trong tệp khởi chạy.json của mình hoặc bằng cách sử dụng thuộc envFiletính có giá trị là vị trí của tệp .env của bạn.

ví dụ env:

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

Ví dụ về envFile:

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

Cả hai vẫn bị hỏng đối với python
garyM

1

như một giải pháp thay thế, bạn có thể đặt các biến môi trường khi khởi động VSCode, ví dụ: bằng cách sử dụng tập lệnh powershell nhỏ này:

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"

Lưu nó dưới dạng vscode.ps1và gọi nó từ dòng lệnh, như thế này:

powershell ".\vscode.ps1 -vars @{ 'NODE_ENV'='test'; 'SOMETHING'='else' }"

1

Vào tháng 6 năm 2020, điều này vẫn còn rất sai lầm và bị hỏng trên OSX Catalina 10.15.5. Tôi đang sử dụng nội bộ VSCode với phần mở rộng CodeLLDB phiên bản 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

Khi khởi chạy trình gỡ lỗi với envtừ khóa trên, launch.jsontôi nhận được điều này:

nhập mô tả hình ảnh ở đây

Tóm lại, sử dụng "env"chỉ thị trong launch.jsonsẽ hiển thị thông báo trong ảnh chụp màn hình. Điều này sẽ ngăn việc chạy trình gỡ lỗi, thiếu tính năng đáng ngạc nhiên, nhưng đủ công bằng.

Nhưng sau đó, bằng cách sử dụng environmentthay vì env, không có thông báo lỗi xuất hiện nhưng các biến môi trường không có sẵn trong thời gian chạy được gỡ lỗi, do đó, getenv(whatever)không trả về giá trị thực cho khóa đó: -!

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.