前端性能优化二十六:花裤衩模板element-ui打包优化
2023-12-25 06:13:08
1. 全局引入:
①. 安装:
npm i element-ui -S
②. main.js引入:
import ElementUI from 'element-ui';
import 'element-ui/lib/theme-chalk/index.css';
Vue.use(ElementUI);
③. 弊端:
a. 打包的文件过大.
2. 按需引入:
①. 安装组件:
yarn add babel-plugin-component -D
②. 修改babel.config.js:
{
"plugins": [
[
"component",
{
"libraryName": "element-ui",
"styleLibraryName": "theme-chalk"
}
]
]
}
③. main.js引入(下面有项目实战):
import { Button, Select } from 'element-ui';
import App from './App.vue';
// 方式一
Vue.component(Button.name, Button);
Vue.component(Select.name, Select);
// 方式二
Vue.use(Button)
Vue.use(Select)
(2). 项目中完整组件列表和引入方式 - src/core/lazy_use.js:
import Vue from 'vue'
import {
Pagination,
Dialog,
// Autocomplete,
// Dropdown,
// DropdownMenu,
// DropdownItem,
// Menu,
// Submenu,
// MenuItem,
// MenuItemGroup,
Input,
// InputNumber,
// Radio,
// RadioGroup,
// RadioButton,
// Checkbox,
// CheckboxButton,
// CheckboxGroup,
Switch,
Select,
Option,
// OptionGroup,
Button,
// ButtonGroup,
Table,
TableColumn,
DatePicker,
// TimeSelect,
// TimePicker,
// Popover,
// Tooltip,
// Breadcrumb,
// BreadcrumbItem,
Form,
FormItem,
// Tabs,
// TabPane,
// Tag,
// Tree,
Alert,
// Slider,
// Icon,
Row,
Col,
// Upload,
// Progress,
// Spinner,
// Badge,
Card,
// Rate,
Steps,
Step,
// Carousel,
// CarouselItem,
// Collapse,
// CollapseItem,
// Cascader,
// ColorPicker,
// Transfer,
// Container,
// Header,
// Aside,
// Main,
// Footer,
// Timeline,
// TimelineItem,
// Link,
// Divider,
// Image,
// Calendar,
// Backtop,
// PageHeader,
// CascaderPanel,
// Loading,
MessageBox,
Message,
// Notification,
Drawer
} from 'element-ui'
const maps = {
Pagination,
Dialog,
// Autocomplete,
// Dropdown,
// DropdownMenu,
// DropdownItem,
// Menu,
// Submenu,
// MenuItem,
// MenuItemGroup,
Input,
// InputNumber,
// Radio,
// RadioGroup,
// RadioButton,
// Checkbox,
// CheckboxButton,
// CheckboxGroup,
Switch,
Select,
Option,
// OptionGroup,
Button,
// ButtonGroup,
Table,
TableColumn,
DatePicker,
// TimeSelect,
// TimePicker,
// Popover,
// Tooltip,
// Breadcrumb,
// BreadcrumbItem,
Form,
FormItem,
// Tabs,
// TabPane,
// Tag,
// Tree,
Alert,
// Slider,
// Icon,
Row,
Col,
// Upload,
// Progress,
// Spinner,
// Badge,
Card,
// Rate,
Steps,
Step,
// Carousel,
// CarouselItem,
// Collapse,
// CollapseItem,
// Cascader,
// ColorPicker,
// Transfer,
// Container,
// Header,
// Aside,
// Main,
// Footer,
// Timeline,
// TimelineItem,
// Link,
// Divider,
// Image,
// Calendar,
// Backtop,
// PageHeader,
// CascaderPanel,
Drawer
}
// 只有一部分组件是use引入
Object.keys(maps).forEach(item => {
Vue.use(maps[item])
})
// Vue.use(Loading.directive)
// Vue.prototype.$loading = Loading.service
Vue.prototype.$msgbox = MessageBox
Vue.prototype.$alert = MessageBox.alert
// Vue.prototype.$confirm = MessageBox.confirm
// Vue.prototype.$prompt = MessageBox.prompt
// Vue.prototype.$notify = Notification
Vue.prototype.$message = Message
(3). 项目中main.js引入:
import './core/lazy_use'
// 之前的全部注释掉
// import ElementUI from 'element-ui'
// import 'element-ui/lib/theme-chalk/index.css'
// import locale from 'element-ui/lib/locale/lang/zh-CN' // lang i18n
// set ElementUI lang to EN
// Vue.use(ElementUI, { locale })
// 如果想要中文版 element-ui,按如下方式声明
// Vue.use(ElementUI)
(4). 打包出来chunck可以放到cdn上.
3. 在index.html中指定版本cdn加载:
<!-- 引入样式 -->
<link rel="stylesheet" href="https://unpkg.com/element-ui@3.x.x/lib/theme-chalk/index.css">
<!-- 引入组件库 -->
<script src="https://unpkg.com/element-ui@3.x.x/lib/index.js"></script>
文章来源:https://blog.csdn.net/wanmeijuhao/article/details/135183350
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!