持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第17天,点击查看活动详情
上篇文章讲解了脚手架命令的注册阶段
之前的架构设计会有一些痛点
我们现在对脚手架架构设计进行优化
高性能脚手架架构设计
当前脚手架设计痛点
- cli安装速度慢:所有package都集成在 cli里面,因此当命令较多时,会减慢 cli 的 安装速度
- 灵活性差:init 命令只能使用 @rd-cli-dev/init包,对于集团公司而言,每个bu的init命令可能都各不相同,可能需要实现 init 命令动态化,如:
团队A使用 @rd-cli-dev/init作为初始化模块
团队B使用自己开发的@rd-cli-dev/my-init作为初始化模块
脚手架架构优化
1.将 init 命令 做成动态加载的形式,和当前脚手架解偶,这样脚手架下载速度会非常快
2.动态加载的脚手架通过缓存的形式进程存储,执行哪个命令,就下载哪个命令,不会一次性下载所有命令
3.动态加载init命令的时候,通过node多进程来进行执行。执行init命令的时候,再开一个进程来执行,复用cpu资源
脚手架命令动态加载功能架构设计
使用环境变量存储本地文件
// 指定targetPath
program.on('option:targetPath',function(){
process.env.CLI_TARGET_PATH = program._optionValues.targetPath;
})
// 使用
// 可以在任何文件通过环境变量拿到targetPath
创建动态执行库@rd-cli-dev/exec
'use strict';
module.exports = exec;
function exec() {
console.log('patha',process.env.CLI_TARGET_PATH)
}
接下来,我们先做获取本地代码入口文件的功能,如下:
获取本地代码入口文件
1.targetPath => modulePath
2.modulePath => Package(npm 模块)
3.Package.getRootFile(获取入口文件)
4.Package.update / Package.install
下篇文章来具体讲解每一个功能点。