oak-framework-learning-notes/notes/1-Oak-Cli.md

9.7 KiB
Raw Permalink Blame History

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

make:locale

  • 调用异步方法make

    • 调用scripts/make-locale.js脚本

      • 调用oak-domain/lib/compiler/localeBuilder下的LocaleBuilder类构造函数传入false表示不不作为lib进行编译

        什么时候作为lib编译是什么意思

      • 得到builder对象执行build命令

        • 从进程参数中取得watchconst 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

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 平台,执行清理操作
        - 输出成功信息或错误信息