mise-task-configuration

Compare original and translation side by side

🇺🇸

Original

English
🇨🇳

Translation

Chinese

Mise - Task Configuration

Mise - 任务配置

Defining and managing tasks in Mise for build automation, testing, and development workflows.
在Mise中定义和管理任务,用于构建自动化、测试和开发工作流。

Basic Task Definition

基本任务定义

Simple TOML Tasks

简单TOML任务

toml
undefined
toml
undefined

mise.toml

mise.toml

[tasks.build] description = "Build the project" run = "cargo build --release"
[tasks.test] description = "Run all tests" run = "cargo test"
[tasks.lint] description = "Run linter" run = "cargo clippy -- -D warnings"
undefined
[tasks.build] description = "Build the project" run = "cargo build --release"
[tasks.test] description = "Run all tests" run = "cargo test"
[tasks.lint] description = "Run linter" run = "cargo clippy -- -D warnings"
undefined

Running Tasks

运行任务

bash
undefined
bash
undefined

Run a task

Run a task

mise run build mise build # Shorthand if no command conflicts
mise run build mise build # Shorthand if no command conflicts

Run multiple tasks

Run multiple tasks

mise run build test lint
mise run build test lint

List available tasks

List available tasks

mise tasks ls
mise tasks ls

Show task details

Show task details

mise tasks info build
undefined
mise tasks info build
undefined

Task Dependencies

任务依赖关系

Sequential Dependencies

顺序依赖

toml
[tasks.deploy]
description = "Deploy the application"
depends = ["build", "test"]
run = "./deploy.sh"
toml
[tasks.deploy]
description = "Deploy the application"
depends = ["build", "test"]
run = "./deploy.sh"

Parallel Dependencies

并行依赖

toml
[tasks.ci]
description = "Run CI checks"
depends = ["lint", "test", "security-scan"]
run = "echo 'All checks passed'"
Mise automatically runs dependencies in parallel when possible.
toml
[tasks.ci]
description = "Run CI checks"
depends = ["lint", "test", "security-scan"]
run = "echo 'All checks passed'"
Mise会在可能的情况下自动并行运行依赖任务。

File Tasks

文件任务

Creating File Tasks

创建文件任务

bash
undefined
bash
undefined

Create task directory

Create task directory

mkdir -p .mise/tasks
mkdir -p .mise/tasks

Create executable task file

Create executable task file

cat > .mise/tasks/deploy <<'EOF' #!/usr/bin/env bash
cat > .mise/tasks/deploy <<'EOF' #!/usr/bin/env bash

mise description="Deploy the application"

mise description="Deploy the application"

mise depends=["build", "test"]

mise depends=["build", "test"]

echo "Deploying..." ./scripts/deploy.sh EOF
chmod +x .mise/tasks/deploy
undefined
echo "Deploying..." ./scripts/deploy.sh EOF
chmod +x .mise/tasks/deploy
undefined

File Task Metadata

文件任务元数据

bash
#!/usr/bin/env bash
bash
#!/usr/bin/env bash

mise description="Task description"

mise description="Task description"

mise depends=["dependency1", "dependency2"]

mise depends=["dependency1", "dependency2"]

mise sources=["src/**/*.rs"]

mise sources=["src/**/*.rs"]

mise outputs=["target/release/app"]

mise outputs=["target/release/app"]

Task implementation

Task implementation

undefined
undefined

Advanced Task Configuration

高级任务配置

Task Arguments

任务参数

toml
[tasks.test]
description = "Run tests with optional filter"
run = '''
if [ -n "$1" ]; then
  cargo test "$1"
else
  cargo test
fi
'''
bash
undefined
toml
[tasks.test]
description = "Run tests with optional filter"
run = '''
if [ -n "$1" ]; then
  cargo test "$1"
else
  cargo test
fi
'''
bash
undefined

Run all tests

Run all tests

mise test
mise test

Run specific test

Run specific test

mise test user_tests
undefined
mise test user_tests
undefined

Environment Variables in Tasks

任务中的环境变量

