浅谈Vue CLI 3结合Lerna进行UI框架设计

当前大部分UI框架设计的Webpack配置都相对复杂,例如 Element Ant Design Vue 和等Vue组件库。例如Element,为了实现业务层面的两种引入形式( 完整引入按需引入 ),以及抛出一些可供业务层面通用的 utils 、 i18n 等,Webpack配置变得非常复杂。为了简化UI框架的设计难度,这里介绍一种简单的UI框架设计,在此之前先简单介绍一下 Element 的构建流程,以便对比新的UI框架设计。

一般组件库的设计者将引入形式设计成 完整引入按需引入 两种形式: 完整引入 的开发相对便利,针对一些大型业务或者对于打包体积不是特别注重的业务, 按需引入 开发的颗粒度相对精细,可以减少业务的打包体积。

设计的UI框架实践项目的github地址是ziyi2/vue-cli3-lerna-ui,包括了preset.json、自己设计的Vue CLI插件以及自己设计的一系列UI组件(和生成的UI框架示例稍有不同),如果觉得整体结构有不合理的或者考虑不够全面的地方,欢迎大家提issue,这样我也可以对它进行完善。如果大家感兴趣,希望大家能够Star一下,这里拜谢大家了!

Element

首先了解 Element 的构建流程,查看 Element 2.7.0 版本 package.json 的npm 脚本

// 其中的`node build/bin/build-entry.js` 生成Webpack构建入口 "build:file": "node build/bin/iconInit.js & node build/bin/build-entry.js & node build/bin/i18n.js & node build/bin/version.js", // 构建css样式 "build:theme": "node build/bin/gen-cssfile && gulp build --gulpfile packages/theme-chalk/gulpfile.js && cp-cli packages/theme-chalk/lib lib/theme-chalk", // 构建commonjs规范的`utils` "build:utils": "cross-env BABEL_ENV=utils babel src --out-dir lib --ignore src/index.js", // 构建umd模块的语言包 "build:umd": "node build/bin/build-locale.js", // 清除构建文件夹`lib` "clean": "rimraf lib && rimraf packages/*/lib && rimraf test/**/coverage", // 总体构建 "dist": "npm run clean && npm run build:file && npm run lint && webpack --config build/webpack.conf.js && webpack --config build/webpack.common.js && webpack --config build/webpack.component.js && npm run build:utils && npm run build:umd && npm run build:theme", // 执行eslint校验 "lint": "eslint src/**/* test/**/* packages/**/* build/**/* --quiet"

这里重点关注Element的构建脚本,忽略 测试、发布、启动开发态调试页面、构建演示页面 等脚本。

npm run dist

与 Element 构建相关的npm脚本繁多,但是 总体构建脚本 是 dist :

"dist": "npm run clean && npm run build:file && npm run lint && webpack --config build/webpack.conf.js && webpack --config build/webpack.common.js && webpack --config build/webpack.component.js && npm run build:utils && npm run build:umd && npm run build:theme"

&& 是继发执行,只有当前任务成功,才能执行下一个任务。

总体构建脚本包含了以下按顺序执行的脚本命令

npm run clean - 清除构建文件夹lib

npm run build:file - 其中的node build/bin/build-entry.js 生成Webpack构建入口

npm run lint - 执行eslint校验

webpack --config build/webpack.conf.js - 构建umd总文件

webpack --config build/webpack.common.js - 构建commonjs2总文件

webpack --config build/webpack.component.js - 构建commonjs2组件(提供按需引入)

npm run build:utils - 构建commonjs的utils(供commonjs2总文件、commonjs2组件以及业务使用)

npm run build:umd - 构建umd语言包

npm run build:theme - 构建css样式

如果对于对于 umd 、 commonjs2 、 amd 等模块定义不是特别清晰,可参考Webpack文档。

执行 npm run dist 后会在当前根目录生成新的 lib 文件夹,包含以下构建内容:

lib ├── directives # commonjs指令(这里归为utils) ├── locale # commonjs国际化(commonjs语言包和API) ├── mixins # commonjs mixins(这里归为utils) ├── theme-chalk # css 样式文件 ├── transitions # commonjs transitions(这里归为utils) ├── umd # umd语言包 ├── utils ├── alert.js # commonjs组件 ├── aside.js ├── ... ├── element-ui.common.js # commonjs2总文件 ├── ... ├── index.js # umd总文件 ├── ...

从的使用指南结合 lib 可以看出, Element 为我们提供了以下能力:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/20834060bdafcb72f64a83b5369b54c1.html