用vue封裝插件并發(fā)布到npm

一婚温、基于vue的國家區(qū)號列表

vue-flag-list包含了大部分國家的區(qū)號,點擊右邊的三角形展開列表可以選擇國家區(qū)號媳否,若列表中沒有區(qū)號栅螟,也可以自己輸入?yún)^(qū)號。

全球區(qū)號列表
1.1 初始化組件

用的是vue-cli來初始化組件篱竭,雖然有很多東西不需要力图,因為對這個比較熟悉,所以還是按照這個步驟來室抽。

vue init webpack vue-flag-list
cd vue-flag-list
cnpm install 
npm run dev
1.2 根據(jù)自己的需求搪哪,實現(xiàn)具體功能,我的主要功能寫在vue-flag-list.vue組件中坪圾。
<template>
  <div id="flag">
    ...
  </div>
</template>

<script>
  export default {
     name: 'vue-flag-list',
     ...
  }
</script>

<style scoped>
  ...
</style>

功能寫好后晓折,修改package.json等配置文件,為打包發(fā)布做準備

1.3 添加index.js
import flagComponent from './Vue-Flag-List.vue'

const VueFlagList = {
  install: function (Vue) {
    if (typeof window !== 'undefined' && window.Vue) {
      Vue = window.Vue
    }
    Vue.component('VueFlagList', flagComponent)
  }
}

export default VueFlagList
1.4 修改配置文件
1.4.1 package.json
{
  "name": "vue-flag-list",
  "version": "1.0.0",
  "description": "A vue plugin for entering and selecting area code",
  "author": "guimin",
   // 因為組件包是公用的兽泄,所以private為false
  "private": false,
   // 配置main結點漓概,如果不配置,我們在其他項目中就不用import XX from '包名'來引用了病梢,只能以包名作為起點來指定相對的路徑
  "main": "dist/vue-flag-list.min.js", 
  "scripts": {
    "dev": "node build/dev-server.js",
    "start": "node build/dev-server.js",
    "build": "node build/build.js"
  },
  // 指定代碼所在的倉庫地址
  "repository": {
    "type": "git",
    "url": "git+https://github.com/linmoer/vue-flag-list.git"
  },
  // 指定打包之后胃珍,包中存在的文件夾
  "files": [
    "dist",
    "src"
  ],
  // 指定關鍵字
  "keywords": [
    "vue",
    "flag",
    "code",
    "flag code"
  ],
  "license": "MIT", //開源協(xié)議
  // 項目官網(wǎng)的url
  "homepage": "https://github.com/linmoer/vue-flag-list#readme",
  "dependencies": {
    "vue": "^2.3.3"
  },
  "devDependencies": {
    ...
  },
  "engines": {...},
  "browserslist": [...]
}

1.4.2 .gitignore 文件
因為要用dist文件夾梁肿,所以在.gitignore文件中把dist/去掉。
1.4.3 webpack.prod.conf.js 文件

為了支持多種使用場景觅彰,我們需要選擇合適的打包格式吩蔑。常見的打包格式有 CMD、AMD填抬、UMD烛芬,CMD只能在 Node 環(huán)境執(zhí)行,AMD 只能在瀏覽器端執(zhí)行飒责,UMD 同時支持兩種執(zhí)行環(huán)境赘娄。顯而易見,我們應該選擇 UMD 格式宏蛉。Webpack 中指定輸出格式的設置項為 output.libraryTarget遣臼,其支持的格式有:

  • “var” - 以一個變量形式輸出: var Library = xxx (default);
  • “this” - 以 this 的一個屬性輸出: this[“Library”] = xxx拾并;
  • “commonjs” - 以 exports 的一個屬性輸出:exports[“Library”] = xxx揍堰;
  • “commonjs2” - 以 module.exports 形式輸出:module.exports = xxx;
  • “amd” - 以 AMD 格式輸出辟灰;
  • “umd” - 同時以 AMD个榕、CommonJS2 和全局屬性形式輸出。

以下是 webpack.prod.conf.js 中 output 設置的示例:

  output: {
    path: path.resolve(__dirname, '../dist'),
    publicPath: '',
    filename: 'vue-flag-list.min.js',
    library: 'VueFlagList',
    libraryTarget: 'umd',
    umdNamedDefine: true
  },

Vue 是組件庫的外部依賴芥喇。組件庫的使用者會自行導入 Vue西采,打包的時候,不應該將 Vue 打包進組件庫继控。但是械馆,如果你將打包后的組件庫以 <script> 標簽形式直接引入,你會發(fā)現(xiàn)并不能正常執(zhí)行武通,提示 vue 未定義霹崎。
以 <script> 標簽形式使用組件時,會同樣使用 <script> 標簽導入 Vue冶忱。Vue 導入的變量是 “window.Vue” 而不是 “window.vue”尾菇,因此會出現(xiàn) vue 未定義的錯誤。

所以囚枪,我們需要在 webpack.prod.conf.js 中配置 externals派诬,如下:

externals: {
    vue: {
      root: 'Vue',
      commonjs: 'vue',
      commonjs2: 'vue',
      amd: 'vue'
    }
  },

另外,為了將css打包成一個文件链沼,所以需要將 webpack.prod.conf.js 中的
plugins 選項的

new ExtractTextPlugin({
      filename: utils.assetsPath('css/[name].[contenthash].css')
    }),

