配置
文件
配置值存储在 JSON 文件中。Ionic CLI 维护一个全局配置文件,通常位于 ~/.ionic/config.json,以及项目配置文件,通常位于项目根目录的 ionic.config.json。
CLI 提供了从项目配置文件和全局 CLI 配置文件设置和打印配置值的命令。参阅 ionic config --help 或查看文档了解 ionic config get 和 ionic config set 的用法。
项目配置文件
每个 Ionic 项目都有一个项目配置文件,通常位于项目的根目录。以下是一个带注释的 ionic.config.json 文件。
{
// 应用的人类可读名称。
"name": "My App",
// 应用的项目类型。CLI 使用此值来确定哪些
// 命令和命令选项可用,帮助文档输出什么内容,
// 以及 web 资源构建和开发服务器使用什么。
"type": "angular",
// 用于 Appflow 的应用 ID。
"id": "abc123",
// 用于 Cordova 和 Capacitor 等集成的配置对象。
"integrations": {
"cordova": {
...
}
},
// 钩子配置——详情请参见下面的钩子部分。
"hooks": {
...
}
}
环境变量
CLI 会查找以下环境变量:
IONIC_CONFIG_DIRECTORY:全局 CLI 配置的目录。默认为~/.ionic。IONIC_HTTP_PROXY:设置一个 URL 用于代理 所有 CLI 请求。参见使用代理。IONIC_TOKEN:自动与 Appflow 进行身份验证。
标志
CLI 标志是改变 CLI 命令行为的全局选项。
--help:不运行命令,而是查看其帮助页面。--verbose:显示所有日志消息以进行调试。--quiet:仅显示WARN和ERROR日志消息。--no-interactive:关闭交互式提示和花哨的输出。如果检测到 CI 或非 TTY 终端,CLI 将自动变为非交互模式。--confirm:开启确认提示的自动确认。注意:CLI 在执行可能有害的操作之前会进行提示。自动确认可能会产生意外结果。
钩子
CLI 可以在某些事件期间运行脚本,例如构建前后。要挂钩到 CLI,可以在 package.json 中使用以下 npm 脚本:
ionic:serve:before:在开发服务器启动前执行ionic:serve:after:在开发服务器终止后执行ionic:build:before:在 web 资源构建开始前执行ionic:build:after:在 web 资源构建完成后执行ionic:capacitor:run:before:在ionic capacitor run执行 capacitor open 之前执行ionic:capacitor:build:before:在ionic capacitor build执行 capacitor open 之前执行ionic:capacitor:sync:after:在ionic capacitor sync同步之后执行
当为任何钩子使用 shell 脚本时,钩子上下文以 IONIC_CLI_HOOK_CTX_ 前缀的环境变量定义。
以下示例显示了为 ionic:capacitor:build 钩子设置的环境变量。
IONIC_CLI_HOOK_CTX_NAME=capacitor:build:before
IONIC_CLI_HOOK_CTX_BUILD_CORDOVA_ASSETS=true
IONIC_CLI_HOOK_CTX_BUILD_ENGINE=browser
IONIC_CLI_HOOK_CTX_BUILD_PROJECT=app
IONIC_CLI_HOOK_CTX_BUILD_TYPE=angular
IONIC_CLI_HOOK_CTX_BUILD_VERBOSE=false
IONIC_CLI_HOOK_CTX_CAPACITOR_APP_ID=io.ionic.starter
IONIC_CLI_HOOK_CTX_CAPACITOR_APP_NAME=ionic-starter-app
IONIC_CLI_HOOK_CTX_CAPACITOR_VERBOSE=false
钩子也可以在 ionic.config.json 中定义。在项目中定义一个 hooks 对象,其中每个键是钩子的名称(不带 ionic: 前缀),值是指向 JavaScript 文件的路径或路径数组。
在以下示例中,该文件在 ionic:build:before 钩子期间被导入并运行。
"hooks": {
"build:before": "./scripts/build-before.js"
},
JavaScript 钩子文件应导出一个函数,该函数在钩子执行时接收一个参数(ctx)。
该参数是传递给钩子文件的上下文,根据不同的钩子和调用方式而有所不同。
./scripts/build-before.js:
module.exports = function (ctx) {
console.log(ctx);
};
多应用项目
在 CLI 6.2.0+ 中可用Ionic CLI 支持多应用配置设置,涉及在单个仓库(或称monorepo)中的多个 Ionic 应用和共享代码。
这些文档概述了 Ionic CLI 的多应用功能,但并未深入介绍每个框架的细节。
如果您使用 Angular,请参阅这篇文章获取示例。
设置步骤
-
创建一个目录并初始化 monorepo(完整细节请参见项目结构)。
-
将 monorepo 初始化为 Ionic 多应用项目。这将创建一个多应用
ionic.config.json文件。完整细节请参见配置文件。$ ionic init --multi-app -
使用
ionic start创建 Ionic 应用或使用ionic init初始化现有应用(完整细节请参见添加应用)。
项目结构
在多应用项目中,项目结构是灵活的。唯一的要求是在仓库的根目录有一个多应用 ionic.config.json 文件。
以下是一个示例设置,其中 apps/ 目录中的应用与 lib/ 目录中的共享代码分开。注意根目录 的 ionic.config.json 文件和 monorepo 的 package.json 文件。
apps/
├── myApp/
└── myOtherApp/
lib/
ionic.config.json
package.json
配置文件
在多应用项目中,应用共享仓库根目录下的单个 ionic.config.json 文件,而不是每个应用拥有自己的配置文件。多应用配置文件通过在 projects 对象中嵌套配置对象来包含每个应用的配置。可以使用 defaultProject 指定默认应用。
以下是一个示例文件,对应于上述文件结构。
{
"defaultProject": "myApp",
"projects": {
"myApp": {
"name": "My App",
"integrations": {},
"type": "angular",
"root": "apps/myApp"
},
"myOtherApp": {
"name": "My Other App",
"integrations": {},
"type": "angular",
"root": "apps/myOtherApp"
}
}
}
当检测到多应用项目时,Ionic CLI 将在根目录 ionic.config.json 中配置的应用上下文中运行。项目选择标准如下:
- 如果指定了全局 CLI 选项
--project,则通过projects对象中的键查找项目。例如,--project=myApp将选择myApp项目。 - 如果 CLI 检测到它在由
root键配置的项目路径内运行,它将选择匹配的项目。例如,在apps/myOtherApp/src目录中使用 CLI 将选择myOtherApp项目。 - 如果在
ionic.config.json中指定了defaultProject,则在上述条件不满足时将选择指定的项目。
添加应用
可以通过使用 ionic start 创建新应用或使用 ionic init 初始化现有应用来在多应用项目中注册应用。
使用 ionic start
如果在 ionic start 期间检测到多应用项目,CLI 会将应用配置添加到根目录的 ionic.config.json 文件中,而不是创建特定于项目的配置文件。
如果依赖项被提升到 monorepo 的根目录,可以使用 --no-deps 跳过依赖安装。
$ cd apps/
$ ionic start "My New App" --no-deps