以前工做中組件都是封裝在項目裏,最近總想鼓搗一個組件發佈到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…