西风吹老洞庭波,一晚上湘君白发多。
醉后不知天在水,满船清梦压星河。
身为程序员,尚未本身的包,总感受缺点什么,女友和包至少占同样吧.正如上战场没有扛枪的士兵,吃饭少了筷子同样,使人心情不愉悦.同时常常会有面试官会问一个犀利的问题,你有本身开源项目么?你写过公司本身的UI组件么?如同雷劈,总以为比别人矮一截,那么今天就以hekr-ui为例,介绍一下如何打造本身的UI库吧javascript
咱们的目标是构建一个以Vue
为基础基于element-ui
的UI框架
Vuepress
构建,简单便捷gitlab CI
,本文以 travis
为例vue-cli 3.0
、pug
和sass
等相关依赖和插件(自行探索)npm
库
这里推荐使用
Vue CLI
来进行快速构建
vue create hekr-ui
咱们选择默认配置就能够了css
git
能够很好对代码版本进行管理
echo "# hekr-ui" >> README.md git init git add README.md git commit -m "first commit" git remote add origin https://github.com/xkloveme/hekr-ui.git git push -u origin master
git remote add origin https://github.com/xkloveme/hekr-ui.git git push -u origin master
固然咱们选择第二种.记得把node_modules
忽略html
本文以yarn
为主,固然npm
也是👌OK的
咱们以vuepress
为主编写文档,固然这是非必须的,若是您只想发一个包,能够省略此步,必要的demo
和测试会有极大的方便vue
# 将 VuePress 做为一个本地依赖安装 yarn add -D vuepress # 或者:npm install -D vuepress # 新建一个 docs 文件夹 mkdir docs # 新建一个 markdown 文件 echo '# Hello VuePress!' > docs/README.md # 开始写做 npx vuepress dev docs
接着,在 package.json
里加一些脚本:java
{ "scripts": { "docs:dev": "vuepress dev docs", "docs:build": "vuepress build docs" } }
而后就能够开始写做了:node
yarn docs:dev # 或者:npm run docs:dev
要生成静态的 HTML 文件,运行:webpack
yarn docs:build # 或者:npm run docs:build
添加其余依赖,经常使用语法git
// 安装指定包 yarn add *** // 安装全部包,注意和npm的区别 yarn
注意⚠️这二者的区别dependencies
和devDependencies
程序员
--save
将依赖的名称、版本要求添加到 dependencies
--save-dev
将依赖的名称、版本要求添加到 devDependencies
vuepress
开发时,约定了一些目录结构. ├── docs │ ├── .vuepress (可选的) │ │ ├── components (可选的) │ │ ├── theme (可选的) │ │ │ └── Layout.vue │ │ ├── public (可选的) │ │ ├── styles (可选的) │ │ │ ├── index.styl │ │ │ └── palette.styl │ │ ├── templates (可选的, 谨慎配置) │ │ │ ├── dev.html │ │ │ └── ssr.html │ │ ├── config.js (可选的) │ │ └── enhanceApp.js (可选的) │ │ │ ├── README.md │ ├── guide │ │ └── README.md │ └── config.md │ └── package.json
template ├─ docs │ └─ .vuepress # 配置、演示组件、静态资源 │ │ ├─ compnents # 演示组件 │ │ | └─ demo # demo组件 │ │ ├─ public # 静态资源 │ │ | └─ images # 图片文件 │ │ | └─ scss # 样式文件 │ │ ├─ config.js # 配置文件 │ │ └─ enhanceApp # 引入文件 | ├─ compnent # 组件md文件 | └─ README # 首页md ├─ packages │ ├─ index.js # 组件index.js │ └─ hk-countup # countup组件 ├─ public └─ package.json
package.json
文件这个文件是项目的灵魂👻,是最重要的文件之一.具体字段参考 packagejson
main
main
字段指定了加载的入口文件,require('moduleName')
就会加载这个文件。这个字段的默认值是模块根目录下面的index.js
。
"main": "dist/hekr-ui.umd.min.js"
你能够经过下面的命令将一个单独的入口构建为一个库
vue-cli-service build --target lib --name myLib [entry]
运行结果为:github
File Size Gzipped dist/hk-ui.umd.min.js 13.64 KiB 5.31 KiB dist/hk-ui.umd.js 43.87 KiB 11.37 KiB dist/hk-ui.common.js 43.49 KiB 11.25 KiB dist/hk-ui.css 0.54 KiB 0.29 KiB
lib
命令"lib": "vue-cli-service build --target lib --name hk-ui --dest dist ./src/packages/index.js"
这个入口能够是一个 .js
或一个 .vue
文件。若是没有指定入口,则会使用 src/App.vue
。
构建一个库会输出:
dist/myLib.common.js
:一个给打包器用的 CommonJS 包 (不幸的是,webpack 目前还并无支持 ES modules 输出格式的包)dist/myLib.umd.js
:一个直接给浏览器或 AMD loader 使用的 UMD 包dist/myLib.umd.min.js
:压缩后的 UMD 构建版本dist/myLib.css
:提取出来的 CSS 文件 (能够经过在 vue.config.js
中设置 css: { extract: false }
强制内联)
项目启动以后须要咱们配置咱们的
vuepress
/* * @describe: 配置文件 config.js * @Author: superDragon * @Date: 2019-10-09 23:25:49 * @LastEditors: superDragon * @LastEditTime: 2019-10-10 18:49:25 */ let component = [ 'hk-button', 'hk-card' ] module.exports = { base: '/hekr-ui/', title: 'hekr-ui', description: 'hekr-ui', themeConfig: { nav: [ { text: '首页', link: '/' }, { text: '组件', link: '/component/hk-button' } ], sidebar: { '/component/': component }, lastUpdated: '最后更新', repo: '', repoLabel: 'GitLab' }, plugins: [], serviceWorker: true }
当咱们可以成功运行下面时
"docs:dev": "vuepress dev docs", "docs:build": "vuepress build docs",
yarn docs:dev # 或者:npm run docs:dev
yarn docs:build # 或者:npm run docs:build
以GitHub Pages
和Travis CI
为例
docs
目录中的dist
中,注意⚠️区分;{ "scripts": { "docs:build": "vuepress build docs" } }
docs/.vuepress/config.js
中设置正确的 base
这里咱们设置/hekr-ui/
🌿。若是你打算发布到 https://<USERNAME>.github.io/
,则能够省略这一步,由于 base
默认便是 "/"
。
若是你打算发布到 https://<USERNAME>.github.io/<REPO>/
(也就是说你的仓库在 https://github.com/<USERNAME>/<REPO>
),则将 base
设置为 "/<REPO>/"
。
.travis.yml
文件📃:language: node_js node_js: - '8' install: - npm install script: - npm run build after_success: - cd ./docs/.vuepress/dist - git init - git config --global user.name "${U_NAME}" - git config --global user.email "${U_EMAIL}" - git add . - git commit -m "👷Automatically update from travis-ci 👷" - git push --quiet --force "https://${GH_TOKEN}@${GH_REF}" master:${P_BRANCH} branches: only: - master notifications: email: - xkloveme@163.com on_failure: always # Note: you should set Environment Variables here or 'Settings' on travis-ci.org env: global: # 我将其添加到了travis-ci的环境变量中 - U_NAME: xkloveme - U_EMAIL: xkloveme@qq.com - P_BRANCH: gh-pages - GH_REF: github.com/xkloveme/vue-v-xxx.git
github
、travis
和配置travis
相关,启用构建,自行Google
传送门
以编写
hk-button
组件为例,并导出
<template lang="pug"> el-tooltip(effect="dark" v-if="tips" :content="tips" placement="top-start") el-button.hk-button(:size="size" :type="type" v-bind="$attrs" @click="handleClick") slot el-button.hk-button(:size="size" v-else :type="type" v-bind="$attrs" @click="handleClick") slot </template> <script> import { Debounce } from './../util/debounce' export default { name: 'hk-button', props: { type: { type: String, default: 'primary' }, size: { type: String, default: 'medium' }, tips: { type: String, default: null } }, methods: { handleClick: Debounce(function (e) { this.$emit('click', e) }, 200) } } </script> <style lang="scss"> .hk-button { i + span { padding-left: 10px; } } </style>
import HkButton from './hk-button' export default HkButton
install
/* * @describe: 主入口,导出install * @Author: superDragon * @Date: 2019-10-09 23:21:11 * @LastEditors: superDragon * @LastEditTime: 2019-10-10 19:09:57 */ import HkButton from './hk-button' import HKcard from './hk-card' const install = Vue => { Vue.component(HkButton.name, HkButton) Vue.component(HKcard.name, HKcard) } if (typeof window !== 'undefined' && window.Vue) { install(window.Vue) } export { HkButton, HKcard } export default { install }
npm
npm
源npm
npm adduser //回车后,弹出Username: Username: //输入你在官网注册时的用户名,回车 Password: //输入官网注册的密码,密码看不见,请确保你输的密码正确, 回车 Email:(this is Public) //输入官网注册时绑定的邮箱,回车
npm publish //此处上传命令,回车
这样一个hekr-ui
就发布完成了
24小时内撤销也是很简单的.
npm unpublish --force
Let's enjoy the taste of life, if we feel, the more we will live longer.
以为不错的话给个star