自定义 IDX 工作区

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";
  };
}

Type:任意属性集

默认值{ }

idx.extensions

您要在 IDX 工作区中安装的扩展程序。

这是完全限定扩展程序 ID(即 ${publisherId}.${extensionId})的列表。

您可以在 Open VSX Registry 上找到可用扩展程序的列表,并在 dev.nix 文件中按 ${publisherId}.${extensionId} 将其输入。

类型:(非空字符串或路径)列表

默认值[ ]

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.*.command

要执行的命令

类型:字符串列表

默认值[ ]

idx.previews.previews.*.cwd

工作目录

类型:字符串

默认值""

idx.previews.previews.*.env

要设置的环境变量。

Type:一组字符串的属性

默认值{ }

idx.previews.previews.*.manager

经理

类型webflutter 之一

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