自定义 IDX 工作区

借助项目 IDX,您可以通过定义一个 .idx/dev.nix 配置文件来描述以下内容,从而根据项目的具体需求量身定制工作区:

  • 您需要能够运行的系统工具(例如从终端运行),例如编译器或其他二进制文件。
  • 您需要安装的 IDE 扩展程序(例如,编程语言支持)。
  • 应用预览应如何显示(例如,运行 Web 服务器的命令)。
  • 可供在工作区中运行的本地服务器使用的全局环境变量

如需详细了解可用功能,请参阅 dev.nix 参考文档

Nix 和 IDX

IDX 使用 Nix 定义每个工作区的环境配置。具体而言,IDX 使用以下内容:

  • Nix 编程语言,用于描述工作区环境。Nix 是一种函数式编程语言。您可以在 dev.nix 文件中定义的属性和软件包库遵循 Nix 属性集语法

  • Nix 软件包管理器,用于管理工作区可用的系统工具。这类似于特定于操作系统的软件包管理器,例如 APT (aptapt-get)、Homebrew (brew) 和 dpkg

由于 Nix 环境是可重现且声明式的,因此在 IDX 上下文中,这意味着您可以将 Nix 配置文件作为 Git 代码库的一部分进行共享,以确保参与项目工作的每个人都有相同的环境配置。

基本示例

以下示例展示了启用预览的基本环境配置:

{ 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";
        # Optionally, specify a directory that contains your web app
        # cwd = "app/client";
      };
    };
  };
}

添加系统工具

如需向工作区添加系统工具(例如适用于云服务的编译器或 CLI 程序),请在 Nix 软件包注册库中查找唯一的软件包 ID,并将其添加到 dev.nix 文件的 packages 对象中,前缀为 `pkgs.:

{ 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
  ];
  ...
}

这与您通常使用特定于操作系统的软件包管理器(例如 APT [aptapt-get]、Homebrew [brew] 和 dpkg)安装系统软件包的方式不同。以声明方式准确描述所需的系统软件包,意味着 IDX 工作区更易于共享和重现。

使用本地节点二进制文件

与本地安装的节点软件包(即 package.json 中定义的软件包)相关的二进制文件可以通过在终端面板中使用 npx 命令调用它们来执行,就像在本地机器上一样。

此外,如果您位于包含 node_modules 文件夹的目录中(例如 Web 项目的根目录),则可以直接调用本地安装的二进制文件,而无需使用 npx 前缀。

添加 gcloud 组件

所有 IDX 工作区都可以使用 Google Cloud 专用 gcloud CLI 的默认配置。

如果您需要其他组件,可以将其添加到 dev.nix 文件中,如下所示:

{ pkgs }: {
  packages = [
    ...
    (pkgs.google-cloud-sdk.withExtraComponents [
      pkgs.google-cloud-sdk.components.cloud-datastore-emulator
    ])
    ...
  ];
}

添加 IDE 扩展程序

您可以通过以下两种方式使用 OpenVSX 扩展程序注册表在 IDX 中安装扩展程序:

  • 通过在 IDX 中使用扩展程序面板来发现和安装扩展程序。此方法最适合用户专用扩展程序,例如:

    • 自定义颜色主题
  • 通过向 dev.nix 文件添加扩展程序。当您分享工作区配置时,系统会自动安装这些扩展程序。此方法最适合项目专用扩展程序,例如:

    • 编程语言扩展,包括特定于语言的调试程序
    • 适用于项目中所用云服务的官方扩展程序
    • 代码格式设置工具

对于后一种方法,您可以通过查找完全限定的扩展程序 ID(采用 <publisher>.<id> 的形式)并将其添加到 idx.extensions 对象中,以便在 dev.nix 文件中添加 IDE 扩展程序,如下所示:

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

添加常用服务

IDX 还简化了您在开发过程中可能需要的常用服务的设置和配置,包括:

  • 容器
    • Docker (services.docker.*)
  • 消息功能
    • Pub/Sub 模拟器 (services.pubsub.*)
  • 数据库
    • MySQL (services.mysql.*)
    • Postgres (services.postgres.*)
    • Redis (services.redis.*)
    • Spanner (services.spanner.*)

如需详细了解如何在工作区中启用这些服务,请参阅 dev.nix 参考文档services.* 部分。

自定义预览

如需详细了解如何自定义应用预览,请参阅预览文档

设置工作区图标

您可以为工作区选择自定义图标,方法是将名为 icon.png 的 PNG 文件放置在 .idx 目录中的 dev.nix 文件旁边。IDX 随后会在信息中心内使用此图标来表示您的工作区。

由于此文件可以提交到源代码控制系统(例如 Git),因此这是一种很好的方式,可帮助项目中的所有人员在使用 IDX 时看到项目的相同图标。由于该文件可能会因 Git 分支而异,因此您甚至可以在处理应用的“Beta 版”和“正式版”版本时直观地区分工作区。

将自定义内容转换为模板

如需将您的环境配置转换为供任何人构建新项目的“起始环境”,请参阅创建自定义模板的文档。

查看所有自定义选项

如需详细了解环境配置架构,请参阅 dev.nix 参考文档