drupol / composer-plugin-nixify
Composer 插件,帮助进行 Nix 打包,stephank/composer-plugin-nixify 的临时分支
Requires
- composer-plugin-api: ^2
Requires (Dev)
- composer/composer: ^2
- drupol/php-conventions: ^5.0
- phpunit/phpunit: ^9.5
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 构建,但通常在现代磁盘上这不是问题。