当前位置 主页 > 网站技术 > 代码类 >

    手把手15分钟搭一个企业级脚手架(4)

    栏目:代码类 时间:2019-09-16 13:20


    dcli install gen-tpl

    核心处理流程如下:

    先判断是否硬盘缓存目录 ~/.maoda 下是否已经有安装过 gen-tpl 包

    如果没有,则接下来进行安装 (相当于在 ~/.maoda 目录下执行 npm install) 如果有,且版本低,则提示升级 如果有,且版本最新,则不作为

    安装过程即 execSync('npm i gen-tpl@latest -S', { cwd: '~/.maoda' })

    我们可以为「模板插件包」的名称做一个约定,即具备固定的前缀,诸如 gen-xxx

    5.4 init命令: 选一个「模板插件包」来初始化一个新工程

    这是一个脚手架高频而核心的功能

    dcli init

    此时会分发去执行 script/init.js 文件,我们看看其逻辑

    查询硬盘缓存目录 ~/.maoda 下的 package.json 文件,读取其中 dependacies 字段,拿到已安装的「模板插件包」

    如果一个都没安装,则提示用户要先 install

    让用户选择一套模板

    利用 inquery 库发起对话,罗列出已装模板,让用户选择,比如上图的 gen-pc gen-h5 gen-tpl

    触发模板初始化流程

    比如用户选择了 gen-tpl 这个模板,则用 yeoman-environment 这个库去执行缓存目录里的这个包 ~/.maoda/gen-tpl/index.js 注:这里相当于跨目录的两个 js 文件引用执行,用到了之前说的 import-from 这个库

    「模板插件包」被执行,则启动了常规的模板拷贝过程 (后面展开细说)

    这里直接用包名称做选项,为了演示更直观,实际通常用包的 description 做选项,更友好一些,比如 gen-pc 包可能描述为 生成PC模板

    5.5 build命令:在工程里执行构建

    dcli build

    确定工程目录

    工程目录即执行目录,通过 process.cwd() 获取

    读取该工程所用的构建插件

    读取工程中约定的配置文件,本demo中为 maoda.js (采用约定式的配置,类似 webpack.config.js .babelrc .prettierrc) 读取 maoda.js 中 builder 配置项 (即指定的构建插件包),比如本 demo 中指定为 build-tpl 如果有的话,读取自定义 webpack 配置 (约定为 webpackCustom 字段,后续会被合并/覆盖到默认 webpack 配置上)

    使用制定的构建插件包来进行 webpack 打包

    判断工程中是否已经安装 build-tpl 未安装,则在工程中路径中执行 npm install (或 yarn add,此处有个小技巧,可根据用户工程中 lock 文件的类型,判断用户使用的 npm 还是 yarn) 已安装,则直接执行 build-tpl

    通常,我们用配置文件指明「构建插件包」,也可以直接在命令里指明,比如 dcli build --builder=build-h5;后者往往适用于一套代码打包出多种结果,如京东的 Taro cli

    平时大家用惯了 npm run build yarn build,只需在我们的模板中的 package.json 添加一行:

    {  "script": {++   "build": "dcli build"  }}

    5.6 dev命令:启动 devServer 进行调试

    类似 build 只不过 webpack 配置不同,此处略

    6 模板插件包

    核心功能:提供模板文件夹 + 文件夹的拷贝。这里同样提供了一个样例工程 gen-tpl (仅 50 行代码)

    处理流程如下:

    询问用户,并获取反馈的答案

    比如工程名是什么,描述一下你的工程,是否使用 TypeScript,是否使用 Sass/Less/Stylus 等

    根据用户的答案,拷贝对应的模板,细分两种拷贝