9.7 KiB
Oak-cli
注意
这只是一个命令行工具,其核心还是依赖于其他包,如oak-domain
命令行参数
- 路径:src/index.ts
-v
- 显示版本信息,来自package.json
make:domain
- 调用异步方法make
- 调用script目录下的make-app-domain.js脚本
- analyzeEntities
- 这里调用这个方法,是为了处理oak-domain下面的entity
- 分析entity信息,来自oak-domain/lib/compiler/schemalBuilder
- 分析项目依赖analyzeDepedency
- 这里通过分析依赖,获取到了全部的
通过这个框架搭建的依赖项目(generinal businiess)的模块目录,并返回一个包名数组,为了下面再次解析entity - 来自oak-domain/lib/compiler/dependencyBuilder
- 这里通过分析依赖,获取到了全部的
- 再次analyzeEntities,这次是分析
当前开发项目的entity信息 - 调用removeSync方法删除项目目录中建立的oak-app-domain目录
- buildSchema
- 调用这个方法重建oak-app-domain目录
- 这个方法来自oak-domain/lib/compiler/schemalBuilder
- analyzeEntities
- 调用script目录下的make-app-domain.js脚本
make:locale
-
调用异步方法make
-
调用scripts/make-locale.js脚本
-
调用oak-domain/lib/compiler/localeBuilder下的LocaleBuilder类构造函数,传入false表示不不作为lib进行编译
什么时候作为lib编译?是什么意思?
-
得到builder对象,执行build命令
- 从进程参数中取得watch(const watch = process.argv[2];)
- 两次取反(表示有东西就为true,不管输入什么)后传入build命令,如果为false表示不对目录进行监视,若为true则对目录进行实时监控
-
-
make:dependency
- 调用异步方法make
- 调用scripts/make-dependency.js脚本
- 调用oak-domain/lib/compiler/dependencyBuilder的默认方法,传入
watch *=* process.argv[2] 本函数用于构建src/initialize.dev, src/initialize.prod, src/initializeFeatures, src/context/FrontendContext, src/contextBackendContext
- 调用oak-domain/lib/compiler/dependencyBuilder的默认方法,传入
- 调用scripts/make-dependency.js脚本
build
-
build命令接收8个参数,依次是
1. `--sourcemap`:指定是否生成源映射文件。如果提供了该选项,则生成源映射文件;否则不生成。
2. `--analyze`:指定是否启用构建分析。如果提供了该选项,则启用构建分析;否则不启用。
3. `--memoryLimit <memoryLimit>`:指定 Node.js 进程的内存限制。可以通过提供一个数值作为参数来设置内存限制,单位可能是 MB。
4. `-t, --target <target>`:指定构建的目标环境。可以是 `'mp'`(微信小程序)、`'wechatMp'`(微信小程序)、`'web'`(Web)、`'rn'`(React Native)或 `'native'`(原生应用)。
5. `-m, --mode <mode>`:指定构建的模式。可以是 `'development'`(开发环境)、`'staging'`(预发布环境)或 `'production'`(生产环境)。
6. `-d, --subDir <subDirName>`:指定子目录名称,用于构建过程中的一些操作。如果未提供,则根据目标环境设定默认的子目录名称。
7. `-c, --check <level>`:指定错误检查级别。可以是 `'error'`(错误级别,会导致构建失败)或其他值(警告级别,不会导致构建失败)。
8. `-p, --platform <platform>`:指定原生应用的平台。可以是 `'ios'`(iOS)或 `'android'`(Android)。
这些参数提供了对构建过程的不同方面进行配置的选项,使得可以根据需要进行灵活的构建设置。
- build方法的执行流程如下:
- 根据给定的命令行参数,`build` 方法会按照以下方式进行处理:
1. **mode 和 target 参数处理**:
- 如果提供了 `mode` 参数,则使用提供的值作为构建模式,否则默认为 `'development'`。
- 如果提供了 `target` 参数,则使用提供的值作为构建目标。
- 如果未提供 `target` 参数,则输出错误信息并结束执行。
2. **subDir 参数处理**:
- 如果提供了 `subDir` 参数,则使用提供的值作为子目录名称。
- 如果未提供 subDir 参数,则根据目标类型设定默认的子目录名称:
- 对于 `'mp'` 或 `'wechatMp'` 目标,默认子目录为 `'wechatMp'`。
- 对于 `'native'` 或 `'rn'` 目标,默认子目录为 `'native'`。
- 对于 `'web'` 目标,默认子目录为 `'web'`。
3. **构建选项处理**:
- 根据 check 参数确定错误级别:
- 如果 `check` 参数为 `'error'`,则设置错误级别为 `true`,表示错误将导致构建失败。
- 如果 `check` 参数为其他值(或未提供),则设置错误级别为 `false`,表示错误只会发出警告,但不会导致构建失败。
- 如果提供了 `sourcemap` 参数,则将 `GENERATE_SOURCEMAP` 设置为 `true`,否则为 `false`。
- 如果提供了 `analyze` 参数,则将 `COMPILE_ANALYZE` 设置为 `true`,否则为 `false`。
- 如果提供了 `memoryLimit` 参数,则将 `MEMORY_LIMIT` 设置为提供的值。
4. **根据不同的目标类型执行不同的操作**:
- 对于微信小程序(`'mp'` 或 `'wechatMp'`):根据提供的模式执行不同的脚本文件。
- 对于 Web 环境(`'web'`):根据提供的模式执行不同的脚本文件,并传递端口号参数。
- 对于原生应用(`'native'` 或 `'rn'`):根据提供的模式执行不同的操作,包括拷贝文件和执行相应的命令。
5. **执行结果处理**:
- 根据执行结果输出相应的成功或失败信息。
- ```markdown
- build(cmd: any)
- 参数解构
- mode = cmd.mode || 'development'
- target = cmd.target
- 如果未指定目标,输出错误信息并返回
- 子目录处理
- 如果未指定子目录,根据目标设置默认子目录
- 调用 makeLocale('', mode === 'development')
- 调用 makeRouter({ subdir }, mode === 'development')
- 调用 makeDep('')
- 构建选项处理
- 确定错误级别
- 输出成功信息
- 根据目标类型执行不同操作
- 对于微信小程序
- 执行不同的脚本文件
- 对于 Web 环境
- 执行不同的脚本文件,并传递端口号参数
- 对于原生应用
- 执行不同的操作,包括拷贝文件和执行命令
- 执行结果处理
- 输出成功或失败信息
```
create 命令
-
<name>:项目名称,是必选参数,用于指定要创建的新项目的名称。 -
-d, --dev:开发模式标志,可选参数,如果提供了该选项,则表示在开发模式下创建项目。 -
- create(dirName: string, cmd: any) - 获取项目相关信息 - 构造 package.json 内容 - 构造 tsconfig.json 内容 - 创建项目根目录及相关文件 - 复制模板文件到项目目录 - 如果需要,创建微信小程序和 Web 相关文件 - 安装依赖(如果 npm 可用) - 输出成功信息或错误信息
update 命令
-
<name>:项目名称,是必选参数,用于指定要更新的项目的名称。 -
[subDirName]:子目录名称,可选参数,用于指定要更新的项目的子目录名称。 -
-d, --dev:开发模式标志,可选参数,如果提供了该选项,则表示在开发模式下更新项目。 -
- update(dirName: string, subDirName: string, cmd: any) - 根据子目录名称选择需要更新的文件夹 - 检查项目名称是否存在 - 如果是更新 `src` 目录,则直接复制对应模板文件 - 如果是更新微信小程序相关目录,则复制模板文件,并在需要时创建新文件 - 输出成功信息或错误信息
run 命令
-
-p, --platform <platform>:指定要运行的平台,是必选参数。可以是'ios'(iOS)或'android'(Android)。 -
-d, --subDir <subDirName>:指定项目的子目录名称,可选参数,默认为'native'。 -
-m, --mode <mode>:指定运行模式,可选参数,默认为'development'。可以是'development'(开发模式)、'staging'(预发布模式)或'production'(生产模式)。 -
-suffix, --appIdSuffix <appIdSuffix>:指定应用程序 ID 后缀,可选参数。 -
- run(options: any): Promise<void> - 获取当前项目路径和目标目录路径 - 根据平台执行不同的操作 - 如果是 iOS 平台,执行 `react-native run-ios` - 如果是 Android 平台,执行 `react-native run-android` - 输出成功信息或错误信息
clean 命令
-
-p, --platform <platform>:指定要清理的平台,是必选参数。可以是'ios'(iOS)或'android'(Android)。 -
-d, --subDir <subDirName>:指定项目的子目录名称,可选参数,默认为'native'。 -
- clean(options: any) - 获取当前项目路径和目标目录路径 - 根据平台执行不同的操作 - 如果是 iOS 平台,执行清理操作 - 如果是 Android 平台,执行清理操作 - 输出成功信息或错误信息