1. 新建vue 项目
并且在根目录创建两个文件夹 packages
和examples
。
packages
:用于存放所有的组件
examples
:用于进行测试组件,把src
改为examples
2.配置vue.config.js 并设置入口文件
如果没有vue.config.js
文件 就需要在项目根目录下创建vue.config.js
文件,并进行如下配置。
- 设置
entry
属性将入口文件设置为examples
下的main.js
文件 - 通过
chainWebpack
对于项目进行配置,使用babel
处理将高版本语法转成低版本语法,在我们封装组件库时,这部分配置可以直接复制使用。
const { defineConfig } = require('@vue/cli-service') // module.exports = defineConfig({ // transpileDependencies: true // }) const path = require('path') module.exports = defineConfig({ transpileDependencies: true, pages:{ index:{ // 修改项目入口文件 entry:'examples/main.js', template:'public/index.html', filename:'index.html' } }, // 扩展webpack配置,使webpages加入编译 chainWebpack: config => { config.module .rule('js') .include.add(path.resolve(__dirname,'packages')).end() .use('babel') .loader('babel-loader') .tap(options => { return options }) } })
复制
3.在packages 目录下新建 index.js,默认导出一个install方法
- 我们将所有的组件和字体图标引入到
index.js
文件中 - 声明
conpoments
数组,将组件全部放到这个数组中 - 定义
install
方法,在Vue
中注册所有的组件 - 判断是否直接引入了文件,如果引入了,则不需要调用
Vue.use()
方法(这一步可以让那些通过script
导入的,无需Vue.use()
) - 最后导出
install
对象
// 整个包的入口 // 统一导出 // 导出颜色选择器组件 import Button from './button' import Dialog from './dialog' import Input from './input' import Checkbox from './checkbox' import Radio from './radio' import RadioGroup from './radio-group' import Switch from './switch' import CheckboxGroup from './checkbox-group' import Form from './form' import FormItem from './form-item' import './fonts/iconfont.css' const components = [ Button, Dialog, Input, Checkbox, Radio, RadioGroup, Switch, CheckboxGroup, Form, FormItem ] // 定义install方法 const install = function (Vue) { // 遍历注册所有的组件 components.forEach(component => { Vue.component(component.name, component) }) } // 判断是否直接引入文件,如果是,就不用调用Vue.use() if (typeof window !== 'undefined' && window.Vue) { install(window.Vue) } // 导出install方法 export default { install }
复制
4.打包组件库
vue-cli
给开发者提供了很多构建目标的命令,我们可以将我们的vue项目构建成应用、库或者Web Components
组件。
构建成库在vue-cli
官方文档中找到如下命令:
vue-cli-service build --target lib
复制
在package.json
文件中的script
下加入该条指令,并且指定打包路径为 packages/index.js
。
"lib":"vue-cli-service build --target lib packages/index.js"
复制
打包 命令如下:
npm run lib
复制
打包成功后,得到如下文件,其中有不同规范下的js文件
5.上传到github
在github
新建一个仓库
第一步、使用git status
命令查看git
状态
git status
复制
第二步、使用git add
命令提交路径下文件
git add .
复制
第三步、 使用git commit -m '上传组件'
命令填写 上传描述
git commit -m '封装组件并上传到github'
复制
第四步、使用 关联远程仓库并上传代码到远程仓库中
git remote add origin https://github.com/RanGuMo/moran-ui.git git branch -M main git push -u origin main
复制
github
项目地址:https://github.com/RanGuMo/moran-ui
6.将组件库上传到npm
第一步、设置package.json
中的配置项
如果想把包发布到npm
上,package.json
中的private
必须为fasle
,并且name
必须为npm
上没有的包,否则不能上传,同时我们可以指定入口文件 "main": "dist/moran-ui.umd.min.js"
也可以添加个人信息
第二步、在项目的根目录下增加一个.npmignore
文件
这个文件的作用是将一些不需要上传到npm
的路径、文件进行忽略,我们在上传到npm
时就不会把这部分上传了。只上传dist
路径下的打包文件,不需要上传源码。
# 忽略目录 examples/ packages/ public/ # 忽略指定文件 vue.config.js babel.config.js *.map
复制
第三步、上传到npm
-
如果安装了
nrm
,需要保证当前的源时是npm
。
-
使用
npm login
登录,注意,需要注册npm
账号 -
使用
npm publish
命令直接发布到npm
上 -
进入
npm
官网直接搜索package.json
中指定的name
属性值,我这里是moran-ui
,所以就搜索moran-ui
-
进入
npm
官网直接搜索name
属性指定的包名就可以找到了
-
注意,如果需要再次上传到
npm
,需要修改package.json
中的版本号version