IDX 작업공간 맞춤설정

프로젝트 IDX의 목표는 개발자에게 최대한 유용한 정보를 제공하는 것입니다. IDX가 이를 실현하는 한 가지 방법은 개발자가 주어진 프로젝트에 적합한 도구를 작업공간에 자유롭게 설치하고, 작업공간이 자신에게 맞게 작동하도록 설정을 맞춤설정할 수 있는 자유와 유연성을 제공하는 것입니다.

Nix + IDX

IDX는 Nix를 사용하여 각 작업공간의 환경 구성을 정의합니다. Nix는 순전히 기능하는 패키지 관리자이며 각 종속 항목에 고유 식별자를 할당합니다. 즉, 환경에 동일한 종속 항목의 여러 버전이 원활하게 포함될 수 있습니다. 또한 재현 가능하고 선언적입니다. 즉, IDX의 컨텍스트에서 Nix 구성 파일을 작업공간 간에 공유하여 동일한 환경 구성을 로드할 수 있습니다.

IDX는 .idx/dev.nix 파일을 사용하여 코드 저장소에서 직접 미리보기 환경 및 작업공간 패키지 구성을 정의합니다. 이 파일에서 정의할 수 있는 속성 및 패키지 라이브러리는 Nix 속성 세트 구문을 따릅니다.

다음 예시에서는 미리보기를 사용 설정하는 기본 환경 구성을 보여줍니다.

{ pkgs, ... }: {

  # Which nixpkgs channel to use.
  channel = "stable-23.11"; # or "unstable"

  # Use https://search.nixos.org/packages to find packages
  packages = [
    pkgs.nodejs_18
  ];

  # Sets environment variables in the workspace
  env = {
    SOME_ENV_VAR = "hello";
  };

  # Search for the extensions you want on https://open-vsx.org/ and use "publisher.id"
  idx.extensions = [
    "angular.ng-template"
  ];

  # Enable previews and customize configuration
  idx.previews = {
    enable = true;
    previews = {
      web = {
        command = [
          "npm"
          "run"
          "start"
          "--"
          "--port"
          "$PORT"
          "--host"
          "0.0.0.0"
          "--disable-host-check"
        ];
        manager = "web";
      };
    };
  };
}

Nix 속성 및 패키지 라이브러리

택배

환경에 설치할 패키지입니다.

pkgs 인수를 사용하여 설치할 패키지(예: pkgs.python3)를 선택할 수 있습니다. pkgs의 콘텐츠는 선택한 channel 채널 옵션에 따라 다릅니다.

예:

{pkgs, ...}: {
  channel = "stable-23.11";
  packages = [pkgs.vim];
}

stable-23.11 또는 unstable에서 사용 가능한 패키지를 검색할 수 있습니다.

Type(유형): 패키지 목록

기본값: [ ]

채널

nixpkgs 채널을 사용합니다.

이 채널은 pkgs 인수의 콘텐츠를 정의합니다.

유형: 'stable-23.05', 'stable-23.11', 'unstable' 중 하나

기본값: "stable-23.11"

env

개발자 환경 내에서 설정된 환경 변수

모든 셸과 미리보기 서버에 전파됩니다. 환경 변수는 애플리케이션에 특정 변수 집합이 필요한 경우 특히 유용합니다.

예:

{pkgs, ...}: {
  env = {
    HELLO = "world";
  };
}

유형: 모든 항목의 속성 집합

기본값: { }

idx.extensions

IDX 작업공간에 설치하려는 코드 확장 프로그램입니다.

정규화된 확장 프로그램 ID의 목록입니다(예: ${publisherId}.${extensionId}).

VSX 레지스트리 열기에서 사용 가능한 확장 프로그램 목록을 찾아 ${publisherId}.${extensionId}별로 dev.nix 파일에 입력합니다.

유형: (비어 있지 않은 문자열 또는 경로)의 목록입니다.

기본값: [ ]

idx.previews.enable

IDX 미리보기를 사용 설정하려면 true로 설정합니다.

이 기능을 사용하면 앱을 개발할 때 자동으로 실행하고 다시 로드할 수 있습니다.

유형: 불리언

기본값: true

예: true

idx.previews.previews

구성을 미리 봅니다.

개발자 환경에서 IDX가 실행하는 명령어를 정의합니다.

예:

{pkgs, ...}: {
  idx.previews = {
    enable = true;
    previews = {
      web = {
        command = ["yes"];
        cwd = "subfolder";
        manager = "web";
        env = {
          HELLO = "world";
        };
      };
    };
  };
}

유형: (하위 모듈)의 속성 집합

기본값: { }

idx.previews.previews.*.command

실행할 명령어

유형: 문자열 목록

기본값: [ ]

idx.previews.previews.*.cwd

작업 디렉터리

유형: 문자열

기본값: ""

idx.previews.previews.*.env

설정할 환경 변수입니다.

유형: 문자열의 속성 집합

기본값: { }

idx.previews.previews.*.manager

관리자

유형: web, flutter 중 하나

idx.workspace.onCreate

작업공간이 생성되고 처음 열릴 때 실행할 명령어입니다.

이는 개발 환경을 설정하는 데 유용할 수 있습니다. 예를 들어 여기서는 실행할 npm install를 지정합니다.

{pkgs, ...}: {
  idx.workspace.onCreate = {
    npm-install = "npm install";
  };
}

유형: (경로 또는 문자열)의 속성 집합

기본값: { }

idx.workspace.onStart

작업공간이 열릴 때마다 실행할 명령어입니다.

이는 빌드 감시자를 시작하는 데 유용할 수 있습니다. 예를 들어 여기서는 실행할 명령어 2개를 지정합니다.

{pkgs, ...}: {
  idx.workspace.onStart = {
    npm-watch-fe = "npm run watch:frontend";
    npm-watch-be = "npm run watch:backend";
  };
}

유형: (경로 또는 문자열)의 속성 집합

기본값: { }

services.docker.enable

Rootless Docker의 사용 설정 여부입니다.

유형: 불리언

기본값: false

예: true