프로젝트 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 속성 및 패키지 라이브러리
packages
환경에 설치할 패키지입니다.
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}
).
Open VSX Registry에서 사용 가능한 확장 프로그램 목록을 찾아 ${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.<name>.command
실행할 명령어
유형: 문자열 목록
기본값: [ ]
idx.previews.previews.<name>.cwd
작업 디렉터리
유형: 문자열
기본값: ""
idx.previews.previews.<name>.env
설정할 환경 변수입니다.
유형: 문자열의 속성 집합입니다.
기본값: { }
idx.previews.previews.<name>.manager
관리자
유형: '웹', 'flutter' 중 하나
idx.workspace.onCreate
작업공간이 생성되고 처음 열릴 때 실행할 명령어입니다.
이는 개발 환경을 설정하는 데 유용할 수 있습니다. 예를 들어 여기서는 실행할 npm install
를 지정합니다.
{pkgs, ...}: {
idx.workspace.
npm-install = "npm install";
};
}
유형: (경로 또는 문자열)의 속성 집합
기본값: { }
idx.workspace.onStart
작업공간이 열릴 때마다 실행할 명령어입니다.
이는 빌드 감시자를 시작하는 데 유용할 수 있습니다. 예를 들어 여기서는 실행할 명령어 2개를 지정합니다.
{pkgs, ...}: {
idx.workspace.
npm-watch-fe = "npm run watch:frontend";
npm-watch-be = "npm run watch:backend";
};
}
유형: (경로 또는 문자열)의 속성 집합
기본값: { }
services.docker.enable
Rootless Docker의 사용 설정 여부입니다.
유형: 부울
기본값: false
예: true
services.mysql.enable
MySQL 서버 사용 설정 여부입니다.
서버는 암호 없는 사용자 루트로 초기화됩니다. 따라서 추가 사용자를 만들고 데이터베이스를 만들려면 mysql -u root
를 사용합니다. .
유형: 부울
기본값: false
예: true
services.mysql.package
사용할 MySQL 패키지입니다.
Type(유형): 패키지
기본값: pkgs.mysql
예: pkgs.mysql80
services.postgres.enable
PostgreSQL 서버 사용 설정 여부입니다.
유형: 부울
기본값: false
예: true
services.postgres.package
사용할 PostgreSQL 패키지입니다.
Type(유형): 패키지
기본값: pkgs.postgresql
예: pkgs.postgresql_15
services.postgres.extensions
설치할 Postgres 확장 프로그램입니다.
Type: list of (one of (one of "age", "apache_datasketches", "cstore_fn
기본값: [ ]
예: [ "pgvector" "postgis" ];
services.pubsub.enable
Google Pub/Sub 에뮬레이터를 사용 설정할지 여부입니다.
에뮬레이터 사용에 관한 추가 문서는 다음을 참조하세요.https://cloud.google.com/pubsub/docs/emulator#using_the_emulator
유형: 부울
기본값: false
예: true
services.pubsub.port
Pub/Sub가 리슨할 포트를 구성합니다.
유형: 부호 없는 16비트 정수로, 0에서 65535 사이 (둘 다 포함)입니다.
기본값: 8085
services.pubsub.project-id
Pub/Sub 에뮬레이터를 실행하는 데 사용할 프로젝트 ID입니다. 이 프로젝트는 테스트 전용입니다. 존재하지 않아도 되며 로컬에서만 사용됩니다.
유형: 패턴 [a-z][a-z0-9-]{5,29}와 일치하는 문자열
기본값: "idx-pubsub-emulator"
services.redis.enable
Redis 서버 사용 설정 여부입니다.
유형: 부울
기본값: false
예: true
services.redis.port
Redis가 리슨할 포트를 구성합니다.
기본적으로 TCP가 사용 중지되어 있으며 redis는 /tmp/redis/redis.sock에서만 수신 대기합니다.
유형: 부호 없는 16비트 정수로, 0에서 65535 사이 (둘 다 포함)입니다.
기본값: 0
services.spanner.enable
Google Cloud Spanner 에뮬레이터 사용 설정 여부입니다.
유형: 부울
기본값: false
예: true
services.spanner.fault-injection
거래에 임의 결함 주입을 사용 설정할지 여부입니다.
유형: 부울
기본값: false
예: true
services.spanner.grpc-port
에뮬레이터를 결합해야 하는 TCP 포트입니다.
유형: 부호 없는 16비트 정수로, 0에서 65535 사이 (둘 다 포함)입니다.
기본값: 9010
services.spanner.rest-port
REST 요청이 처리되는 포트
유형: 부호 없는 16비트 정수로, 0에서 65535 사이 (둘 다 포함)입니다.
기본값: 9020