vue-cli3.0 vue組件發佈到npm
- 2020 年 9 月 27 日
- 筆記
一、創建項目
1、vue create xxx (使用的版本是3.1.0)
2、把src目錄名稱改為examples
3、新建文件夾packages 用來存放組件
4、比如:新建Button組件
index.vue是用來編寫組件的文件,index.js是對外引用,導出文件:
import Button from './index.vue'; /* istanbul ignore next */ Button.install = function(Vue) { Vue.component(Button.name, Button); }; export default Button;
5、在examples文件夾中新建index.js用來整合所有的組件,形成組件庫對外導出。
import Button from '../packages/Button/index.js' // 存儲組件列表 const components = [ Button ] // 定義 install 方法,接收 Vue 作為參數。如果使用 use 註冊插件,則所有的組件都將被註冊 const install = function (Vue) { // 判斷是否安裝 if (install.installed) return // 遍歷註冊全局組件 components.map(component => Vue.component(component.name, component)) } // 判斷是否是直接引入文件 if (typeof window !== 'undefined' && window.Vue) { install(window.Vue) } export default { // 導出的對象必須具有 install,才能被 Vue.use() 方法安裝 install, // 以下是具體的組件列表 Button }
二、修改配置文件
1、新建vue.config.js文件:
const path = require('path') function resolve(dir) { return path.join(__dirname, dir) } module.exports = { // 修改 src 為 examples pages: { index: { entry: "examples/main.js", //入口文件 template: "public/index.html", filename: "index.html" } }, // 組件樣式內聯 css: { extract: false }, // 擴展 webpack 配置,使 packages 加入編譯 chainWebpack: config => { config.resolve.alias .set('@', resolve('examples')) .set('~', resolve('packages')) config.module .rule('eslint') .exclude.add(path.resolve('lib')) .end() .exclude.add(path.resolve('examples/docs')) .end() config.module .rule('js') .include .add('/packages/') .end() .include.add(/examples/) .end() .use('babel') .loader('babel-loader') .tap(options => { // 修改它的選項... return options }) } };
2、修改package.json
"private": false,//開源 "main": "lib/vcolorpicker.umd.min.js",//入口文件
在script中添加npm run lib命令
“lib”: “vue-cli-service build –target lib –name vbutton –dest lib examples/index.js”
–target: 構建目標,默認為應用模式。這裡修改為 lib 啟用庫模式。
–dest : 輸出目錄,默認 dist。這裡我們改成 lib
[entry]: 最後一個參數為入口文件,默認為 src/App.vue。這裡我們指定編譯 examples/ index.js組件庫目錄。
執行編譯庫命令
$ npm run lib
3、根目錄新建.npmignore 文件,設置忽略發佈文件
我們發佈到 npm 中,只有編譯後的 lib 目錄、package.json、README.md才是需要被發佈的。所以我們需要設置忽略目錄和文件。
和 .gitignore 的語法一樣,具體需要提交什麼文件,看各自的實際情況。
#目錄
examples/
packages/
public/
#文件
vue.config.js
babel.config.js
*.map
三、登錄npm
$ npm login
成功後執行 npm publish
在上傳中可能報錯,一般為:
1、包名稱衝突,修改package.json 下的name,可在npm上驗證是否存在
2、使用淘寶鏡像源的要切換回npm 倉庫
成功後可在項目中安裝改ui庫,進行使用 npm install xxx -S進行使用
在main.js 進行全局引入
import ‘xx’ from ‘xx-xx’
Vue.use(xx)
——————————————————————————————— 簡陋的分割線 ————————————————————————————————–
到此就結束了