如何用 mise deps 在输入变化时自动运行 npm、pip 等依赖安装器?

发布时间:2026/9/11 22:27:30
如何用 mise deps 在输入变化时自动运行 npm、pip 等依赖安装器? 如何用 mise deps 在输入变化时自动运行 npm、pip 等依赖安装器【免费下载链接】misedev tools, env vars, task runner项目地址: https://gitcode.com/GitHub_Trending/mi/misemise deps是 mise 提供的依赖管理功能目前标记为experimental它对项目中的关键输入文件如package.json、package-lock.json、requirements.txt做哈希比较当这些输入相对上一次成功运行发生变化、或输出目录丢失时自动调用你配置的包管理器npm install、pip install -r requirements.txt等。配合auto true在mise run、mise xexec执行前还会自动做一次检查避免手动敲安装命令。本文的目标在一个已有 npm 锁文件的项目中配置mise deps验证“输入不变则跳过、输入变化则重装”的行为并扩展出 pip 安装器的启用方式。准备条件项目已经存在对应的输入文件。npm 安装器要求项目中有package.json和package-lock.json功能处于实验阶段配置里必须开启experimental true包管理器本身通过[tools]安装例如 node。[tools]负责装包管理器[deps]负责装项目依赖两者分开。如果项目还没有锁文件先用自己的包管理器生成一个再配置 provider否则 provider 缺少必需输入不会生效。配置 npm 安装器在项目的mise.toml中加入来自 deps 文档的 Quick Start[settings] experimental true [tools] node 24 [deps.npm] auto true要点auto true表示该 provider 在mise run和mise x之前自动检查并安装不写auto空表[deps.npm]只会启用 provider 但不自动运行。空表[deps.uv]这种写法可以选择内置 provider 而不设为自动要禁用某个例如从上层配置继承来的provider用[deps]下的disable [npm]。禁用只是阻止运行不会卸载已安装的包。npm 内置 provider 的默认值输入为package.json、package-lock.json跟踪输出为node_modules/默认命令为npm install。yarn、pnpm、bun、deno、go、pip、poetry、uv、bundler、composer、dart、flutter、git-submodule 等同样有内置 provider各自的输入、输出和默认命令见 deps 文档的 Built-in Providers 表格。执行并验证按顺序执行mise install mise deps install --list mise deps install npm mise deps install npm --explainmise install安装[tools]中的 nodemise deps install --list列出当前生效的 provider用来确认配置是否被正确解析mise deps install npm只安装指定 provider--explain解释本次判定的结果provider 为什么被认为是新鲜fresh或过期stale。这是排查“为什么没跑/为什么跑了”的主要手段。判定逻辑文档 Freshness Checking 一节对全部 source 文件计算 blake3 哈希对生效的 provider 命令计算 blake3 哈希包含 run 命令、shell、providerenv、工作目录原始命令和环境值不写入状态与上一次成功运行保存的哈希比较source 或生效命令被新增、删除、修改时标记为过期stale。哈希状态保存在$MISE_STATE_DIR/deps/hash.toml按项目根目录索引不会写入项目目录内。由此可以确认行为首次运行必然是 stale没有上次成功的记录之后只要输入文件或命令没变provider 保持 fresh安装命令不会再执行。必需输出如node_modules/必须存在被删除后会触发重装。自动触发与跳过配置auto true后mise exec和mise run在每次执行前都会走同一套 sources/outputs 检查确保被跟踪的变化在处理完之后才执行后续命令。注意两点文档明确给出的边界自动检查不会把包升级到最新上游版本只处理被跟踪输入的变化单次调用想跳过自动安装mise run --no-deps build mise x --no-deps -- npm test文档中的示例还给出了一种用法项目还没有锁文件时先用mise exec --no-deps -- npm install生成锁文件避免在生成过程中被 deps 检查干扰。启用mise activate后如果某个auto true的 provider 已过期mise 会输出文档示例中的警告原文格式mise WARN deps: npm may need update, run mise deps不想看到该警告时在配置中加入[settings] status.show_deps_stale false为 pip 项目启用安装器同样用空表加auto的方式启用[deps.pip] auto true内置 pip provider 的默认值输入为requirements.txt不需要锁文件跟踪输出为可选的.venv/默认命令为pip install -r requirements.txt。“可选输出”的含义只有当 mise 在某次成功运行之后观察到过.venv/它被删除才会触发重装——这对默认安装到项目外的包管理器很重要。文档同时明确pip provider 不会创建或选择 virtualenv。如果你希望 pip 装进.venv需要先按 Python 虚拟环境自动激活 一节配置_.python.venv例如[env]下_.python.venv { path .venv, create true }。可选分支锁定安装与多安装器并行如果要求 npm 走干净、基于锁文件的安装而不是普通npm install覆盖run即可新鲜度检查仍然决定是否执行它[deps.npm] run npm ci多个 provider如 npm 和 pip 同时启用会并行执行并受jobs设置限制并发[settings] jobs 4 # Run up to 4 providers in parallel需要顺序时用depends声明 provider 之间的依赖无依赖的 provider 之间并行依赖失败的 provider 会连带跳过其下游循环依赖会被检测并跳过。已知限制provider 必须显式配置且具备必需的输入文件除gogo.mod、piprequirements.txt、Dart/Flutterpubspec.yaml、git-submodule非空.gitmodules外大多数 provider 需要锁文件。新鲜度检查不会检查每个已安装的包、不查询上游新版本也检测不到未被跟踪的外部缓存目录的删除。如果依赖文件在项目外被改动用mise deps install --force强制执行修复mise deps install provider --explain可查看判定细节--dry-run显示将会执行什么但不执行--skip npm跳过指定 provider。mise deps默认只运行当前配置根的 provider。monorepo 场景需要monorepo_root true加显式[monorepo].config_roots见 Config Roots并配合mise deps --monorepomise 不会去任意子目录搜索 provider。单个嵌套项目更简单的做法是给 provider 设dir apps/api。对内置 provider配置sources或outputs是替换默认值而不是追加outputs []会显式关闭该 provider 的输出跟踪包括可选输出。小结配置完成后验证路径是mise deps install --list确认 provider 生效 →mise deps install npm首次运行首次必为 stale→ 改动package-lock.json后再跑mise deps install npm --explain能看到过期判定并重新执行安装命令不改输入则命令保持 fresh 不执行。auto true之后mise run/mise x会自动完成同样的检查--no-deps用于单次跳过。功能仍是 experimental配置中的experimental true必须保留。更多细节自定义 provider、模板变量、依赖声明见 docs/dev-tools/deps.md。【免费下载链接】misedev tools, env vars, task runner项目地址: https://gitcode.com/GitHub_Trending/mi/mise创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考