简介

简介

Ace 是 AdonisJS 用于创建和运行控制台命令的命令行框架。Ace 的入口文件位于项目的根目录中,你可以按如下方式执行它。

node ace

由于 node 二进制文件无法直接运行 TypeScript 源代码,我们不得不将 ace 文件保留为纯 JavaScript 并使用 .js 扩展名。

在底层,ace.js 文件注册了 TS Node 作为 ESM 模块加载钩子 来执行 TypeScript 代码,并导入 bin/console.ts 文件。

帮助与列表命令

你可以通过不带任何参数运行 ace 入口文件或使用 list 命令来查看可用命令的列表。

node ace
# 等同于上面
node ace list

你可以通过输入命令名称并带上 --help 标志来查看单个命令的帮助信息。

node ace make:controller --help

帮助屏幕的输出是按照 docopt 标准格式化的。

启用/禁用颜色

Ace 会检测其运行的 CLI 环境,如果终端不支持颜色,则禁用彩色输出。不过,你可以使用 --ansi 标志手动启用或禁用颜色。

# 禁用颜色
node ace list --no-ansi
# 强制启用颜色
node ace list --ansi

创建命令别名

命令别名为常用命令定义别名提供了便利层。例如,如果你经常创建单数的资源型控制器,可以在 adonisrc.ts 文件中为它创建一个别名。

{
commandsAliases: {
resource: 'make:controller --resource --singular'
}
}

定义别名后,你可以使用别名来运行命令。

node ace resource admin

别名展开是如何工作的?

  • 每次你运行命令时,Ace 都会检查 commandsAliases 对象中的别名。

  • 如果别名存在,将使用第一段(空格之前的部分)来查找命令。

  • 如果命令存在,别名值的其余部分会被追加到命令名称之后。

    例如,如果你运行以下命令

    node ace resource admin --help

    它会被展开为

    make:controller --resource --singular admin --help

以编程方式运行命令

你可以使用 ace 服务以编程方式执行命令。在应用启动之后,ace 服务才可用。

ace.exec 方法接受命令名称作为第一个参数,命令行参数数组作为第二个参数。例如:

import ace from '@adonisjs/core/services/ace'
const command = await ace.exec('make:controller', [
'user',
'--resource',
])
console.log(command.exitCode)
console.log(command.result)
console.log(command.error)

在执行命令之前,你可以使用 ace.hasCommand 方法检查命令是否存在。

import ace from '@adonisjs/core/services/ace'
/**
* boot 方法会加载命令(如果尚未加载)
*/
await ace.boot()
if (ace.hasCommand('make:controller')) {
await ace.exec('make:controller', [
'user',
'--resource',
])
}