toml
[tasks.build]
description = "Build with specific configuration"
env = { RUST_ENV = "production", OPTIMIZATION = "3" }
run = "cargo build --release"

[tasks.dev]
description = "Start development server"
env = { NODE_ENV = "development", PORT = "3000" }
run = "npm run dev"
toml
[tasks.build]
description = "Build with specific configuration"
env = { RUST_ENV = "production", OPTIMIZATION = "3" }
run = "cargo build --release"

[tasks.dev]
description = "Start development server"
env = { NODE_ENV = "development", PORT = "3000" }
run = "npm run dev"

Task Aliases

任务别名

toml
[tasks.b]
alias = "build"

[tasks.t]
alias = "test"

[tasks.d]
alias = "dev"
bash
undefined
toml
[tasks.b]
alias = "build"

[tasks.t]
alias = "test"

[tasks.d]
alias = "dev"
bash
undefined

Use aliases

Use aliases

mise b # Runs build mise t # Runs test
undefined
mise b # Runs build mise t # Runs test
undefined

File Watching

文件监听

Watch Mode Tasks

监听模式任务

toml
[tasks.watch]
description = "Watch and rebuild on changes"
run = "cargo watch -x build"

[tasks."test:watch"]
description = "Watch and run tests"
run = "cargo watch -x test"
bash
undefined
toml
[tasks.watch]
description = "Watch and rebuild on changes"
run = "cargo watch -x build"

[tasks."test:watch"]
description = "Watch and run tests"
run = "cargo watch -x test"
bash
undefined

Built-in watch with mise

Built-in watch with mise

mise watch --task build
undefined
mise watch --task build
undefined

Monorepo Task Patterns

单体仓库任务模式

Workspace Tasks

工作区任务

toml
undefined
toml
undefined

Root mise.toml

Root mise.toml

[tasks.build-all] description = "Build all packages" depends = ["pkg-a:build", "pkg-b:build", "pkg-c:build"] run = "echo 'All packages built'"
[tasks."pkg-a:build"] description = "Build package A" run = "cd packages/pkg-a && cargo build"
[tasks."pkg-b:build"] description = "Build package B" run = "cd packages/pkg-b && cargo build"
undefined
[tasks.build-all] description = "Build all packages" depends = ["pkg-a:build", "pkg-b:build", "pkg-c:build"] run = "echo 'All packages built'"
[tasks."pkg-a:build"] description = "Build package A" run = "cd packages/pkg-a && cargo build"
[tasks."pkg-b:build"] description = "Build package B" run = "cd packages/pkg-b && cargo build"
undefined

Per-Package Tasks

每个包的任务

toml
undefined
toml
undefined

packages/pkg-a/mise.toml

packages/pkg-a/mise.toml

[tasks.build] description = "Build package A" run = "cargo build"
[tasks.test] description = "Test package A" depends = ["build"] run = "cargo test"
undefined
[tasks.build] description = "Build package A" run = "cargo build"
[tasks.test] description = "Test package A" depends = ["build"] run = "cargo test"
undefined

Task Validation

任务验证

Validate Task Configuration

验证任务配置

bash
undefined
bash
undefined

Validate all tasks

Validate all tasks

mise tasks validate
mise tasks validate

Check specific task

Check specific task

mise tasks info build
undefined
mise tasks info build
undefined

Common Validation Errors

常见验证错误

toml
undefined
toml
undefined

Error: Missing required fields

Error: Missing required fields

[tasks.broken] run = "echo test" # Missing description
[tasks.broken] run = "echo test" # Missing description

Error: Invalid dependency

Error: Invalid dependency

[tasks.deploy] description = "Deploy" depends = ["nonexistent-task"] run = "./deploy.sh"
[tasks.deploy] description = "Deploy" depends = ["nonexistent-task"] run = "./deploy.sh"

Error: Circular dependency

Error: Circular dependency

