我正在打包一个带有外部依赖项(GraphicsMagick)的节点脚本,当试图覆盖从我生成的派生时,node2nix
我得到了错误:
wrapProgram:找不到命令
以下文本详细介绍了我尝试解决此错误的方法。
从头开始重现问题
我创建了一个最小的 git 存储库,如果您想看看那里,它会重现这个问题。否则,重现问题的步骤如下。
初始外壳会话:
在一个空目录中,运行:
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);
});
在 package.json 中添加一个“bin”部分:
"bin": "index.js"
生成 *.nix 文件node2nix
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: line 95: wrapProgram: command not found
有用的资源
- node2nix git 存储库- 包括一些基本示例。
wrapProgram
nixpkgs中的示例覆盖- nixpkgs 如何使用postInstall
由node2nix
.