node2nix覆盖; wrapProgram:找不到命令

时间:2018-04-07 19:40:31

标签: nix nixos nixpkgs

我正在使用外部依赖项(GraphicsMagick)打包节点脚本,并且在尝试覆盖从node2nix生成的派生时,我收到错误:

  

wrapProgram:找不到命令

以下文字详细介绍了我尝试解决此错误的内容。

从头开始重现问题

我已经创建了一个minimal git repository来重现这个问题,如果您只是想看看那里。否则,重现问题的步骤如下。

初始Shell会话:

在空目录中,运行:

npm init -y
npm install --save gm
curl https://i.imgur.com/addSfQi.jpg > image.png

npm version: 5.6.0& node version v8.9.4

创建index.js

#!/usr/bin/env node

const path = require("path"); // node.js builtin
const gm = require("gm"); // GraphicsMagick module

const imagePath = path.join(__dirname, "image.png");

// Flip image horizontally and write to disk
gm(imagePath)
  .flop()
  .write(imagePath, error => {
    console.log("error:", error);
  });

将“bin”部分添加到package.json:

"bin": "index.js"

使用node2nix

生成* .nix文件
node2nix -8 -l package-lock.json

创建override.nix

{ pkgs ? import <nixpkgs> {}
, system ? builtins.currentSystem
}:

let
  nodePackages = import ./default.nix {
    inherit pkgs system;
  };
in
nodePackages // {
  package = nodePackages.package.override (oldAttrs: {
    postInstall = ''
      wrapProgram "$out/bin/test-nodejs-gm-nixpkg" --prefix PATH : "${pkgs.graphicsmagick}/bin"
    '';
  });
}

构建nix包

nix-build override.nix -A package

上述内容失败了:

  

/ nix / store / * / setup:第95行:wrapProgram:未找到命令

有用的资源

1 个答案:

答案 0 :(得分:0)

wrapProgram包含在makeWrapper包中。

nativeBuildInputs = oldAttrs.nativeBuildInputs or [] ++ [ pkgs.makeWrapper ];

如@ppb在评论中所述。