drupol/composer-plugin-nixify

Composer 插件,帮助进行 Nix 打包,stephank/composer-plugin-nixify 的临时分支

安装: 248

依赖者: 2

建议者: 0

安全: 0

星星: 2

关注者: 1

分支: 2

类型:composer-plugin

2.0.7 2022-06-27 21:17 UTC

This package is auto-updated.

Last update: 2024-08-29 20:09:52 UTC


README

生成一个 Nix 表达式来构建一个 Composer 项目。

  • 默认的配置阶段,在您的项目中运行 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 构建,但通常在现代磁盘上这不是问题。