Mục tiêu của Project IDX là giúp ích cho các nhà phát triển nhất có thể. Một cách để IDX thực hiện được việc này là mang lại cho nhà phát triển sự tự do và linh hoạt khi cài đặt các công cụ phù hợp cho mọi dự án cụ thể trên không gian làm việc của họ, đồng thời tuỳ chỉnh các chế độ cài đặt để không gian làm việc phù hợp với họ.
Nix và IDX
IDX sử dụng Nix để xác định cấu hình môi trường cho từng không gian làm việc. Nix là một trình quản lý gói có chức năng thuần tuý và gán giá trị nhận dạng duy nhất cho từng phần phụ thuộc, nghĩa là môi trường của bạn có thể chứa một cách liền mạch nhiều phiên bản của cùng một phần phụ thuộc. Mẫu này cũng có tính tái tạo và mang tính khai báo. Trong ngữ cảnh của IDX, điều này có nghĩa là bạn có thể chia sẻ tệp cấu hình Nix của mình trên các không gian làm việc để tải cùng một cấu hình môi trường.
IDX xác định môi trường xem trước và các cấu hình gói không gian làm việc trực tiếp từ kho lưu trữ mã bằng tệp .idx/dev.nix
.
Các thuộc tính và thư viện gói mà bạn có thể xác định trong tệp này sẽ tuân theo cú pháp tập hợp thuộc tínhNix.
Ví dụ sau đây cho thấy cấu hình môi trường cơ bản cho phép xem trước:
{ 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";
};
};
};
}
Các thuộc tính Nix và thư viện gói
gói hàng
Các gói sẽ cài đặt trong môi trường.
Bạn có thể sử dụng đối số pkgs
để chọn các gói cần cài đặt, tức là pkgs.python3
.
Xin lưu ý rằng nội dung của pkgs
phụ thuộc vào tuỳ chọn kênh channel
đã chọn.
Ví dụ:
{pkgs, ...}: {
channel = "stable-23.11";
packages = [pkgs.vim];
}
Bạn có thể tìm các gói hiện có tại đây: stable-23.11 hoặc unstable (không ổn định).
Loại: danh sách gói
Mặc định:
[ ]
kênh
nixpkgs để sử dụng.
Kênh này xác định nội dung của đối số pkgs
.
Loại: một trong các giá trị "stable-23.05", "stable-23.11", "unstable" (không ổn định)
Mặc định:
"stable-23.11"
env
Các biến môi trường được đặt bên trong môi trường của nhà phát triển.
Các mã này được truyền đến tất cả các shell và máy chủ xem trước. Biến môi trường có thể đặc biệt hữu ích nếu ứng dụng của bạn đòi hỏi một tập hợp các biến cụ thể.
Ví dụ:
{pkgs, ...}: {
env = {
HELLO = "world";
};
}
Type: là tập hợp thuộc tính của mọi thứ
Mặc định:
{ }
idx.extensions
Tiện ích mã bạn muốn cài đặt trong không gian làm việc IDX của mình.
Đây là danh sách mã tiện ích đủ điều kiện, tức là ${publisherId}.${extensionId}
.
Bạn có thể tìm thấy danh sách các tiện ích có sẵn trong Mở VSX Registry (Mở sổ đăng ký VSX) rồi nhập các tiện ích đó vào tệp dev.nix
chậm nhất vào ${publisherId}.${extensionId}
.
Loại: danh sách (chuỗi hoặc đường dẫn không trống)
Mặc định:
[ ]
idx.previews.enable
Đặt giá trị này thành true
để bật bản xem trước IDX.
Tính năng này giúp bạn tự động chạy và tải lại ứng dụng trong quá trình phát triển.
Loại: boolean
Mặc định:
true
Ví dụ:
true
idx.previews.previews
Xem trước cấu hình.
Xác định các lệnh mà IDX sẽ thực thi trong môi trường nhà phát triển của bạn.
Ví dụ:
{pkgs, ...}: {
idx.previews = {
enable = true;
previews = {
web = {
command = ["yes"];
cwd = "subfolder";
manager = "web";
env = {
HELLO = "world";
};
};
};
};
}
Tập hợp thuộc tính Type: của (mô-đun con)
Mặc định:
{ }
idx.previews.previews.*.command
Lệnh thực thi
Loại: danh sách chuỗi
Mặc định:
[ ]
idx.previews.previews.*.cwd
Thư mục đang hoạt động
Loại: chuỗi
Mặc định:
""
idx.previews.previews.*.env
Các biến môi trường cần đặt.
Loại: tập hợp thuộc tính chuỗi
Mặc định:
{ }
idx.previews.previews.*.manager
Nhà quản lý
Loại: một trong số web
, flutter
idx.workspace.onCreate
Các lệnh cần thực thi khi không gian làm việc được tạo và mở lần đầu tiên.
Việc này có thể hữu ích khi thiết lập môi trường phát triển. Chẳng hạn ở đây, chúng ta đang chỉ định npm install
để chạy:
{pkgs, ...}: {
idx.workspace.onCreate = {
npm-install = "npm install";
};
}
Loại: tập hợp thuộc tính (đường dẫn hoặc chuỗi)
Mặc định:
{ }
idx.workspace.onStart
Các lệnh cần thực thi bất cứ khi nào không gian làm việc được mở.
Điều này có thể hữu ích khi bắt đầu theo dõi quá trình xây dựng. Chẳng hạn ở đây, chúng tôi chỉ định 2 lệnh để chạy:
{pkgs, ...}: {
idx.workspace.onStart = {
npm-watch-fe = "npm run watch:frontend";
npm-watch-be = "npm run watch:backend";
};
}
Loại: tập hợp thuộc tính (đường dẫn hoặc chuỗi)
Mặc định:
{ }
services.docker.enable
Liệu có bật Rootless Docker hay không.
Loại: boolean
Mặc định:
false
Ví dụ:
true