[tasks.a] description = "Task A" depends = ["b"] run = "echo a"
[tasks.b] description = "Task B" depends = ["a"] # Circular! run = "echo b"
undefined
[tasks.a] description = "Task A" depends = ["b"] run = "echo a"
[tasks.b] description = "Task B" depends = ["a"] # Circular! run = "echo b"
undefined

Best Practices

最佳实践

Organize Tasks by Purpose

按用途组织任务

toml
undefined
toml
undefined

Build tasks

Build tasks

[tasks.build] description = "Build production binary" run = "cargo build --release"
[tasks."build:debug"] description = "Build debug binary" run = "cargo build"
[tasks.build] description = "Build production binary" run = "cargo build --release"
[tasks."build:debug"] description = "Build debug binary" run = "cargo build"

Test tasks

Test tasks

[tasks.test] description = "Run all tests" run = "cargo test"
[tasks."test:unit"] description = "Run unit tests only" run = "cargo test --lib"
[tasks."test:integration"] description = "Run integration tests" run = "cargo test --test '*'"
[tasks.test] description = "Run all tests" run = "cargo test"
[tasks."test:unit"] description = "Run unit tests only" run = "cargo test --lib"
[tasks."test:integration"] description = "Run integration tests" run = "cargo test --test '*'"

Development tasks

Development tasks

[tasks.dev] description = "Start development server" run = "cargo run"
[tasks.watch] description = "Watch and rebuild" run = "cargo watch -x run"
undefined
[tasks.dev] description = "Start development server" run = "cargo run"
[tasks.watch] description = "Watch and rebuild" run = "cargo watch -x run"
undefined

Use Descriptive Names

使用描述性名称

toml
undefined
toml
undefined

Good: Clear, descriptive names

Good: Clear, descriptive names

[tasks."test:integration:api"] description = "Run API integration tests" run = "pytest tests/integration/api"
[tasks."test:integration:api"] description = "Run API integration tests" run = "pytest tests/integration/api"

Avoid: Vague names

Avoid: Vague names

[tasks.t1] description = "Some test" run = "pytest"
undefined
[tasks.t1] description = "Some test" run = "pytest"
undefined

Leverage Dependencies

利用依赖关系

toml
undefined
toml
undefined

Good: Explicit dependencies

Good: Explicit dependencies

[tasks.deploy] description = "Deploy to production" depends = ["lint", "test", "build"] run = "./scripts/deploy.sh"
[tasks.deploy] description = "Deploy to production" depends = ["lint", "test", "build"] run = "./scripts/deploy.sh"

Avoid: Manual sequencing in run command

Avoid: Manual sequencing in run command

[tasks.deploy] description = "Deploy to production" run = ''' cargo clippy cargo test cargo build --release ./scripts/deploy.sh '''
undefined
[tasks.deploy] description = "Deploy to production" run = ''' cargo clippy cargo test cargo build --release ./scripts/deploy.sh '''
undefined

Use Environment Variables

使用环境变量

toml
undefined
toml
undefined

Access mise environment variables

Access mise environment variables

[tasks.info] description = "Show task info" run = ''' echo "Task: $MISE_TASK_NAME" echo "Project root: $MISE_PROJECT_ROOT" echo "Config root: $MISE_CONFIG_ROOT" '''
undefined
[tasks.info] description = "Show task info" run = ''' echo "Task: $MISE_TASK_NAME" echo "Project root: $MISE_PROJECT_ROOT" echo "Config root: $MISE_CONFIG_ROOT" '''
undefined

Common Patterns

常见模式

Pre/Post Hooks

前置/后置钩子

toml
[tasks.build]
description = "Build with pre/post hooks"
depends = ["pre-build"]
run = "cargo build"

[tasks.pre-build]
description = "Run before build"
run = "echo 'Preparing build...'"

[tasks.post-build]
description = "Run after build"
run = "echo 'Build complete!'"

[tasks."build:full"]
description = "Build with all hooks"
depends = ["pre-build", "build", "post-build"]
run = "echo 'Full build pipeline complete'"
toml
[tasks.build]
description = "Build with pre/post hooks"
depends = ["pre-build"]
run = "cargo build"

