博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Vue Cli 3 搭建一个可按需引入组件的组件库架子
阅读量:6591 次
发布时间:2019-06-24

本文共 3876 字,大约阅读时间需要 12 分钟。

Ant-design、Element 这些框架都有按需引入组件的功能。需要使用哪个组件,就引入哪个组件,这样那些没必要的组件就不会打包到我们的项目里了。跟着我下边的步骤,相信大家也能搭建出一个按需引入的组件库。

创建一个 Vue 项目

vue create ui-demo复制代码

使用默认配置安装就 OK ?

安装 babel-plugin-component

npm i babel-plugin-component -D复制代码

babel-plugin-component 就是 Element UI 用来实现组件按需加载的一个 babel 插件。我们把它用到我们的组件库上,就不需要重新造一个轮子出来了。?

配置 .babelrc

在项目的根目录下创建一个 .babelrc 的文件,配置可以参照下面的代码进行更改。

{  "plugins": [    [      "component",      {        // 组件库的名字,需要和 package.json 里的 name 相同        "libraryName": "ui-demo",        // 存放组件的文件夹,如果不想配置此项,默认文件夹的名字为 lib        "libDir": "components",      }    ]  ]}复制代码

创建一个存放组件的文件夹

既然我们刚刚已经配置了存放组件的文件夹,下一步肯定就是创建这么一个文件夹了。由于我配置了的文件夹名为 components,所以我们的文件夹名字就是 components

上面的操作完成后,我们的项目目录就基本搭建好了,如下:

写组件

终于到了写组件的时候了,在 components 文件夹下新建一个 Component1 的文件夹来存放我们的第一个组件。

Component1 文件夹里有一个 Component1.vue 的文件和一个 index.js 文件。目录如下:

Component1 -> Component1.vue 代码:

复制代码

Component1 -> index.js代码:

import Component1 from './Component1.vue';Component1.install = function (Vue) {  Vue.component(Component1.name, Component1);}export default Component1;复制代码

index.js 中的主要功能就是以插件的形式注册一个全局组件,不懂的小伙伴可以照猫画虎,微调一下就好了。想了解的可以去这个链接看一下:

第二个组件代码就不发出来了,复制一份,给个 css 样式就好了。

components 文件夹根目录下创建一个 index.js 用来整合所有组件。

components -> index.js 代码:

import Compontent1 from './Component1/index'import Compontent2 from './Component2/index'const components = [  Compontent1,  Compontent2,]function install (Vue) {  components.map(component => {    Vue.component(component.name, component)  })}export default {  install,  Compontent1,  Compontent2,}复制代码

稍微提醒,需要把 install 也一起导出,观察不细心的可能会不注意就写漏了。?

修改或添加 package.json 中的配置

script 中添加一条命令:

"lib": "vue-cli-service build --target lib --name index --dest package components/index.js"复制代码

最后面的 components/index.js 是我们存放组件文件夹根目录的 index.js 文件,记得根据你的情况修改。这个命令执行后,会打包生成一个 package 的文件夹。

添加 files 白名单,打包上传哪些文件到 npm 上:

"files": [    "components",    "package"]复制代码

components 是我们存放组件的文件夹,packagelib 命令打包后生成的文件夹,我们只要把这两个文件夹发布就 OK 了。

添加 style,设置样式路径:

"style": "package/index.css"复制代码

路径就是我们打包出来的 package 中的 index.css 文件。

添加 main,设置入口:

"main": "components/index.js"复制代码

路径是存放组件的 components 文件夹下的 index.js 文件。

private 设置为 false

"private": false复制代码

设置此项目不是私有项目之后,才能发布好 npm 上。

下面的是完整的 package.json 文件配置:

{  "name": "ui-demo",  "version": "0.1.0",  "private": false,  "main": "components/index.js",  "style": "package/index.css",  "files": [    "components",    "package"  ],  "scripts": {    "serve": "vue-cli-service serve",    "build": "vue-cli-service build",    "lint": "vue-cli-service lint",    "lib": "vue-cli-service build --target lib --name index --dest package components/index.js"  },  "dependencies": {    "core-js": "^2.6.5",    "vue": "^2.6.10"  },  "devDependencies": {    "@vue/cli-plugin-babel": "^3.7.0",    "@vue/cli-plugin-eslint": "^3.7.0",    "@vue/cli-service": "^3.7.0",    "babel-eslint": "^10.0.1",    "babel-plugin-component": "^1.1.1",    "eslint": "^5.16.0",    "eslint-plugin-vue": "^5.0.0",    "vue-template-compiler": "^2.5.21"  },  "eslintConfig": {    "root": true,    "env": {      "node": true    },    "extends": [      "plugin:vue/essential",      "eslint:recommended"    ],    "rules": {},    "parserOptions": {      "parser": "babel-eslint"    }  },  "postcss": {    "plugins": {      "autoprefixer": {}    }  },  "browserslist": [    "> 1%",    "last 2 versions"  ]}复制代码

打包我们的代码

在控制台执行 npm run lib 进行文件打包,打包完成后会多一个 package 文件夹。文件目录就变成如下的了:

发布 npm

# 这是登录,前提是你已经在 npm 注册了账号npm login# 发布到 npmnpm publish复制代码

由于名字已经被占用,演示就用我最近在写的那个项目进行演示了。

安装库

npm i vue95-ui复制代码

main.js 文件中引入这个库。

import Vue from 'vue'import App from './App.vue'// 全局注册// import vue95 from 'vue95-ui'// Vue.use(vue95);// 按需引入import { Button95, Bar95 } from 'vue95-ui'Vue.use(Button95);Vue.use(Bar95);Vue.config.productionTip = falsenew Vue({  render: h => h(App),}).$mount('#app')复制代码

这样我们就可以使用我们自己的 UI 库了。

可以对照着我这个的项目地址进行参考:

本人公众号

转载地址:http://cruio.baihongyu.com/

你可能感兴趣的文章
CSS3+JS实现静态圆形进度条【清晰、易懂】
查看>>
关于树形插件展示中数据结构转换的算法
查看>>
图片加载框架之Fresco
查看>>
Spotify开源其Cassandra编排工具cstar
查看>>
高性能web建站规则(将js放在页面底部)
查看>>
Java EnumMap工作原理及实现
查看>>
阐述Spring框架中Bean的生命周期?
查看>>
虚拟内存管理
查看>>
注水、占坑、瞎掰:起底机器学习学术圈的那些“伪科学”
查看>>
大数据小视角1:从行存储到RCFile
查看>>
JavaScript常用设计模式
查看>>
第18天:京东网页头部制作
查看>>
好消息:Dubbo & Spring Boot要来了
查看>>
面向对象封装的web服务器
查看>>
南开大学提出新物体分割评价指标,相比经典指标错误率降低 69.23%
查看>>
初创公司MindMaze研发情绪反应VR,让VR关怀你的喜怒哀乐
查看>>
绕开“陷阱“,阿里专家带你深入理解C++对象模型的特殊之处
查看>>
ElasticSearch
查看>>
9-51单片机ESP8266学习-AT指令(测试TCP服务器--51单片机程序配置8266,C#TCP客户端发信息给单片机控制小灯的亮灭)...
查看>>
香港设计师带来仿生机器人,其身体 70% 构造均由3D打印完成
查看>>