我有两个 Nix Flakes:一个包含一个应用程序,另一个包含该应用程序的插件。当我使用插件构建应用程序时,出现错误
error: path '/nix/store/3b7djb5pr87zbscggsr7vnkriw3yp21x-mainapp-go-modules' is not valid
我不知道这个错误意味着什么以及如何修复它,但我可以在 macOS 和 Linux 上重现它。有问题的路径是vendor第一步生成的目录buildGoModule。
重现错误的最小设置需要一堆文件,因此我提供了一个带注释的 bash 脚本,您可以在空文件夹中执行该脚本来重新创建我的设置:
#!/bin/bash
# I have two flakes: the main application and a plugin.
# the mainapp needs to be inside the plugin directory
# so that nix doesn't complain about the path:mainapp
# reference being outside the parent's root.
mkdir -p plugin/mainapp
# each is a go module with minimal setup
tee plugin/mainapp/go.mod <<EOF >/dev/null
module example.com/mainapp
go 1.16
EOF
tee plugin/go.mod <<EOF >/dev/null
module example.com/plugin
go 1.16
EOF
# each contain minimal Go code
tee plugin/mainapp/main.go <<EOF >/dev/null
package main
import "fmt"
func main() {
fmt.Println("Hello, World!")
}
EOF
tee plugin/main.go <<EOF >/dev/null
package plugin
import log
func init() {
fmt.Println("initializing plugin")
}
EOF
# the mainapp is a flake that provides a function for building
# the app, as well as a default package that is the app
# without any plugins.
tee plugin/mainapp/flake.nix <<'EOF' >/dev/null
{
description = "main application";
inputs = {
nixpkgs.url = github:NixOS/nixpkgs/nixos-21.11;
flake-utils.url = github:numtide/flake-utils;
};
您需要安装了 Flake 支持的 Nix 来重现错误。在plugin此脚本创建的文件夹中,执行
$ nix build
trace: sources at /nix/store/d5arinbiaspyjjc4ypk4h5dsjx22pcsf-mainapp-with-plugins-source
error: path '/nix/store/3b7djb5pr87zbscggsr7vnkriw3yp21x-mainapp-go-modules' is not valid
(如果你得到散列不匹配,只需用正确的散列更新薄片;我不太确定在存储库之外散布薄片时散列是否可重现。)
源目录(由跟踪显示)确实存在并且看起来不错。错误消息中给出的路径也存在并且包含modules.txt预期的内容。
在文件夹mainapp中,nix build确实运行成功,它构建了没有插件的应用程序。那么我对使路径无效的插件做了什么?
米琪卡哇伊
相关分类