From 3a0fab660ee5483539da13d8f1cf1e90d46fc0af Mon Sep 17 00:00:00 2001 From: pqcqaq <905739777@qq.com> Date: Sat, 20 Apr 2024 23:25:56 +0800 Subject: [PATCH] oak-cli done --- notes/1-Oak-Cli.md | 212 ++++++++++++++++++++++++++++++++++++++------- 1 file changed, 182 insertions(+), 30 deletions(-) diff --git a/notes/1-Oak-Cli.md b/notes/1-Oak-Cli.md index 90aa89f..e511763 100644 --- a/notes/1-Oak-Cli.md +++ b/notes/1-Oak-Cli.md @@ -8,47 +8,199 @@ - 路径:src/index.ts -- -v +### -v - - 显示版本信息,来自package.json +- 显示版本信息,来自package.json -- make:domain +### 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 +- 调用异步方法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 -- make:locale +### make:locale - - 调用异步方法make +- 调用异步方法make - - 调用scripts/make-locale.js脚本 + - 调用scripts/make-locale.js脚本 - - 调用oak-domain/lib/compiler/localeBuilder下的LocaleBuilder类构造函数,传入false表示不不作为lib进行编译 + - 调用oak-domain/lib/compiler/localeBuilder下的LocaleBuilder类构造函数,传入false表示不不作为lib进行编译 - > 什么时候作为lib编译?是什么意思? + > 什么时候作为lib编译?是什么意思? - - 得到builder对象,执行build命令 + - 得到builder对象,执行build命令 + - 从进程参数中取得watch(const watch *=* process.argv[2];) + - 两次取反(表示有东西就为true,不管输入什么)后传入build命令,如果为false表示不对目录进行监视,若为true则对目录进行实时监控 - - 从进程参数中取得watch(const watch *=* process.argv[2];) - - 两次取反(表示有东西就为true,不管输入什么)后传入build命令,如果为false表示不对目录进行监视,若为true则对目录进行实时监控 +### make:dependency -- 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` + +### build + +- build命令接收8个参数,依次是 + + - + + 1. `--sourcemap`:指定是否生成源映射文件。如果提供了该选项,则生成源映射文件;否则不生成。 + + 2. `--analyze`:指定是否启用构建分析。如果提供了该选项,则启用构建分析;否则不启用。 + + 3. `--memoryLimit `:指定 Node.js 进程的内存限制。可以通过提供一个数值作为参数来设置内存限制,单位可能是 MB。 + + 4. `-t, --target `:指定构建的目标环境。可以是 `'mp'`(微信小程序)、`'wechatMp'`(微信小程序)、`'web'`(Web)、`'rn'`(React Native)或 `'native'`(原生应用)。 + + 5. `-m, --mode `:指定构建的模式。可以是 `'development'`(开发环境)、`'staging'`(预发布环境)或 `'production'`(生产环境)。 + + 6. `-d, --subDir `:指定子目录名称,用于构建过程中的一些操作。如果未提供,则根据目标环境设定默认的子目录名称。 + + 7. `-c, --check `:指定错误检查级别。可以是 `'error'`(错误级别,会导致构建失败)或其他值(警告级别,不会导致构建失败)。 + + 8. `-p, --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 命令 + +- ``:项目名称,是必选参数,用于指定要创建的新项目的名称。 + +- `-d, --dev`:开发模式标志,可选参数,如果提供了该选项,则表示在开发模式下创建项目。 + +- ```markdown + - create(dirName: string, cmd: any) + - 获取项目相关信息 + - 构造 package.json 内容 + - 构造 tsconfig.json 内容 + - 创建项目根目录及相关文件 + - 复制模板文件到项目目录 + - 如果需要,创建微信小程序和 Web 相关文件 + - 安装依赖(如果 npm 可用) + - 输出成功信息或错误信息 + ``` + + + +### update 命令 + +- ``:项目名称,是必选参数,用于指定要更新的项目的名称。 + +- `[subDirName]`:子目录名称,可选参数,用于指定要更新的项目的子目录名称。 + +- `-d, --dev`:开发模式标志,可选参数,如果提供了该选项,则表示在开发模式下更新项目。 + +- ````markdown + - update(dirName: string, subDirName: string, cmd: any) + - 根据子目录名称选择需要更新的文件夹 + - 检查项目名称是否存在 + - 如果是更新 `src` 目录,则直接复制对应模板文件 + - 如果是更新微信小程序相关目录,则复制模板文件,并在需要时创建新文件 + - 输出成功信息或错误信息 + ```` + + + +### run 命令 + +- `-p, --platform `:指定要运行的平台,是必选参数。可以是 `'ios'`(iOS)或 `'android'`(Android)。 + +- `-d, --subDir `:指定项目的子目录名称,可选参数,默认为 `'native'`。 + +- `-m, --mode `:指定运行模式,可选参数,默认为 `'development'`。可以是 `'development'`(开发模式)、`'staging'`(预发布模式)或 `'production'`(生产模式)。 + +- `-suffix, --appIdSuffix `:指定应用程序 ID 后缀,可选参数。 + +- ````markdown + - run(options: any): Promise + - 获取当前项目路径和目标目录路径 + - 根据平台执行不同的操作 + - 如果是 iOS 平台,执行 `react-native run-ios` + - 如果是 Android 平台,执行 `react-native run-android` + - 输出成功信息或错误信息 + ```` + + + +### clean 命令 + +- `-p, --platform `:指定要清理的平台,是必选参数。可以是 `'ios'`(iOS)或 `'android'`(Android)。 + +- `-d, --subDir `:指定项目的子目录名称,可选参数,默认为 `'native'`。 + +- ````markdown + - clean(options: any) + - 获取当前项目路径和目标目录路径 + - 根据平台执行不同的操作 + - 如果是 iOS 平台,执行清理操作 + - 如果是 Android 平台,执行清理操作 + - 输出成功信息或错误信息 + ```` - - 调用异步方法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` --