- umijs
- vue-cli
- 淘宝DEF
Vue-Cli的设计
设计思路
有哪些命令
- vue create 创建项目 全局的CLI
- vue ui 管理项目UI 全局的CLI
- vue-cli-service serve 项目下的CLI
- vue-cli-service build
- vue-cli-service lint
分哪几大部分设计
- 仪表盘
- 插件
- 依赖
- 配置
- 任务
一些问题
- 插件的设计,为何,以及如何,可以完成哪些能力扩展?
- 插件的升级,何时升级如何提醒升级?
- 插件的版本管理,直接用npm最新的吗?
- 适用性?VS 团队自己的CLI工具
- preset的管理?如何注册和管理?如何使用?如何升级的?
Preset
插件集合 & 项目初始化模板
But,Preset如何更新呢?基础架构组决定更新preset,没法更新
// preset.json// generator.js// prompts.js{"useConfigFiles": true,"cssPreprocessor": "sass","plugins": {"@vue/cli-plugin-babel": {"version": "^3.0.0", // 可显示指定版本},"@vue/cli-plugin-eslint": {"config": "airbnb","lintOn": ["save", "commit"]},"@vue/cli-plugin-router": {},"@vue/cli-plugin-vuex": {}},"configs":{}}
插件
一个插件的文件结构
.├── README.md├── generator.js # generator (可选)├── prompts.js # prompt 文件 (可选)├── index.js # service 插件└── package.json
service插件
module.exports = (api, projectOptions) => {api.chainWebpack(webpackConfig => {// 通过 webpack-chain 修改 webpack 配置})api.configureWebpack(webpackConfig => {// 修改 webpack 配置// 或返回通过 webpack-merge 合并的配置对象})api.registerCommand('test', args => {// 注册 `vue-cli-service test`})}
背后结构
安装的包
本地安装的全局包 @vue/cli
项目下的 package.json
"devDependencies": {"@vue/cli-plugin-babel": "~4.2.0","@vue/cli-plugin-eslint": "~4.2.0","@vue/cli-service": "~4.2.0","babel-eslint": "^10.0.3","eslint": "^6.7.2","eslint-plugin-vue": "^6.1.2","vue-template-compiler": "^2.6.11"},
create-react-app
Def-Cli的设计
Umijs的设计


一个好的CLI工具
CLI是什么?CLI解决了什么问题?具备什么特性?
封装集成。主要是集成整个开发生命周期功能(init|add|dev|test|publish)。集成各种开发工具提高质量,性能等。将所有的功能都封装在 cli 这个盒子里,通过命令调用。
云端同步。主要是解决了客户端和云的问题,所有都能更好的和项目解耦,和云端同步。
- 集成脚手架,generator,同步云端的项目模板。
- 集成Dev构建功能,即我们使用的webpack。
- 集成CI/CD流程,项目最终是要部署到服务端。
- 更多围绕开发工具功能集成,通过命令行,或者UI界面集成。
- test功能,项目健康检查,包检查,类库升级。
- 需要具备什么特性?
- 升级能力,自动检测升级。
- 与项目解耦
如果是云端IDE?这些就都不用解决了,因为云端IDE功能就是在云上。
