编译在remax-cli中开始,并且首先调用的是run方法,传入进来的参数是输入的命令去掉多余字符
new RemaxCLI().run(process.argv.slice(2, process.argv.length));
入口文件在 /remax/packages/remax-cli/src/index.ts
获取配置
-
使用
yargs-parser对象化命令行参数const argv: any = require('yargs-parser')(args);
-
指定全局变量
REMAX_PLATFORM编译平台- 从命令行
-t或者target读取 - 平台默认是
ali process.env.REMAX_PLATFORM = argv.t || argv.target || 'ali';
- 从命令行
-
读取
remax配置文件remax.configremax配置读取后使用schema-utils对配置进行类型判断,模板文件是/remax/packages/remax-cli/OptionsSchema.json- 读取
remax默认配置并合并项目remax配置,项目配置优先级高,默认配置在/remax/packages/remax-cli/src/defaultOptions/index.ts - 去除配置中路径字段末尾正反斜杠
-
合并压缩配置
- 首先读取
remax配置中compressTemplate - 为空再读取命令行中的
-m或者minimize
- 首先读取
加载API
- API文件解读
- API文件路径
/remax/packages/remax-cli/src/API.ts - 其中包括很多参数、钩子函数、注册插件、加载插件等方法
- 插件列表、插件名称、id等会缓存在
/remax/packages/remax-build-store/src/index.ts创建的Store中
- API文件路径
- 创建
this.api = new API();并向API中注册加载remax配置文件中的remax插件
构建参数解析
- 初始化构建参数
- 使用
yargs工具包提供参数解析并提供参数说明 - 编译项目使用
remax build -w -t ali - 编译插件使用
remax mini-plugin build -w -t ali - 查看帮助文档分别使用
remax build --helpremax mini-plugin build --help const cli = this.initCLI();
- 使用
API调用各个remax插件的extendCLI钩子函数,并将初始化好的构建参数传入进去,plugin.extendCLI({ cli }),在插件中可以修改cli中的参数- 如果命令行没有参数传入,会给出编译提示并停止运行
执行开始编译方法
cli.parse(args, callback)开始执行编译,根据不同的命令执行不同的编译- 编译项目使用internalBuildApp方法,编译插件使用buildMiniPlugin方法
- 这两个方法都在
/remax/packages/remax-cli/src/build/index.ts中 - 都传入
remax配置 和 构建参数
- 这两个方法都在
- 启动方法后会调用
remax-stats给阿里上报数据