- 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功能就是在云上。