---
service: "Publicasta"
schema_version: "1.0"
article_id: 580
title: "mise 2026.9.4：把机器配置变成可移植的项目声明"
language: "zh"
default_language: "en"
canonical_url: "https://publicasta.com/open_source_radar/mise_2026_9_4_nix_bootstrap_environment_selectors?lang=zh"
json_url: "https://publicasta.com/open_source_radar/mise_2026_9_4_nix_bootstrap_environment_selectors.json?lang=zh"
api_url: "https://publicasta.com/api/public/v1/channels/open_source_radar/articles/mise_2026_9_4_nix_bootstrap_environment_selectors?lang=zh"
channel_url: "https://publicasta.com/api/public/v1/channels/open_source_radar"
channel_articles: "https://publicasta.com/api/public/v1/channels/open_source_radar/articles"
search_url: "https://publicasta.com/api/public/v1/search"
documentation_url: "https://publicasta.com/api-docs#reading-publicasta"
openapi_url: "https://publicasta.com/api-docs/openapi.json"
published_at: "2026-09-11T07:07:52+00:00"
updated_at: "2026-09-11T07:07:52+00:00"
translations:
  - language: "ar"
    html_url: "https://publicasta.com/open_source_radar/mise_2026_9_4_nix_bootstrap_environment_selectors?lang=ar"
    markdown_url: "https://publicasta.com/open_source_radar/mise_2026_9_4_nix_bootstrap_environment_selectors.md?lang=ar"
    json_url: "https://publicasta.com/open_source_radar/mise_2026_9_4_nix_bootstrap_environment_selectors.json?lang=ar"
  - language: "de"
    html_url: "https://publicasta.com/open_source_radar/mise_2026_9_4_nix_bootstrap_environment_selectors?lang=de"
    markdown_url: "https://publicasta.com/open_source_radar/mise_2026_9_4_nix_bootstrap_environment_selectors.md?lang=de"
    json_url: "https://publicasta.com/open_source_radar/mise_2026_9_4_nix_bootstrap_environment_selectors.json?lang=de"
  - language: "en"
    html_url: "https://publicasta.com/open_source_radar/mise_2026_9_4_nix_bootstrap_environment_selectors?lang=en"
    markdown_url: "https://publicasta.com/open_source_radar/mise_2026_9_4_nix_bootstrap_environment_selectors.md?lang=en"
    json_url: "https://publicasta.com/open_source_radar/mise_2026_9_4_nix_bootstrap_environment_selectors.json?lang=en"
  - language: "es"
    html_url: "https://publicasta.com/open_source_radar/mise_2026_9_4_nix_bootstrap_environment_selectors?lang=es"
    markdown_url: "https://publicasta.com/open_source_radar/mise_2026_9_4_nix_bootstrap_environment_selectors.md?lang=es"
    json_url: "https://publicasta.com/open_source_radar/mise_2026_9_4_nix_bootstrap_environment_selectors.json?lang=es"
  - language: "fr"
    html_url: "https://publicasta.com/open_source_radar/mise_2026_9_4_nix_bootstrap_environment_selectors?lang=fr"
    markdown_url: "https://publicasta.com/open_source_radar/mise_2026_9_4_nix_bootstrap_environment_selectors.md?lang=fr"
    json_url: "https://publicasta.com/open_source_radar/mise_2026_9_4_nix_bootstrap_environment_selectors.json?lang=fr"
  - language: "pl"
    html_url: "https://publicasta.com/open_source_radar/mise_2026_9_4_nix_bootstrap_environment_selectors?lang=pl"
    markdown_url: "https://publicasta.com/open_source_radar/mise_2026_9_4_nix_bootstrap_environment_selectors.md?lang=pl"
    json_url: "https://publicasta.com/open_source_radar/mise_2026_9_4_nix_bootstrap_environment_selectors.json?lang=pl"
  - language: "ru"
    html_url: "https://publicasta.com/open_source_radar/mise_2026_9_4_nix_bootstrap_environment_selectors?lang=ru"
    markdown_url: "https://publicasta.com/open_source_radar/mise_2026_9_4_nix_bootstrap_environment_selectors.md?lang=ru"
    json_url: "https://publicasta.com/open_source_radar/mise_2026_9_4_nix_bootstrap_environment_selectors.json?lang=ru"
  - language: "zh"
    html_url: "https://publicasta.com/open_source_radar/mise_2026_9_4_nix_bootstrap_environment_selectors?lang=zh"
    markdown_url: "https://publicasta.com/open_source_radar/mise_2026_9_4_nix_bootstrap_environment_selectors.md?lang=zh"
    json_url: "https://publicasta.com/open_source_radar/mise_2026_9_4_nix_bootstrap_environment_selectors.json?lang=zh"
