stephank/composer-plugin-nixify

Composer 插件,用于帮助 Nix 打包

资助包维护!
stephank
Ko Fi

安装次数: 7,352

依赖者: 0

建议者: 0

安全: 0

星标: 15

关注者: 3

分支: 2

开放问题: 0

类型:composer-plugin

v1.1.0 2021-09-05 14:46 UTC

This package is auto-updated.

Last update: 2024-09-05 21:42:32 UTC


README

生成用于构建 Nix 项目的表达式。

  • 默认的配置阶段,在您的项目中运行 composer install。(可能就是构建您的项目所需的一切。)

  • 默认的安装阶段,根据您的 composer.json 中的 "bin" 创建可执行文件,使您的包易于安装。

  • Nix 中依赖项的细粒度获取,加速重建,并可能允许项目间共享下载。

  • 将您的 Composer 缓存预加载到 Nix 存储中,加速本地 nix-build

  • 随着您 composer require / composer update 依赖项,自动保持您的 Nix 表达式更新。

  • 插件本身不需要 Nix 安装,因此即使在某些开发者不使用 Nix 的情况下,也可以安全地将它添加到您的项目中。

相关项目

  • composer2nix:执行类似任务,但作为独立的命令。相比之下,此插件试图自动化流程,并使 Nix 和非 Nix 开发者都容易使用。

  • yarn-plugin-nixify:为 Node.js 和 Yarn v2 提供类似解决方案。

用法

Nixify 插件应与所有返回到 1.3.0 的 Composer 版本兼容,并支持 Composer 2.0。

要使用此插件

# Install the plugin
composer require stephank/composer-plugin-nixify

# Build your project with Nix
nix-build

运行启用此插件的 Composer 将生成两个文件

  • composer-project.nix:此文件总是被覆盖,并包含您的项目的基本衍生物。

  • default.nix:如果尚不存在,则生成。此文件旨在通过任何特定于项目的逻辑进行自定义。

这可能已经成功构建!但如果您的项目需要额外的构建步骤,您可能需要稍微自定义 default.nix。一些可能的示例

{ pkgs ? import <nixpkgs> { } }:

let

  # Example of providing a different source tree.
  src = pkgs.lib.cleanSource ./.;

  project = pkgs.callPackage ./composer-project.nix {

    # Example of selecting a specific version of PHP.
    php = pkgs.php74;

  } src;

in project.overrideAttrs (oldAttrs: {

  # Example of overriding the default package name taken from composer.json.
  name = "myproject";

  # Example of adding packages to the build environment.
  buildInputs = oldAttrs.buildInputs ++ [ pkgs.imagemagick ];

  # Example of invoking a build step in your project.
  buildPhase = ''
    composer run lint
  '';

})

设置

一些额外的设置可以在您的 composer.json 中的 "extra" 对象中设置

  • nix-expr-path 可以设置来自定义 Nixify 插件写入 composer-project.nix 的路径。例如,如果您也在项目中使用 Niv,您可能希望将其设置为 nix/composer-project.nix

  • generate-default-nix 可以设置为 false 来禁用生成 default.nix。此文件仅在尚不存在时生成,但此标志在您根本不需要 default.nix 时很有用。

  • enable-nix-preload 可以设置为 false 来禁用将 Composer 缓存预加载到 Nix 存储中。此预加载旨在加速本地 nix-build,因为 Nix 将不需要再次下载依赖项。预加载意味着磁盘上会有依赖项的另一个副本,即使您不进行本地 Nix 构建,但通常在现代磁盘上这不是问题。