修改為

new ExtractTextPlugin({
      filename: 'vue-flag-list.min.css'
    }),

修改入口文件

entry: {
    app: './src/index.js'
  },
1.5 整理一下目錄結構默赂,我的目錄結構如下:
- vue-flag-list
  + build
  + dist
  - src
    + img
    index.js
    Vue-Flag-List.vue
  ...

二、用npm發(fā)布一個包

  • 在發(fā)正式包之前可以在本地先打一個包括勺,然后測試下有沒有問題缆八,如果沒問題再發(fā)布到npm上曲掰。
2.1 打包到本地使用
npm run build
npm pack

npm pack 之后,就會在當前目錄下生成 vue-flag-list-1.0.0.tgz 的文件奈辰。

打開一個新的vue項目栏妖,在當前路徑下執(zhí)行('路徑' 表示文件所在的位置)

cnpm install 路徑/vue-flag-list-1.0.0.tgz

在新項目的入口文件(main.js)中引入

import VueFlagList from 'vue-flag-list'
import 'vue-flag-list/dist/vue-flag-list.min.css'

Vue.use(VueFlagList)

在組件中使用

<flagCode height="30" width="120" @getCode="getCode"></flagCode>

methos: {
    getCode(code) {
        console.log(code)
    }
}
2.2 發(fā)布到npm

1、在 npm官網(wǎng) 注冊一個npm賬號

2冯挎、切換到需要發(fā)包的項目根目錄下底哥,登錄npm賬號咙鞍,輸入用戶名房官、密碼、郵箱

npm login

3续滋、最后一步翰守,執(zhí)行npm publish即可

# lin@lin-Pro in ~/www/vue-flag-list on git:master $ npm publish
# lin@lin-Pro in ~/www/vue-flag-list on git:master $ + vue-flag-list@1.0.0

三、后記

折騰了很久疲酌,終于把vue-flag-list插件的雛形發(fā)布出去了蜡峰,這是一個很簡單的插件,以后會繼續(xù)維護它朗恳,添加更多的實用功能湿颅。

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市粥诫,隨后出現(xiàn)的幾起案子油航,更是在濱河造成了極大的恐慌,老刑警劉巖怀浆,帶你破解...
    沈念sama閱讀 206,378評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件谊囚,死亡現(xiàn)場離奇詭異,居然都是意外死亡执赡,警方通過查閱死者的電腦和手機镰踏,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來沙合,“玉大人奠伪,你說我怎么就攤上這事∈仔福” “怎么了绊率?”我有些...
    開封第一講書人閱讀 152,702評論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長猜拾。 經(jīng)常有香客問我即舌,道長,這世上最難降的妖魔是什么挎袜? 我笑而不...
    開封第一講書人閱讀 55,259評論 1 279
  • 正文 為了忘掉前任顽聂,我火速辦了婚禮肥惭,結果婚禮上,老公的妹妹穿的比我還像新娘紊搪。我一直安慰自己蜜葱,他們只是感情好,可當我...
    茶點故事閱讀 64,263評論 5 371
  • 文/花漫 我一把揭開白布耀石。 她就那樣靜靜地躺著牵囤,像睡著了一般。 火紅的嫁衣襯著肌膚如雪滞伟。 梳的紋絲不亂的頭發(fā)上揭鳞,一...
    開封第一講書人閱讀 49,036評論 1 285
  • 那天,我揣著相機與錄音梆奈,去河邊找鬼野崇。 笑死,一個胖子當著我的面吹牛亩钟,可吹牛的內(nèi)容都是我干的乓梨。 我是一名探鬼主播,決...
    沈念sama閱讀 38,349評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼清酥,長吁一口氣:“原來是場噩夢啊……” “哼扶镀!你這毒婦竟也來了?” 一聲冷哼從身側響起焰轻,我...
    開封第一講書人閱讀 36,979評論 0 259
  • 序言:老撾萬榮一對情侶失蹤臭觉,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后鹦马,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體胧谈,經(jīng)...
    沈念sama閱讀 43,469評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,938評論 2 323
  • 正文 我和宋清朗相戀三年荸频,在試婚紗的時候發(fā)現(xiàn)自己被綠了菱肖。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,059評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡旭从,死狀恐怖稳强,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情和悦,我是刑警寧澤退疫,帶...
    沈念sama閱讀 33,703評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站鸽素,受9級特大地震影響褒繁,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜馍忽,卻給世界環(huán)境...
    茶點故事閱讀 39,257評論 3 307
  • 文/蒙蒙 一棒坏、第九天 我趴在偏房一處隱蔽的房頂上張望燕差。 院中可真熱鬧,春花似錦坝冕、人聲如沸徒探。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,262評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽测暗。三九已至,卻和暖如春磨澡,著一層夾襖步出監(jiān)牢的瞬間碗啄,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工钱贯, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留挫掏,地道東北人。 一個月前我還...
    沈念sama閱讀 45,501評論 2 354
  • 正文 我出身青樓秩命,卻偏偏與公主長得像,于是被迫代替她去往敵國和親褒傅。 傳聞我的和親對象是個殘疾皇子弃锐,可洞房花燭夜當晚...
    茶點故事閱讀 42,792評論 2 345

推薦閱讀更多精彩內(nèi)容