---

# mise 2026.9.4：把机器配置变成可移植的项目声明

> mise 2026.9.4 将 Nix 引导、环境选择器、托管工具的 man 页面和更稳妥的跨平台锁定带进同一套配置。它让团队协作更顺手，也让审核配置的必要性更加明显。

版本管理器通常只回答一个相对狭窄的问题：这个项目应该使用哪个 Node、Python、Ruby、Go 或 Rust 版本？但 mise 已经有一段时间在回答更宽的问题。它可以管理工具版本、环境变量、任务、仓库、dotfiles、服务，以及工作站配置中的一部分内容，而且这些设置都能写进 Git 跟踪的配置文件。最新版本又把边界向外推了一步。

 ![开发者工作站的编辑插图，展示配置文件、软件包管理元素、环境选择器和锁形符号。](https://publicasta.com/storage/projects/10/pages/580/2026/09/c0b59934-dfe3-4094-abba-2ac7cbf8e54e.webp)

 mise 2026.9.4 增加了内置的 Nix 引导包管理器，允许包声明依赖当前激活的 mise 环境，让 Packslip 管理的工具安装 man 页面，并改进锁定和平台选择。这个版本于 9 月 9 日发布，是近期最值得关注的 mise 更新之一，因为它改变了项目配置与周围主机之间的关系。

 这一区别很重要。现在，一个项目可以描述更多它在语言运行时之外还需要的软件，同时仍然把包安装交给机器原本使用的原生管理器。对于同时使用 macOS 和 Linux 的团队，这可能让新成员入门更清晰。不过，它并不是 Nix、容器或完整可复现操作系统定义的通用替代品。

 ## mise 2026.9.4 改了什么

 这次发布有四项值得分开看的变化。最醒目的功能，是在 `[bootstrap.packages]` 下新增 `nix:` 后端。配置可以声明这样的条目：

 ```toml
[bootstrap.packages]
"nix:ripgrep" = "latest"
"nix:jq" = "latest"
"nix:python3Packages.pip" = "latest"
```

 运行 `mise bootstrap packages apply` 后，这些包会安装到用户正常使用的 Nix profile 中。mise 不会为它们创建 shim，也不会接管 Nix store，而且这个后端不会调用 `sudo`。profile、注册表、substituter、受信任密钥、缓存和回滚模型仍然由 Nix 负责。

 第二项变化是 bootstrap 包条目的 `env` 选择器。一个包可以只在一个或多个命名的 mise 环境中生效：

 ```toml
[bootstrap.packages]
"brew:postgresql" = { version = "latest", env = ["dev", "test"] }
"apt:clang" = { version = "latest", env = "native" }
```

 选择器会根据通过 `-E` 或 `MISE_ENV` 激活的环境进行判断。如果条目还带有 `os` 选择器，那么两个条件都必须匹配。在 `dev` 环境中工作的开发者可以获得 PostgreSQL，而较轻量的文档环境或类似生产的环境不会激活它。即使环境当前没有激活，这个声明仍然保留在配置中，mise 也会避免把它清理掉。

 第三项变化涉及 Packslip，也就是 mise 用于工具的签名发布产物路径。通过 Packslip 安装的版本现在可以包含静态 man 页面资源，同时保留 shell 补全和 agent skill。相关工具处于激活状态时，mise 会把它的 man 页面根目录加入 `MANPATH`，并保留系统及调用方定义的路径。已有安装需要重新安装，新的 man 页面才会出现。

 第四项是一个规模较小但很实用的任务运行器变化。`task.quiet` 或 `MISE_TASK_QUIET` 环境变量可以隐藏 mise 自己输出的任务前缀、状态消息和命令回显标题，但不会隐藏任务本身产生的输出。较早的 `output = "quiet"` 模式已经弃用，计划在 2027.9.3 移除。

 此外还有一批影响正确性的修复，涉及带惰性依赖的惰性工具、ARM 架构解析、主机没有原生二进制时的发布产物选择、Homebrew 硬链接 Mach-O 签名、Windows shim 名称、glibc 兼容性，以及感知平台的锁文件。dotfiles 历史索引也得到改进：它现在会在进程内重建元数据，而不是为每个检查点都启动一次 Git。维护者报告称，在一个包含 80 个检查点和 44 个文件的测试案例中，用时从大约 26 至 28 秒降到了不到 1 秒。

 ## 真正有用的并不是“通过 mise 使用 Nix”

 如果把这个版本概括成 Nix 集成，然后就此打住，很容易错过更重要的设计选择。mise 试图为几类依赖提供一个声明式入口，但并没有假装这些依赖拥有相同的语义。

 语言运行时自然适合写在项目工具定义里。编译器库、系统头文件、命令行工具或数据库服务器，往往更适合交给主机包管理器。Nix 包则属于 Nix profile 或 NixOS 配置。2026.9.4 之前，如果团队想在同一套引导流程中描述这些层次，通常要分别编写说明，或者维护一组按包管理器划分的脚本。新的后端让项目拥有统一声明，同时把实际所有权留给 Nix。

 这种分工可以从命令中看出来。`mise bootstrap packages use` 记录声明；`mise bootstrap packages apply` 安装缺失项目；`mise bootstrap packages status` 报告某项已存在、缺失、不可用还是被跳过；`mise bootstrap packages upgrade` 才是明确的更新操作。对一个值为 `latest` 的声明执行 apply，并不一定会从一个持续变化的源更新已经安装的包。这种区分是合理的：新成员入门时应当补齐缺失状态，而不是每次进入仓库都悄悄升级工作站。

 Nix 后端还为 NixOS 提供导出路径。团队可以记录声明而不进行安装：

 ```sh
mise bootstrap packages use --no-install nix:ripgrep nix:jq
mise bootstrap packages export --format nix > packages.nix
```

 生成的模块随后可以被 NixOS 配置导入。在这条工作流中，评估、包选择、overlay、系统激活和回滚都由 NixOS 负责。mise 只是方便的编写和转换层，而不是第二个系统管理器。

 这个边界必须明确。如果项目对 `nix:` 声明运行 `mise bootstrap packages apply`，包会进入用户 profile。如果同一意图是要成为 NixOS 系统配置的一部分，更稳妥的做法是使用 `--no-install`，导出模块，审核生成结果，再通过现有的 NixOS 流程重新构建。这两条路径有关联，但不能互换。

 ## 环境选择器解决了真实的团队问题

 对普通团队而言，`env` 选择器可能比 Nix 后端更有影响。许多仓库有多种运行模式，却只有一份设置文档。一个前端项目可能在所有环境中都需要 Node 和浏览器工具链，在集成测试中需要 PostgreSQL，在原生构建时才需要图像处理库。一个 monorepo 可能有供编辑使用的轻量默认环境、带数据库和浏览器的 `test` 环境，以及带签名工具的 `release` 环境。

 没有选择器时，设置文件通常只能在两种不理想的方案中选择。它可以在每台机器上安装所有可能的依赖，使默认环境变慢且嘈杂；也可以把设置拆成多个脚本，但脚本会随着平台和团队变化逐渐偏离。条件声明则能把意图集中呈现在一处。

 这个功能有意保持在较窄的范围内。包可以按操作系统或 mise 环境选择，但它不是用于包安装的通用编程语言。`os` 和 `env` 条件是同时组合的，而不是二选一。一个只面向 macOS、且仅在 `native` 环境中启用的包，即使环境名称匹配，在 Linux 上仍然不会生效。

 这种可预测性有助于审核。审阅者可以直接看到某个包仅限于 `macos`、`linux/x64`、`dev` 或 `test`，不必先执行一段不透明的 shell 脚本。它也让状态输出更有解释力。不过，当前主机缺少某个包管理器，并不能自动证明项目已经正确配置；文档提醒，跳过的声明仍需单独检查。

 这里还有一个不太显眼的生命周期问题。未激活环境中的包仍然处于声明状态，并受到保护，不会被清理。这个默认行为更安全，因为临时切换到较小环境不应导致另一个环境后来失去工具。但它也意味着，如果用户希望通过环境切换回收磁盘空间，就需要明确、按管理器划分的清理策略。声明式存在和本地磁盘最小化是两个不同目标。

 ## Man 页面让托管工具不再像随手下载的二进制文件

 工具管理器往往只关注把可执行文件放到 `PATH`。对于快速运行一个命令来说，这已经够用；但对成熟工具而言，文档、示例和运维细节经常都在 man 页面里。新的 Packslip 资源支持让打包工具可以把这些页面作为托管版本的一部分发布。

 实现范围是有意限定的。mise 会为 Packslip 支持的工具版本加入 man 根目录，并把调用方原始 `MANPATH` 纳入环境缓存的身份信息。这样，针对不同调用方文档路径构建的进程就不会被错误复用。升级到 2026.9.4 后，也不要假设所有现有安装会自动获得页面；相关工具必须重新安装。

 这是个小变化，却能改善入门体验。仓库可以固定一个工具，并让 `tool --help` 与 `man tool` 指向同一托管版本。对于不同发行版行为差异明显的命令行基础设施工具，这尤其有用。它并不会把任意二进制文件变成完整打包的操作系统组件，系统 man 页面惯例在不同平台之间也仍然不完全相同。

 ## 锁文件和产物修复同样值得关注

 这次发布中的打包修复没有 Nix 支持那么显眼，却更可能影响 CI。现在，`mise lock --platform` 会验证签名的发布清单，并为每个请求的目标记录 URL、校验和、大小及签名者。当锁文件在一台机器上创建、再由另一台机器使用时，这一点很重要。只记录版本而不记录确切产物的锁文件，会给平台相关解析留下过多变化空间。

 当注册表没有针对当前主机发布二进制文件时，产物选择也不再退回通用的 `source.tar.gz`。把源代码下载下来，却像可运行的发布版本一样处理，显然不是理想的失败方式。在 glibc Linux 上，选择器现在会考虑产物要求的最低 glibc 版本；如果存在匹配的静态 musl 构建，还可以选择它。这并不保证兼容：原生库、内核特性、CPU 指令和运行时假设仍然可能带来问题。它只是让一种常见的不兼容情况更早暴露给解析器。

 Windows 修复也很具体。Packslip 链接现在会在 Windows 上使用正确的 `.exe` 文件名，而 Unix 系统仍保留没有扩展名的 shim 名称。Homebrew 修复则处理了一个更出人意料的故障：硬链接的 Mach-O 可执行文件可能安装成功，却因为签名没有覆盖每个别名，后来被 macOS 终止。这类缺陷通常不会出现在功能公告的标题里，却决定了版本管理器能否在混合设备群中被信任。

 ## 第一次测试应该谨慎进行

 评估这个版本时，最好从一个可丢弃的仓库和一次 dry run 开始。官方 bootstrap 文档建议先审核配置，并运行 `mise bootstrap --dry-run`，然后再应用配置。对按包管理器划分的操作也应保持同样习惯。一个最小实验可以声明一个工具、一个 Nix 包，以及一个受环境限制的主机包。

 ```toml
[tools]
node = "22"

[env]
_.python.venv = { path = ".venv", create = true }

[bootstrap.packages]
"nix:jq" = "latest"
"brew:postgresql" = { version = "latest", os = "macos", env = ["test"] }
"apt:postgresql" = { version = "latest", os = "linux", env = ["test"] }
```

 先检查默认环境的输出，再检查测试环境。确认调用的包管理器命令符合预期，确认主机包不会在错误的操作系统上激活，并确认 Nix 声明会通过你有意使用的注册表解析。对于提交到 Git 的项目，配置文件应该像代码一样接受审查。它可以安装包、改变 shell 激活方式、创建服务、写入文件并运行钩子。

 一个合理的顺序是：

 ```sh
mise trust
mise bootstrap packages status
mise bootstrap --dry-run
mise -E test bootstrap --dry-run
mise bootstrap packages apply --dry-run
```

 只有当输出已经能够解释清楚时，开发者才应实际应用配置。在 CI 中，可以使用 `mise bootstrap --yes` 进行无人值守操作，但非交互标志只是移除了确认步骤，并不会让不受信任的配置变得安全。对可重复性有要求的地方，应固定版本或源代码修订；CI 锁文件也应保持在审核范围内。

 针对 Nix，官方文档要求 Nix 2.24 或更新版本，并启用 `nix-command` 和 flakes，同时支持现代的 `nix profile`。简写形式 `nix:ripgrep` 会通过机器的 `nixpkgs` 注册表解析。`latest` 表示该源当前提供的内容，并不是锁定值。如果构建必须在未来恢复，应使用固定修订的源或固定的注册表条目。这个后端不支持类似 `nix:ripgrep@14` 的包版本固定写法。

 文档还特别强调，mise 不会初始化或迁移旧版 Nix profile。如果机器报告旧的 `nix-env` profile 格式，那是需要单独解决的 Nix 管理问题。工具不会删除或静默转换它；这是一项较好的安全属性，但可能让期待“一条命令完成迁移”的用户感到意外。

 ## 它不能替代什么

 mise 2026.9.4 很适合解决既有工具之间的协调问题。如果核心要求是 hermetic 构建或不可变系统，它就没有那么合适。Nix flake 可以固定输入，并以更深的依赖图和评估控制描述开发 shell。devenv 在 Nix 之上提供面向开发者的层，包括服务、任务、语言支持和锁文件。容器或 devcontainer 则可能为 CI 和新成员入门提供更强的边界。

 与 asdf 的比较也很有帮助。asdf 主要是带插件系统和项目级 `.tool-versions` 文件的多运行时版本管理器。对于只需要统一语言运行时和自动切换、不想引入更广泛机器引导模型的团队，它是更简单的选择。direnv 处理的是另一个问题：进入目录时加载环境变化。它可以和 mise、Nix 或其他环境生成器搭配使用。

 选择应当由实际问题决定，而不是由支持的集成数量决定。如果仓库需要用一份配置统一管理运行时、任务、环境变量和边界清晰的主机设置，可以考虑 mise。如果可重复性和包依赖图控制是首要需求，应使用原生 Nix。如果团队希望得到带更高层服务和工作流配置的 Nix 开发环境，可以使用 devenv。如果只需要运行时版本管理，asdf 可能足够。如果主要缺少的是自动环境激活，direnv 更直接。这些工具可以共存，但对 `PATH`、语言版本和 shell hook 的所有权重叠，会制造很难定位的故障。

 ## 安全与信任边界

 这个版本是开源项目，仓库采用 MIT 许可证，并发布了安全策略。签名的发布标签和 Packslip 清单验证，都是有用的供应链信号，但它们都不能消除配置本身被执行的风险。一个签名正确的 mise 二进制文件，完全可能忠实地应用恶意的 `mise.toml`；签名验证能证明产物来自哪里，却不能证明仓库请求安装的包、钩子、服务或文件修改适合你的机器。

 Bootstrap 明确具备破坏性操作能力。它可以安装包、修改激活文件、管理服务、更新仓库、写入 dotfiles 并运行任务。因此 dry run 和 trust 步骤不能省略。不要因为仓库公开，或者配置文件很短，就自动信任它。阅读钩子，检查远程 URL，核对包名，并留意使用提升权限或修改 shell 启动文件的命令。

 Nix 也有自己的信任决策。注册表、二进制缓存、substituter、受信任公钥和 flake 输入都会影响下载或构建的内容。mise 集成使用现有的 Nix 配置，而不是创建另一套信任模型。这很方便，但也意味着安全审核不能停在 mise 文件上。团队应该记录接受哪些 Nix 注册表和缓存，以及源代码修订如何固定。

 项目仍在积极开发，也是分阶段采用的理由之一。一项包含大量跨平台改动的发布，可能修复真实故障，同时也可能在维护者无法本地测试的 shell、包管理器或架构上暴露边界情况。可以先从开发机开始，再测试干净的 CI runner，最后扩大范围。在新的 bootstrap 流程已经证明能够稳定移除并重新创建之前，应保留旧的设置路径。

 ## 现在适合谁尝试

 最适合的团队，是那些已经使用 mise，却为 Homebrew、apt、Nix、dotfiles 或测试服务积累了多套入门脚本的团队。他们能从环境选择器，以及“已声明”和“已安装”之间的区分中获得最大收益。混合 macOS/Linux 仓库也是不错的场景，尤其是开发者需要相同的项目任务名称，却必须使用不同原生包管理器时。

 CLI 工具密集型项目的维护者也值得测试这个版本。Packslip man 页面、签名清单、感知平台的锁文件和改进后的产物选择，解决的是影响日常使用的细节，而不是演示效果。自行分发工具的项目可以检查，托管版本在不同 shell 和平台上是否表现得更加一致。

 不太适合的对象，是寻找自动且不可见的机器修改的团队。mise 让设置过程更容易阅读，但不会让它没有风险。同样，`latest` 声明也不应被误认为可重复构建。新的 Nix 后端是项目级声明与原生包管理器之间的桥梁，而不是抹平所有包管理器语义的魔法抽象。

 ## 结论

 mise 2026.9.4 最重要的变化，是让主机依赖能够按条件启用，并且更容易接受审查。Nix 支持的价值在于尊重 Nix 的所有权模型；`env` 选择器则解决了拥有多种工作模式的仓库所面对的实际问题。man 页面和锁定改进强化了工具管理中不那么引人注目的部分，跨平台修复也让这个版本不只适用于本地 shell，同样值得 CI 环境关注。

 如果你当前的工作流已经像是一组运行时文件、包脚本、任务定义和按环境区分的说明，那么可以试试它。先从小配置开始，使用 dry run，把必须重复的内容固定下来；在系统级 Nix 或容器定义需要保持权威的地方，继续让它们承担最终控制。对于简单的运行时管理，mise 可能显得过于庞杂；但对希望让整个开发环境变得可理解、又不假装所有操作系统都相同的团队来说，这个版本值得认真测试。

 ## 来源

 本文依据以下项目发布信息与文档进行改编：

 - [mise v2026.9.4 发布说明：Nix Bootstrap、Environment Selectors 与 Man Pages](https://github.com/jdx/mise/releases/tag/v2026.9.4)
- [mise 项目仓库与项目概览](https://github.com/jdx/mise)
- [Nix bootstrap 包管理器文档](https://mise.jdx.dev/bootstrap/packages/nix.html)
- [Bootstrap Packages 文档](https://mise.jdx.dev/bootstrap/packages/)
- [Bootstrap 工作流与 dry-run 文档](https://mise.jdx.dev/bootstrap.html)
- [mise MIT 许可证](https://github.com/jdx/mise/blob/main/LICENSE)
- [mise 安全策略](https://github.com/jdx/mise/security/policy)
- [asdf 简介与版本管理器范围](https://asdf-vm.com/guide/introduction.html)
- [direnv 项目文档](https://direnv.net/)
- [devenv 入门文档](https://devenv.sh/getting-started/)
