stephank / composer-plugin-nixify
Composer 插件,用于帮助 Nix 打包
Requires
- composer-plugin-api: ^1.1 || ^2.0
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 构建,但通常在现代磁盘上这不是问题。