Vue基于已有的項(xiàng)目封裝組件發(fā)布npm

一、修改項(xiàng)目結(jié)構(gòu)

  • 當(dāng)前結(jié)構(gòu)


  • 修改后結(jié)構(gòu)

將原來的 src 目錄箱硕,修改成 examples
新建 packages 文件夾,用來存放后續(xù)的組件

二、修改配置

項(xiàng)目啟動(dòng)默認(rèn)入口是 src/main.js勾栗,第一步已將 src 文件名改成 examples 所以需要配置入口

  • 已有 vue.config.js 文件
module.exports = {
  pages: {
    index: {
      // 入口文件
      entry: 'examples/main.js',
      template: 'public/index.html',
      filename: 'index.html'
    }
  }
}
  • 沒有 vue.config.js 文件
    在根目錄下新建此文件 配置pages

重新啟動(dòng)項(xiàng)目 查看路徑是否正確并能正常啟動(dòng)項(xiàng)目

三、開發(fā)組件

之前已經(jīng)創(chuàng)建了一個(gè) packages 目錄盏筐,用來存放組件
該目錄下存放每個(gè)組件單獨(dú)的開發(fā)目錄围俘,和一個(gè) index.js 整合所有組件,并對(duì)外導(dǎo)出
每個(gè)組件都應(yīng)該歸類于單獨(dú)的目錄下琢融,包含其組件源碼目錄 src界牡,和 index.js 便于外部引用

test組件為例,完整的packages如下

  • packages/test/src.main.vue 是組件的代碼 注意點(diǎn): 一定要聲明name漾抬,name就是組件的標(biāo)簽
  • packages/test/index.js 用于導(dǎo)出單個(gè)組件宿亡,如果要做按需引入,也需要在這里配置
// 導(dǎo)入組件纳令,組件必須聲明 name
import Test from './src/main.vue'

// 為組件添加 install 方法挽荠,用于按需引入
Test.install = function (Vue) {
    Vue.component(Test.name, Test)
}

// 默認(rèn)導(dǎo)出組件
export default Test
  • packages/index.js 整合并導(dǎo)出組件克胳,實(shí)現(xiàn)組件全局注冊(cè)
// 導(dǎo)入單個(gè)組件
import Test from './test/index.js'

// 以數(shù)組的結(jié)構(gòu)保存組件,便于遍歷
const components = [
    Test
]

// 定義 install 方法圈匆,接收 Vue 作為參數(shù)漠另。如果使用 use 注冊(cè)插件,則所有的組件都將被注冊(cè)
const install = function (Vue) {
    // 判斷是否安裝
    if (install.installed) return
    install.installed = true
    // 遍歷并注冊(cè)全局組件
    components.map(component => Vue.component(component.name, component))
}

// 判斷是否是直接引入文件
if (typeof window !== 'undefined' && window.Vue) {
    install(window.Vue)
}

export default {
    // 導(dǎo)出的對(duì)象必須具有 install臭脓,才能被 Vue.use() 方法安裝
    install,
    // 組件列表
    ...components
}

四酗钞、測(cè)試組件是否封裝成功

在examples/main.js中引入組件

// 這里的 TagTest 就是組件內(nèi)定義的name
import TagTest from 'pack/index.js'
Vue.use(TagTest)

運(yùn)行項(xiàng)目測(cè)試組件是否有bug

五、打包組件

在 package.json 里的 scripts 添加一個(gè) lib 命令

"build:lib": "vue-cli-service build --target lib --name 生成的庫(kù)名 --dest lib packages/index.js"

運(yùn)行 npm run build:lib来累,編譯組件砚作,成功后會(huì)在根目錄生成一個(gè)lib文件

六、發(fā)布

配置package.json文件中發(fā)布到npm的字段

{
  "name": "xxx", // 包名嘹锁,該名字是唯一的葫录。可在 npm 官網(wǎng)搜索名字领猾,如果存在則需換個(gè)名字米同。
  "version": "0.1.0", // 版本號(hào),每次發(fā)布至 npm 需要修改版本號(hào)摔竿,不能和歷史版本號(hào)相同面粮。
  "description": "", // 描述
  "main": "lib/xxx.umd.min.js", //  入口文件,該字段需指向我們最終編譯后的包文件继低。
  "keyword": "", // 關(guān)鍵字熬苍,以空格分離希望用戶最終搜索的詞。
  "private": false // 是否私有袁翁,需要修改為 false 才能發(fā)布到 npm
  "author": "lh"  // 作者
  "license": "MIT" // 開源協(xié)議

在根目錄下新建.npmignore文件柴底,設(shè)置忽略發(fā)布文件

.DS_Store
node_modules/
examples/
packages/
public/
vue.config.js
babel.config.js
*.map
*.html

# local env files
.env.local
.env.*.local

# Log files
npm-debug.log*
yarn-debug.log*
yarn-error.log*

# Editor directories and files
.idea
.vscode
*.suo
*.ntvs*
*.njsproj
*.sln
*.sw*

七、發(fā)布npm

  • 切換鏡像
npm config set registry http://registry.npmjs.org 
  • 登陸npm
npm login
  • 上傳發(fā)布
 npm publish
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末粱胜,一起剝皮案震驚了整個(gè)濱河市柄驻,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌焙压,老刑警劉巖鸿脓,帶你破解...
    沈念sama閱讀 211,290評(píng)論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異冗恨,居然都是意外死亡答憔,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門掀抹,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人心俗,你說我怎么就攤上這事傲武∪鼐裕” “怎么了?”我有些...
    開封第一講書人閱讀 156,872評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵揪利,是天一觀的道長(zhǎng)态兴。 經(jīng)常有香客問我,道長(zhǎng)疟位,這世上最難降的妖魔是什么瞻润? 我笑而不...
    開封第一講書人閱讀 56,415評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮甜刻,結(jié)果婚禮上绍撞,老公的妹妹穿的比我還像新娘。我一直安慰自己得院,他們只是感情好傻铣,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,453評(píng)論 6 385
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著祥绞,像睡著了一般非洲。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上蜕径,一...
    開封第一講書人閱讀 49,784評(píng)論 1 290
  • 那天两踏,我揣著相機(jī)與錄音,去河邊找鬼兜喻。 笑死梦染,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的虹统。 我是一名探鬼主播弓坞,決...
    沈念sama閱讀 38,927評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼车荔!你這毒婦竟也來了渡冻?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,691評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤忧便,失蹤者是張志新(化名)和其女友劉穎族吻,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體珠增,經(jīng)...
    沈念sama閱讀 44,137評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡超歌,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,472評(píng)論 2 326
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了蒂教。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片巍举。...
    茶點(diǎn)故事閱讀 38,622評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖凝垛,靈堂內(nèi)的尸體忽然破棺而出懊悯,到底是詐尸還是另有隱情蜓谋,我是刑警寧澤,帶...
    沈念sama閱讀 34,289評(píng)論 4 329
  • 正文 年R本政府宣布炭分,位于F島的核電站桃焕,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏捧毛。R本人自食惡果不足惜观堂,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,887評(píng)論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望呀忧。 院中可真熱鬧师痕,春花似錦、人聲如沸荐虐。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽福扬。三九已至腕铸,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間铛碑,已是汗流浹背狠裹。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評(píng)論 1 265
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留汽烦,地道東北人涛菠。 一個(gè)月前我還...
    沈念sama閱讀 46,316評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像撇吞,于是被迫代替她去往敵國(guó)和親俗冻。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,490評(píng)論 2 348