# 参数传递技巧

URL: https://caijiao.org/bun/script/args
Source: docs/bun/script/args.md
Description: 本章节介绍了 Bun 中参数传递的技巧，包括如何通过命令行向脚本传递参数，以及如何在脚本中处理和使用这些参数。

在 [Bun](/bun/) 中，通过命令行向脚本传递参数是非常常见的操作。无论是自定义脚本还是运行任务时传递参数，理解如何高效处理这些参数对于提高开发效率至关重要。

## 1. 传递命令行参数

在运行 `bun run` 命令时，你可以向脚本传递参数。比如，如果你有一个自定义脚本 `task.js`，可以通过如下方式传递参数：

```bash
bun run task.js --env production --debug true
````

在脚本中，你可以使用 `process.argv` 来访问这些参数。`process.argv` 是一个数组，包含了传递给 Node.js 的所有参数。需要注意的是，第一个和第二个元素分别是 Node.js 路径和脚本路径，实际参数从第三个元素开始。

## 2. 解析参数

你可以使用一个简单的函数来解析命令行参数，使得脚本更加易读。例如，以下函数解析 `--key value` 类型的参数：

```javascript
const args = process.argv.slice(2);
const parsedArgs = {};
args.forEach((arg, index) => {
  if (arg.startsWith('--')) {
    const key = arg.substring(2);
    parsedArgs[key] = args[index + 1];
  }
});
console.log(parsedArgs);
```

如果你运行：

```bash
bun run task.js --env production --debug true
```

输出将是：

```bash
{ env: 'production', debug: 'true' }
```

## 3. 使用参数控制执行逻辑

你可以在脚本中根据传递的参数来控制任务的执行流程。例如，根据不同的环境变量来执行不同的操作：

```javascript
if (process.argv.includes('--env') && process.argv.includes('production')) {
  console.log("Running in production mode");
} else {
  console.log("Running in development mode");
}
```

根据不同的环境参数，可以自动选择执行不同的构建或部署任务。

## 4. 使用第三方库解析参数

对于更复杂的参数解析，尤其是处理布尔值、数组或带默认值的参数时，建议使用第三方库。例如，可以使用 `yargs` 或 `commander` 来更方便地解析命令行参数：

```javascript
import yargs from 'yargs';

const argv = yargs
  .option('env', {
    alias: 'e',
    type: 'string',
    description: 'Set the environment',
    default: 'development',
  })
  .argv;

console.log(`Running in ${argv.env} mode`);
```

这种方法可以使脚本更具可维护性，并支持更复杂的参数配置。

## 5. 总结

通过命令行传递和解析参数，开发者能够在执行脚本时动态调整任务的行为。无论是简单的环境变量传递，还是复杂的逻辑控制，理解和掌握参数传递技巧能显著提升脚本的灵活性与可扩展性。
