Project IDX 的目标是为开发者提供尽可能实用的帮助。IDX 实现这一点的一种方法是,让开发者能够自由灵活地在其工作区中安装适合任何给定项目的工具,并自定义设置以使其适合自己的工作区。
尼克 + 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 或不稳定。
类型:软件包列表
默认值:[ ]
频道
要使用 nixpkgs 通道。
此渠道定义了 pkgs
参数的内容。
类型:“stable-23.05”“stable-23.11”“unstable”其中之一
默认值:"stable-23.11"
env
在开发者环境中设置的环境变量。
这些内容会传播到您的所有 shell 和预览服务器。如果您的应用需要一组特定的变量,环境变量会特别有用。
例如:
{pkgs, ...}: {
env = {
HELLO = "world";
};
}
类型:任意属性集
默认值:{ }
idx.extensions
您要在 IDX 工作区中安装的扩展程序。
这是完全限定扩展 ID 的列表,例如 ${publisherId}.${extensionId}
。
您可以在 Open VSX Registry 上找到可用扩展程序的列表,然后按 ${publisherId}.${extensionId}
在 dev.nix
文件中输入它们。
类型:(非空字符串或路径)列表
默认值:[ ]
idx.previews.enable
将此值设置为 true
以启用 IDX 预览。
此功能提供了一种在开发应用的过程中自动运行和重新加载应用的方法。
类型:布尔值
默认值: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
要设置的环境变量。
Type:字符串的属性集
默认值:{ }
idx.previews.previews.<name>.manager
经理
类型:“web”或“flutter”之一
idx.workspace.onCreate
首次创建和打开工作区时要执行的命令。
这对于设置开发环境非常有用。例如,我们在这里指定要运行的 npm install
:
{pkgs, ...}: {
idx.workspace.onCreate = {
npm-install = "npm install";
};
}
Type:一组(路径或字符串)的属性
默认值:{ }
idx.workspace.onStart
每当工作区打开时要执行的命令。
这对于开始构建观察器非常有用。例如,我们在这里指定了 2 条要运行的命令:
{pkgs, ...}: {
idx.workspace.onStart = {
npm-watch-fe = "npm run watch:frontend";
npm-watch-be = "npm run watch:backend";
};
}
Type:一组(路径或字符串)的属性
默认值:{ }
services.docker.enable
是否启用无 Rootless Docker。
类型:布尔值
默认值:false
示例:true
services.mysql.enable
是否启用 MySQL 服务器。
该服务器使用无密码用户根目录进行初始化。因此,如需创建其他用户并创建数据库,请使用 mysql -u root
。.
类型:布尔值
默认值:false
示例:true
services.mysql.package
要使用的 MySQL 软件包。
类型:软件包
默认值:pkgs.mysql
示例:pkgs.mysql80
services.postgres.enable
是否启用 PostgreSQL 服务器。
类型:布尔值
默认值:false
示例:true
services.postgres.package
要使用的 PostgreSQL 软件包。
类型:软件包
默认值:pkgs.postgresql
示例:pkgs.postgresql_15
services.postgres.extensions
要安装的 Postgres 扩展程序。
""list of (one of "age", "apache_datasketches , "apache_datasketches , g " gy p " "
默认值:[ ]
示例:[ "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 之间(含 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 和 65535)
默认值:0
services.spanner.enable
是否启用 Google Cloud Spanner 模拟器。
类型:布尔值
默认值:false
示例:true
services.spanner.fault-injection
是否启用针对事务的随机故障注入。
类型:布尔值
默认值:false
示例:true
services.spanner.grpc-port
模拟器应绑定到的 TCP 端口。
类型:16 位无符号整数;介于 0 到 65535 之间(含 0 和 65535)
默认值:9010
services.spanner.rest-port
处理 REST 请求的端口
类型:16 位无符号整数;介于 0 到 65535 之间(含 0 和 65535)
默认值:9020