跳到主要内容

理解 kmpkg 中的默认功能

本文介绍默认功能的概念、影响及高效管理策略。

默认功能是一组功能,在安装端口时会自动包含(除非显式禁用)。这些功能确保库在依赖关系图复杂度增加的情况下,仍能维持基准功能水平。

信息

并非所有端口都包含默认功能。

默认功能的作用

默认功能为用户提供便捷体验,确保具有模块化功能的库默认包含核心功能。

例如,一个支持提取多种归档格式的库可能将每种格式作为可选功能。若没有默认功能,该库默认可能不包含任何提取算法,增加初始使用难度。

kmpkg 安装的包会始终包含其默认功能(除非显式要求禁用)。此行为适用于:

  • 用户通过清单文件或 kmpkg install 命令直接请求的包
  • 作为依赖项被间接引用的包

清单模式下禁用默认功能

在依赖项声明中添加 "default-features": false 属性,即可禁用其默认功能的安装。

注意:仅能对用户直接请求的依赖项禁用默认功能。若需禁用传递依赖的默认功能,需将其提升为项目清单中的直接依赖项。

经典模式下禁用默认功能

在安装命令中指定特殊的 core 功能,即可安装不含默认功能的包。

信息

与清单模式类似,若需禁用传递依赖的默认功能,需将其提升为命令行中的直接安装请求。

示例 1:安装包含默认功能的库

{
"name": "my-application",
"version": "0.15.2",
"dependencies": [
"extract-any"
]
}

此场景中,extract-any 会随默认功能一起安装,确保开箱即用。

示例 2:禁用默认功能(清单模式)

{
"name": "my-application",
"version": "0.15.2",
"dependencies": [
{
"name": "extract-any",
"default-features": false
}
]
}

此场景中,extract-any 会在不包含默认功能的情况下安装,支持自定义配置。

示例 3:禁用默认功能(经典模式)

kmpkg install extract-any[core]

通过指定特殊的 core 功能,extract-any 会在不包含默认功能的情况下安装。

默认功能的交互逻辑

  1. 默认安装含默认功能的端口kmpkg install extract-any 会安装 extract-any 及其默认功能(如 extract-any[format-a]),因未指定任何特殊功能请求。

  2. 指定功能但不禁用默认功能kmpkg install extract-any[format-b] 会安装 extract-any 及其默认功能(format-a)和指定功能(format-b),即 extract-any[format-a,format-b]

  3. 显式禁用默认功能kmpkg install extract-any[core] 会安装不含任何默认功能的 extract-any[core] 会明确排除默认功能。

  4. 传递依赖与默认功能: 若 portB 依赖 extract-any[format-a] 且未显式禁用其默认功能,则 kmpkg install extract-any[format-b] portB 会安装 extract-any[format-a,format-b]portB

  5. 组合不同功能规格的端口kmpkg install extract-any[format-b] portB 会安装 extract-any[format-a, format-b]portB,除非显式排除,否则默认包含 extract-any 的默认功能。

  6. 彻底禁用默认功能kmpkg install extract-any[core] portB 确保 extract-any 仅安装显式请求的功能,排除所有默认功能。

管理默认功能的最佳实践

为高效管理项目中的默认功能,建议:

  • 显式声明需求:仅指定项目必需的功能,必要时使用 [core] 禁用默认功能。
  • 检查依赖关系:使用 kmpkg depend-info <port> 了解依赖解析逻辑,按需调整配置。
  • 利用覆盖与基线:借助版本控制和基线功能增强依赖解析的可控性。

如需了解更多信息,请参阅:

采用清晰的默认功能管理策略,可简化项目依赖管理,确保仅包含应用功能必需的组件。