前言:當(dāng)我寫(xiě)這篇博客之前我想過(guò)這些問(wèn)題,是否你也被困擾過(guò)呢?
創(chuàng)新互聯(lián)公司主營(yíng)博愛(ài)網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營(yíng)網(wǎng)站建設(shè)方案,app軟件開(kāi)發(fā),博愛(ài)h5微信小程序開(kāi)發(fā)搭建,博愛(ài)網(wǎng)站營(yíng)銷(xiāo)推廣歡迎博愛(ài)等地區(qū)企業(yè)咨詢
1:當(dāng)你有自己覺(jué)得寫(xiě)的好的組件,是不是有一種想存下來(lái),方便下一次使用的情況?
2:是不是大多數(shù)時(shí)候都是使用cv大法?from "a" to "b" to “c” to anyWhere.....
3:是不是你的的組件跟你npm install下來(lái)的有很大區(qū)別?
4:是不是想定義一套規(guī)則來(lái)管理公司項(xiàng)目的組件?(當(dāng)然前提你得是,,,,大佬)
一:創(chuàng)建默認(rèn)項(xiàng)目
使用 vue create xxx
創(chuàng)建一個(gè)默認(rèn)項(xiàng)目
二:修改原始目錄結(jié)構(gòu)
創(chuàng)建的默認(rèn)目錄如下,我們需要將原本的src目錄改為examples,然后創(chuàng)建packages目錄來(lái)編寫(xiě)自己的組件庫(kù)文件,(其實(shí)目錄命名你開(kāi)心就好,,)
好了,接下來(lái)劃重點(diǎn)!
三:配置example & packages
到這里你可能發(fā)現(xiàn)了,項(xiàng)目無(wú)法跑起來(lái)了,因?yàn)槲覀儧](méi)有了原始默認(rèn)的入口文件
在根目錄下創(chuàng)建vue.config.js配置文件(vue-cli3的配置文件,在這里的配置會(huì)覆蓋腳手架webpack默認(rèn)的配置項(xiàng))。
//不熟悉配置的可官網(wǎng)查看 https://cli.vuejs.org/zh/config/#pages module.exports = { pages: { index: { entry: 'examples/main.js', template: 'public/index.html', filename: 'index.html' } } }
進(jìn)入packages目錄創(chuàng)建一個(gè)組件目錄(HelloWorld),一個(gè)index文件(用來(lái)暴露所有的組件),然后在組件目錄新建index(暴露出當(dāng)前組件)文件與src組件源碼。
在HelloWorld下面的index中引入組件。
import HelloWord from './src/HelloWorld.vue'; HelloWord.install = (Vue)=>{ Vue.components(HelloWord.name,HelloWord) } export default HelloWord;
在packages目錄下面的index中引入所有的組件并注冊(cè)。
import HelloWorld from './HelloWorld'; // 將引入的組件模塊存儲(chǔ),方便循環(huán)注冊(cè)所有組件 const components = [ HelloWorld ]; const install = (Vue,options)=>{ if (install.installed) return; install.installed = true console.log(options) components.forEach(component => { Vue.component(component.name, component) }) } // 如果是直接引入的 if (typeof window !== 'undefined' && window.Vue) { install(window.Vue) } export default { // 使用Vue.use必須具有install方法 // https://cn.vuejs.org/v2/api/#Vue-use install, // 同時(shí)導(dǎo)出組件列表 ...components }
在examples中的入口文件main.js引入注冊(cè)的全局組件。
//main.js ... import libs from "../packages" ... Vue.use(libs,{a:'test'})
到現(xiàn)在項(xiàng)目基本已經(jīng)跑起來(lái)了,在項(xiàng)目中可以直接調(diào)用組件了,無(wú)需在components里注冊(cè),平時(shí)開(kāi)發(fā)中你的全局組件也可以這樣來(lái)注冊(cè)使用。
四:組件打包
vue-cli3中提供了構(gòu)建一個(gè)庫(kù)的方法 ,默認(rèn)是構(gòu)建應(yīng)用,這個(gè)方法提供的幾個(gè)配置項(xiàng)主要有以下幾個(gè)
target: 改為 lib 可啟用構(gòu)建庫(kù)模式;
name: 構(gòu)建庫(kù)輸出的文件名;
dest: 構(gòu)建的輸出目錄,默認(rèn)為 dist;
entry: 入口文件路徑;
vue-cli-service build --target lib --name myLib --dest libs [entry]
所以需要在項(xiàng)目的package.json文件中添加一條上面的執(zhí)行腳本
"scripts": { "lib": "vue-cli-service build --target lib --name common --dest lib packages/index.js" }
vue-cli3的默認(rèn)配置是只對(duì)src目錄下的文件進(jìn)行編譯的,所有這里我們還需要在vue.config.js文件中將packages文件夾也加入loader編譯的配置(后測(cè)試可不加)。
chainWebpack:(config)=>{ config.module .rule('js') .include .add('/packages/') .end() .use('babel') .loader('babel-loader') .tap(options=>{ //TODO return options }) }
然后執(zhí)行npm run lib會(huì)在跟目錄下生成lib文件夾,lib會(huì)生成三種形式的文件(commonjs,umd,umd-min)
五:發(fā)布npm
有了上面的四步,基本上開(kāi)發(fā)階段算是完成了,接下來(lái)就是如何讓你的庫(kù)有一個(gè)存儲(chǔ)的地方,方便下一次的復(fù)用,首先你應(yīng)該想到了 npm ,這個(gè)node包管理庫(kù)。
一個(gè)基礎(chǔ)的npm包,你首先需要知道package.json中這些配置的作用
name -----> 包的名稱,必須唯一,不能跟已有的npm包重名,否則發(fā)布不上去;
version -----> 包的版本,當(dāng)你需要迭代版本時(shí),必須修改這個(gè)值(可手動(dòng)修改,可運(yùn)行以下命令修改);
$ npm version patch 會(huì)增加小版本 1.0.1:屬于小修改,不更改功能使用 $ npm version minor 會(huì)增加二級(jí) 1.1.0:可能添加了一些功能,不影響以前的使用。 $ npm version major 會(huì)增加大版本 2.0.0:可能改了API,輸入大范圍的修改。
main -----> 包的入口,當(dāng)你使用import xx from 'xxxx'的時(shí)候默認(rèn)引入的就是main文件;
private -----> 是否為私有包,如果傳到npm上必須改為false;
license ----->開(kāi)源協(xié)議
author ------>作者 <可選>
description ----->包的描述 <可選>
keyworlds ----->關(guān)鍵字 <可選>
repository ----->包存放的倉(cāng)庫(kù)地址
....... 還有很多配置項(xiàng)可自己查詢配置項(xiàng);
跟據(jù)上面的選項(xiàng),最終配置出的結(jié)果如下
{ "name":"vue-libs-demo", "version":"0.1.0", "author":{ "name":"mrlwc", "email":"845822761@qq.com" }, "private":false, "license":"MIT", "description":"test vue lib", "keyWorlds":["test","vue","libs"], "main":"lib/common.umd.min.js" }
npm 的發(fā)布也有需要忽略的敏感信息文件,所以需要添加.npmignore文件,排除開(kāi)發(fā)環(huán)境下的文件內(nèi)容
# dir examples/ packages/ public/ node_modules/ # Log filesnpm-debug.log* yarn-debug.log* yarn-error.log* vue.config.js babel.config.js *.map # Editor directories and files .DS_Store .idea .vscode *.suo *.ntvs* *.njsproj *.sln *.sw? .prettierrc
配置完后,就可以發(fā)布了,首先使用 npm login
一步步輸入賬號(hào),密碼,郵箱(如果沒(méi)有賬號(hào)的直接去官網(wǎng)注冊(cè)即可),然后運(yùn)行 npm publish
,如果失敗也許是包重名。
現(xiàn)在你的組件包已經(jīng)發(fā)布成功了,在其他項(xiàng)目中使用 npm install vue-libs-demo
后在入口文件 Vue.use(xxx)
即可使用所有的組件。
六:發(fā)布git倉(cāng)庫(kù)
你是否想過(guò),公司的代碼或者組件庫(kù)放到公開(kāi)平臺(tái)是不是有點(diǎn)不妥?畢竟這是公司賴以生存的寶貝不是?所以一般公司都會(huì)有自己的私有服務(wù)器,然后在上面搭建gitLab等一系列管理方式,所以公共組件庫(kù)同樣可以保存到這些倉(cāng)庫(kù)中。然后修改依賴安裝路勁來(lái)下載這些公用組件。
下面我就用gitee這個(gè)平臺(tái)來(lái)進(jìn)行操作
首先去gitee去建立一個(gè)空的倉(cāng)庫(kù);
將自己的項(xiàng)目推送到倉(cāng)庫(kù)中;
$ git remote add$ git push -u origin master
然后在自己的新項(xiàng)目中按下面的方式引入依賴后執(zhí)行npm install
好了到這里基本上就結(jié)束了?。ㄈ绻懈玫慕鉀Q方案,或者發(fā)現(xiàn)什么錯(cuò)誤的地方,可留言共同學(xué)習(xí))
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持創(chuàng)新互聯(lián)。