5-1 library 的打包

1. 簡介

我們開發(fā)一個(gè)庫叛溢,供別人使用 npm 下載使用時(shí)塑悼,為了保證兼容性和體積,應(yīng)該將其打包楷掉。本節(jié)介紹如何打包一個(gè)庫進(jìn)行發(fā)布厢蒜。

2. 初始化項(xiàng)目

首先,我們新建一個(gè)目錄烹植,叫 library-demo斑鸦,進(jìn)入該目錄,運(yùn)行命令:

npm init -y

這樣我們就初始化了一個(gè)項(xiàng)目草雕,并為其自動創(chuàng)建了一個(gè) package.json 如下:

{
  "name": "library-demo",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [],
  "author": "",
  "license": "ISC"
}

這個(gè)package.json 很簡單巷屿,介紹了一些項(xiàng)目信息,以及入口文件墩虹。

3. 實(shí)現(xiàn)庫邏輯

我們實(shí)現(xiàn)以下庫邏輯嘱巾,新建目錄 src, 然后在其下新建三個(gè)文件:

// math.js
export const add = (a, b) => a + b;
export const minus = (a, b) => a - b;
// string.js
export const join = (a, b) => a + ' ' + b;
// index.js
import * as math from './math';
import * as string from './string';

export default {
  math,
  string
}

4. 使用 webpack 進(jìn)行打包

首先诫钓,安裝 webpack旬昭,如下:

npm i webpack webpack-cli -D

然后新建一個(gè)配置文件:

// webpack.config.js
const path = require('path');

module.exports= {
  mode: 'production',
  entry: './src/index.js',
  output: {
    path: path.resolve(__dirname, 'dist'),
    filename: 'library-demo.js'
  }
};

修改 package.json 如下部分:

  "main": "dist/index.js",
  "scripts": {
    "build": "webpack",
    "test": "echo \"Error: no test specified\" && exit 1"
  },

然后運(yùn)行打包命令如下:

npm run build
image.png

5. umd

庫文件打包后,使用者在引入時(shí)菌湃,可能有多種方法问拘,比如 amd,cmd惧所,commonjs骤坐,甚至是直接使用 script 引入。所以我們可以將庫導(dǎo)出為一個(gè) umd 模塊纯路,支持以上所有的使用場景或油,如下:

    library: "libraryDemo", // the name of the exported library
    libraryTarget: "umd", // universal module definition

6. externals

假設(shè)我們開發(fā)的庫文件中本身引用了一個(gè)三方庫,如下:

// string.js
import _ from 'lodash'
export const join = (a, b) => _.join([a, b], ' ');

我們安裝 loadash 后打包:

npm i lodash -S
image.png

可以看到 lodash 被打入進(jìn)來驰唬,大大增加了包體顶岸,且拖慢了打包速度腔彰。lodash 這類三方庫其實(shí)一般都很穩(wěn)定,可以單獨(dú)拿出來加載并緩存辖佣。如下:

  externals: {
    _: 'lodash'
  }

打包后霹抛,發(fā)現(xiàn)沒有引入 lodash,包體大大減芯硖浮:


image.png

用戶使用的時(shí)候需要自己手動引入 lodash杯拐。

7. 發(fā)布

發(fā)布前我們首先需要注冊一個(gè) npm 賬號,https://www.npmjs.com/
然后使用 npm adduser 或者 npm login 來登錄世蔗,記得在此之前將 npm 的源切換到 npm 而不是 cnpm 或者其他源端逼,除非你本意是在其他源上進(jìn)行發(fā)布。
然后 npm publish 發(fā)布即可污淋。

參考

https://webpack.js.org/configuration/
可能是最詳細(xì)的UMD模塊入門指南
JS通用模塊模式 UMD
模塊化之AMD顶滩、CMD、UMD寸爆、commonJS
webpack 的externals配置
https://webpack.js.org/configuration/externals/

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末礁鲁,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子赁豆,更是在濱河造成了極大的恐慌仅醇,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,695評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件魔种,死亡現(xiàn)場離奇詭異析二,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)务嫡,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,569評論 3 399
  • 文/潘曉璐 我一進(jìn)店門甲抖,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人心铃,你說我怎么就攤上這事准谚。” “怎么了去扣?”我有些...
    開封第一講書人閱讀 168,130評論 0 360
  • 文/不壞的土叔 我叫張陵柱衔,是天一觀的道長。 經(jīng)常有香客問我愉棱,道長唆铐,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,648評論 1 297
  • 正文 為了忘掉前任奔滑,我火速辦了婚禮艾岂,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘朋其。我一直安慰自己王浴,他們只是感情好脆炎,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,655評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著氓辣,像睡著了一般秒裕。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上钞啸,一...
    開封第一講書人閱讀 52,268評論 1 309
  • 那天几蜻,我揣著相機(jī)與錄音,去河邊找鬼体斩。 笑死梭稚,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的硕勿。 我是一名探鬼主播哨毁,決...
    沈念sama閱讀 40,835評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼源武!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起想幻,我...
    開封第一講書人閱讀 39,740評論 0 276
  • 序言:老撾萬榮一對情侶失蹤粱栖,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后脏毯,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體闹究,經(jīng)...
    沈念sama閱讀 46,286評論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,375評論 3 340
  • 正文 我和宋清朗相戀三年食店,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了渣淤。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,505評論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡吉嫩,死狀恐怖价认,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情自娩,我是刑警寧澤用踩,帶...
    沈念sama閱讀 36,185評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站忙迁,受9級特大地震影響脐彩,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜姊扔,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,873評論 3 333
  • 文/蒙蒙 一惠奸、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧恰梢,春花似錦佛南、人聲如沸梗掰。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,357評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽愧怜。三九已至,卻和暖如春妈拌,著一層夾襖步出監(jiān)牢的瞬間拥坛,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,466評論 1 272
  • 我被黑心中介騙來泰國打工尘分, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留猜惋,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,921評論 3 376
  • 正文 我出身青樓培愁,卻偏偏與公主長得像著摔,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子定续,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,515評論 2 359

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