[tasks.pre-build]
description = "Run before build"
run = "echo 'Preparing build...'"

[tasks.post-build]
description = "Run after build"
run = "echo 'Build complete!'"

[tasks."build:full"]
description = "Build with all hooks"
depends = ["pre-build", "build", "post-build"]
run = "echo 'Full build pipeline complete'"

Conditional Execution

条件执行

toml
[tasks.deploy]
description = "Deploy only if tests pass"
run = '''
if mise test; then
  ./scripts/deploy.sh
else
  echo "Tests failed, deployment cancelled"
  exit 1
fi
'''
toml
[tasks.deploy]
description = "Deploy only if tests pass"
run = '''
if mise test; then
  ./scripts/deploy.sh
else
  echo "Tests failed, deployment cancelled"
  exit 1
fi
'''

Multi-Stage Builds

多阶段构建

toml
[tasks.build]
description = "Multi-stage build"
depends = ["compile", "optimize", "package"]
run = "echo 'Build complete'"

[tasks.compile]
description = "Compile source"
run = "cargo build --release"

[tasks.optimize]
description = "Optimize binary"
depends = ["compile"]
run = "strip target/release/app"

[tasks.package]
description = "Create package"
depends = ["optimize"]
run = "tar -czf app.tar.gz target/release/app"
toml
[tasks.build]
description = "Multi-stage build"
depends = ["compile", "optimize", "package"]
run = "echo 'Build complete'"

[tasks.compile]
description = "Compile source"
run = "cargo build --release"

[tasks.optimize]
description = "Optimize binary"
depends = ["compile"]
run = "strip target/release/app"

[tasks.package]
description = "Create package"
depends = ["optimize"]
run = "tar -czf app.tar.gz target/release/app"

Anti-Patterns

反模式

Don't Hardcode Paths

不要硬编码路径

toml
undefined
toml
undefined

Bad: Hardcoded absolute paths

Bad: Hardcoded absolute paths

[tasks.build] description = "Build" run = "cd /Users/me/project && cargo build"
[tasks.build] description = "Build" run = "cd /Users/me/project && cargo build"

Good: Use relative paths and environment variables

Good: Use relative paths and environment variables

[tasks.build] description = "Build" run = "cd $MISE_PROJECT_ROOT && cargo build"
undefined
[tasks.build] description = "Build" run = "cd $MISE_PROJECT_ROOT && cargo build"
undefined

Don't Duplicate Logic

不要重复逻辑

toml
undefined
toml
undefined

Bad: Duplicated test logic

Bad: Duplicated test logic

[tasks."test:unit"] run = "cargo test --lib"
[tasks."test:integration"] run = "cargo test --test '*'"
[tasks."test:all"] run = "cargo test --lib && cargo test --test '*'"
[tasks."test:unit"] run = "cargo test --lib"
[tasks."test:integration"] run = "cargo test --test '*'"
[tasks."test:all"] run = "cargo test --lib && cargo test --test '*'"

Good: Use dependencies

Good: Use dependencies

[tasks."test:all"] depends = ["test:unit", "test:integration"] run = "echo 'All tests complete'"
undefined
[tasks."test:all"] depends = ["test:unit", "test:integration"] run = "echo 'All tests complete'"
undefined

Don't Ignore Exit Codes

不要忽略退出码

toml
undefined
toml
undefined

Bad: Swallowing errors

Bad: Swallowing errors

[tasks.ci] run = ''' cargo clippy || true cargo test || true echo "CI complete" '''
[tasks.ci] run = ''' cargo clippy || true cargo test || true echo "CI complete" '''

Good: Fail fast

Good: Fail fast

[tasks.ci] depends = ["lint", "test"] run = "echo 'CI checks passed'"
undefined
[tasks.ci] depends = ["lint", "test"] run = "echo 'CI checks passed'"
undefined

Related Skills

相关技能

  • tool-management: Managing tool versions with Mise
  • environment-management: Environment variables and configuration
  • 工具管理: 使用Mise管理工具版本
  • 环境管理: 环境变量与配置