以前工做中组件都是封装在项目里,最近总想鼓捣一个组件发布到npm上并供大伙使用,因此参考了一些文章弄了一下,固然使用的是最新的vuecli3工具其中的vue-cli-service build --target lib 文末我会经过源码讲解下lib 定制化的输出umd模式的.min.js 不须要输出多余的文件css
vuecli3html
经过vuecli3建立一个初始化项目,具体能够查看官网。cli.vuejs.org/zh/guide/cr…vue
咱们须要一个文件夹存放组件,一个文件夹存放示例,按照如下方式对目录进行改造。node
src目录改名为examples,致使项目没法运行ios
注:vue.config.js 是一个可选的配置文件,若是项目的 (和 package.json 同级的) 根目录中存在这个文件,那么它会被 @vue/cli-service 自动加载。git
从新配置入口,修改配置中的 pages 选项github
新版 Vue CLI 支持使用 vue.config.js 中的 pages 选项构建一个多页面的应用。vue-cli
这里使用 pages 修改入口到 examples,设置css不单独提取。npm
module.exports = {
// 修改 src 目录 为 examples 目录
pages: {
index: {
entry: 'examples/main.js',
template: 'public/index.html',
filename: 'index.html'
}
},
css: { extract: false }
}
复制代码
以上咱们已配置好对新目录架构的支持,接下来咱们尝试编写组件。如下咱们以一个已发布到 npm 的小插件做为示例。具体代码能够看我项目源码,我大概说下思路:json
import Vue from 'vue'
import Loading from '../../loading/index'
Vue.use(Loading)
import Message from '../../message/index'
Vue.prototype.$message = Message;
import '../../loading/src/loading.css';
import '../../message/src/message.css';
复制代码
在examples文件夹里编写
<template>
<div id="app">
<uploadPictures @change = "getimg" :imgs = imgs :ossconfig = ossconfig :quality = 1 :dir = dir :size = 200 :num = 3 ></uploadPictures>
</div>
</template>
<script>
import Vue from 'vue'
// 导入组件
import uploadPictures from '../packages/index'
// 使用组件
Vue.use(uploadPictures)
export default {
name: 'app',
data(){
return{
imgs:[], // 图片数组
ossconfig:{
accessKeyId: '',
accessKeySecret: '',
bucket: '',
region: 'oss-cn-beijing'
},
dir:'/images/' //目录文件夹
}
},
methods:{
getimg(e){
this.imgs = e;
},
}
}
</script>
复制代码
到此为止咱们一个完整的组件已经开发完成了,接下来就是发布到 npm 以供后期使用。
在package.json 中新增一条编译为库的命令
tip:在库模式中,Vue是外置的,这意味着即便在代码中引入了 Vue,打包后的文件也是不包含Vue的。
Vue Cli3 构建目标:库
如下咱们在 scripts 中新增一条命令 npm run lib
--target: 构建目标,默认为app。这里修改成 lib 启用库模式。 --dest : 输出目录,默认 dist。这里咱们改为 lib
"scripts": {
"lib": "vue-cli-service build --target lib --name alioss-uploadpictures --dest lib ./packages/index.js"
}
复制代码
执行编译库命令
$ yarn lib
复制代码
module.exports = {
presets: [
['@vue/cli-plugin-babel/preset', {
"useBuiltIns": false
}]
]
}
复制代码
# 忽略目录
packages/
public/
# 忽略指定文件
vue.config.js
babel.config.js
复制代码
首先须要到 npm 官网上注册一个帐号,这个不是这篇文章重点,本身百度下就好。
$ npm login
复制代码
执行发布命令,发布组件到 npm
$ npm publish
复制代码
发布成功后稍等几分钟,便可在 npm 官网搜索到。如下是刚提交的 alioss-uploadpictures
yarn add alioss-uploadpictures
复制代码
import Vue from 'vue'
import uploadPictures from 'alioss-uploadpictures'
Vue.use(uploadPictures)
复制代码
Github 地址:github.com/HeJinG90/al…
npm 地址:www.npmjs.com/package/ali…