You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Nix表达式中./.的含义是什么?为何不直接使用.?

为什么在flake-compat中要用./.而不是.?

在使用flake-compat的场景里,经常能看到这样的代码:

(import (fetchTarball https://github.com/edolstra/flake-compat/archive/master.tar.gz) {
  src = ./.;
}).shellNix

你可能已经发现,./.和.指向的是同一个目录,比如在终端里执行以下命令就能验证:

[~/testdir]$ ll .
total 24
drwxr-xr-x 2 toraritte users  4096 Jul 21 21:56 ./
drwx------ 7 toraritte users 20480 Jul 15 23:13 ../
-rw-r--r-- 1 toraritte users     0 Jul 21 21:56 lofa

[~/testdir]$ ll ./.
total 24
drwxr-xr-x 2 toraritte users  4096 Jul 21 21:56 ./
drwx------ 7 toraritte users 20480 Jul 15 23:13 ../
-rw-r--r-- 1 toraritte users     0 Jul 21 21:56 lofa

那为什么不直接用.呢?

核心原因是Nix语法里,.和./.的含义完全不同:

  • ./.是明确的文件系统相对路径写法,Nix会把它解析为当前表达式文件所在的目录路径,这正是flake-compat需要的「当前项目目录」。
  • 但如果写src = .,在这个函数参数的上下文里,.指代的是函数接收的参数属性集,而不是文件路径。这样flake-compat拿到的就不是项目目录,而是一个空的(或默认的)属性集,自然会导致功能异常。

所以必须用./.来明确指定当前目录路径,避免Nix把.误解析成参数属性集。

内容的提问来源于stack exchange,提问作者toraritte

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 15:18:25